v8/test/mjsunit/modules-import-meta-turbo.mjs
Georg Neis cd718536ec [turbofan] Optimize import.meta
Make JSContextSpecialization constant-fold import.meta loads if the
meta object has already been created.

Most of this CL was contributed by Gus Caplan.

This is a verbatim copy of CL
https://chromium-review.googlesource.com/c/v8/v8/+/2170982
which could not be landed due to the wrong email address
being used.

TBR=verwaest@chromium.org
TBR=gsathya@chromium.org

Bug: v8:7044
Change-Id: Ief45f3082dc756265904ff500305d32717071e81
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2299375
Reviewed-by: Georg Neis <neis@chromium.org>
Commit-Queue: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68875}
2020-07-15 15:41:11 +00:00

48 lines
1.3 KiB
JavaScript

// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax --opt
import { getImportMeta } from 'modules-skip-import-meta-export.mjs';
function foo() {
return import.meta;
}
%PrepareFunctionForOptimization(foo);
%OptimizeFunctionOnNextCall(foo);
// Optimize when import.meta hasn't been created yet.
assertEquals('object', typeof foo());
assertEquals(import.meta, foo());
assertOptimized(foo);
function bar() {
return import.meta;
}
%PrepareFunctionForOptimization(bar);
// Optimize when import.meta already exists.
%OptimizeFunctionOnNextCall(bar);
assertEquals(import.meta, bar());
assertOptimized(bar);
%PrepareFunctionForOptimization(getImportMeta);
%OptimizeFunctionOnNextCall(getImportMeta);
assertEquals('object', typeof getImportMeta());
assertOptimized(getImportMeta);
assertNotEquals(import.meta, getImportMeta());
assertOptimized(getImportMeta);
function baz() {
return getImportMeta();
}
// Test inlined (from another module) import.meta accesses.
%PrepareFunctionForOptimization(baz);
baz();
%OptimizeFunctionOnNextCall(baz);
assertEquals('object', typeof baz());
assertNotEquals(import.meta, baz());
assertEquals(baz(), getImportMeta());
assertOptimized(baz);