| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.7 |
| |
| import 'package:async_helper/async_helper.dart'; |
| import 'package:compiler/src/commandline_options.dart'; |
| import 'package:compiler/src/common_elements.dart'; |
| import 'package:compiler/src/common/names.dart'; |
| import 'package:compiler/src/compiler.dart'; |
| import 'package:compiler/src/elements/entities.dart'; |
| import 'package:compiler/src/inferrer/abstract_value_domain.dart'; |
| import 'package:compiler/src/inferrer/typemasks/masks.dart'; |
| import 'package:compiler/src/js_model/element_map.dart'; |
| import 'package:compiler/src/js_model/js_world.dart'; |
| import 'package:expect/expect.dart'; |
| import 'package:kernel/ast.dart' as ir; |
| import '../helpers/memory_compiler.dart'; |
| |
| const String source = ''' |
| import 'package:expect/expect.dart' deferred as expect; |
| |
| main() { |
| callLoadLibrary(); |
| } |
| |
| callLoadLibrary() => expect.loadLibrary(); |
| '''; |
| |
| main() async { |
| asyncTest(() async { |
| print('--test Dart 2 ----------------------------------------------------'); |
| await runTest([], trust: false); |
| print('--test Dart 2 --omit-implicit-checks -----------------------------'); |
| await runTest([Flags.omitImplicitChecks]); |
| }); |
| } |
| |
| runTest(List<String> options, {bool trust: true}) async { |
| CompilationResult result = await runCompiler( |
| memorySourceFiles: {'main.dart': source}, options: options); |
| Expect.isTrue(result.isSuccess); |
| Compiler compiler = result.compiler; |
| JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting; |
| AbstractValueDomain abstractValueDomain = closedWorld.abstractValueDomain; |
| ElementEnvironment elementEnvironment = closedWorld.elementEnvironment; |
| LibraryEntity helperLibrary = |
| elementEnvironment.lookupLibrary(Uris.dart__js_helper); |
| FunctionEntity loadDeferredLibrary = elementEnvironment.lookupLibraryMember( |
| helperLibrary, 'loadDeferredLibrary'); |
| TypeMask typeMask; |
| |
| KernelToLocalsMap localsMap = compiler |
| .globalInference.resultsForTesting.globalLocalsMap |
| .getLocalsMap(loadDeferredLibrary); |
| MemberDefinition definition = |
| closedWorld.elementMap.getMemberDefinition(loadDeferredLibrary); |
| ir.Procedure procedure = definition.node; |
| typeMask = compiler.globalInference.resultsForTesting.resultOfParameter( |
| localsMap |
| .getLocalVariable(procedure.function.positionalParameters.first)); |
| |
| if (trust) { |
| Expect.equals( |
| abstractValueDomain.includeNull(abstractValueDomain.stringType), |
| typeMask); |
| } else { |
| Expect.equals(abstractValueDomain.dynamicType, typeMask); |
| } |
| } |