// 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);