| Index: pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
|
| index 0b54193ad356ab74e563f6de983d88c93ca8e20f..ab23be0bc4cd3db63a0107681f5e41ccd86217ab 100644
|
| --- a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
|
| +++ b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
|
| @@ -2,6 +2,7 @@
|
| // 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.
|
|
|
| +import 'package:js_runtime/shared/embedded_names.dart';
|
| import 'package:kernel/ast.dart' as ir;
|
|
|
| import '../common.dart';
|
| @@ -10,8 +11,10 @@ import '../compiler.dart';
|
| import '../constants/values.dart';
|
| import '../dart_types.dart';
|
| import '../elements/elements.dart';
|
| +import '../js/js.dart' as js;
|
| import '../js_backend/js_backend.dart';
|
| import '../kernel/kernel.dart';
|
| +import '../native/native.dart' as native;
|
| import '../resolution/tree_elements.dart';
|
| import '../tree/tree.dart' as ast;
|
| import '../types/masks.dart';
|
| @@ -220,6 +223,10 @@ class KernelAstAdapter {
|
| return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler);
|
| }
|
|
|
| + TypeMask typeFromNativeBehavior(native.NativeBehavior nativeBehavior) {
|
| + return TypeMaskFactory.fromNativeBehavior(nativeBehavior, _compiler);
|
| + }
|
| +
|
| ConstantValue getConstantFor(ir.Node node) {
|
| ConstantValue constantValue =
|
| _backend.constants.getConstantValueForNode(getNode(node), elements);
|
| @@ -272,6 +279,45 @@ class KernelAstAdapter {
|
| TypeMask get assertThrowReturnType => TypeMaskFactory
|
| .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler);
|
|
|
| + ir.Procedure get currentIsolate =>
|
| + kernel.functions[_backend.helpers.currentIsolate];
|
| +
|
| + bool isInForeignLibrary(ir.Member member) =>
|
| + _backend.isForeign(getElement(member));
|
| +
|
| + native.NativeBehavior getNativeBehavior(ir.Node node) {
|
| + return elements.getNativeData(getNode(node));
|
| + }
|
| +
|
| + js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) {
|
| + int index = _extractEnumIndexFromConstantValue(
|
| + constant, _backend.helpers.jsGetNameEnum);
|
| + if (index == null) return null;
|
| + return _backend.namer
|
| + .getNameForJsGetName(getNode(argument), JsGetName.values[index]);
|
| + }
|
| +
|
| + js.Template getJsBuiltinTemplate(ConstantValue constant) {
|
| + int index = _extractEnumIndexFromConstantValue(
|
| + constant, _backend.helpers.jsBuiltinEnum);
|
| + if (index == null) return null;
|
| + return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]);
|
| + }
|
| +
|
| + int _extractEnumIndexFromConstantValue(
|
| + ConstantValue constant, Element classElement) {
|
| + if (constant is ConstructedConstantValue) {
|
| + if (constant.type.element == classElement) {
|
| + assert(constant.fields.length == 1);
|
| + ConstantValue indexConstant = constant.fields.values.single;
|
| + if (indexConstant is IntConstantValue) {
|
| + return indexConstant.primitiveValue;
|
| + }
|
| + }
|
| + }
|
| + return null;
|
| + }
|
| +
|
| DartType getDartType(ir.DartType type) {
|
| return type.accept(_typeConverter);
|
| }
|
|
|