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 095473111da3e46b1ac898d69c8bdefc30223e6c..aac72e4c6a36765689035ee2202ca3f89edf8ee0 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 '../closure.dart'; |
@@ -16,6 +17,7 @@ import '../elements/jumps.dart'; |
import '../elements/modelx.dart'; |
import '../elements/resolution_types.dart'; |
import '../elements/types.dart'; |
+import '../js/js.dart' as js; |
import '../js_backend/js_backend.dart'; |
import '../kernel/element_map.dart'; |
import '../kernel/kernel.dart'; |
@@ -239,6 +241,35 @@ class KernelAstAdapter extends KernelToElementMapMixin |
}); |
} |
+ js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) { |
+ int index = _extractEnumIndexFromConstantValue( |
+ constant, _compiler.resolution.commonElements.jsGetNameEnum); |
+ if (index == null) return null; |
+ return _backend.namer |
+ .getNameForJsGetName(getNode(argument), JsGetName.values[index]); |
+ } |
+ |
+ js.Template getJsBuiltinTemplate(ConstantValue constant) { |
+ int index = _extractEnumIndexFromConstantValue( |
+ constant, _compiler.resolution.commonElements.jsBuiltinEnum); |
+ if (index == null) return null; |
+ return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]); |
+ } |
+ |
+ int _extractEnumIndexFromConstantValue( |
+ ConstantValue constant, ClassEntity classElement) { |
+ if (constant is ConstructedConstantValue) { |
+ if (constant.type.element == classElement) { |
+ assert(constant.fields.length == 1 || constant.fields.length == 2); |
+ ConstantValue indexConstant = constant.fields.values.first; |
+ if (indexConstant is IntConstantValue) { |
+ return indexConstant.primitiveValue; |
+ } |
+ } |
+ } |
+ return null; |
+ } |
+ |
DartType getDartType(ir.DartType type) { |
return _typeConverter.convert(type); |
} |