Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map.dart

Issue 2942863002: Compile and run Hello World! (Closed)
Patch Set: Rebased Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:js_runtime/shared/embedded_names.dart';
5 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
6 7
7 import '../closure.dart'; 8 import '../closure.dart';
8 import '../common.dart'; 9 import '../common.dart';
9 import '../common/names.dart'; 10 import '../common/names.dart';
10 import '../constants/constructors.dart'; 11 import '../constants/constructors.dart';
11 import '../constants/expressions.dart'; 12 import '../constants/expressions.dart';
12 import '../constants/values.dart'; 13 import '../constants/values.dart';
13 import '../common_elements.dart'; 14 import '../common_elements.dart';
14 import '../elements/entities.dart'; 15 import '../elements/entities.dart';
15 import '../elements/jumps.dart'; 16 import '../elements/jumps.dart';
16 import '../elements/names.dart'; 17 import '../elements/names.dart';
17 import '../elements/operators.dart'; 18 import '../elements/operators.dart';
18 import '../elements/types.dart'; 19 import '../elements/types.dart';
20 import '../js/js.dart' as js;
19 import '../js_backend/backend.dart' show JavaScriptBackend; 21 import '../js_backend/backend.dart' show JavaScriptBackend;
22 import '../js_backend/namer.dart';
23 import '../js_emitter/code_emitter_task.dart';
20 import '../native/native.dart' as native; 24 import '../native/native.dart' as native;
21 import '../types/types.dart'; 25 import '../types/types.dart';
22 import '../universe/call_structure.dart'; 26 import '../universe/call_structure.dart';
23 import '../universe/selector.dart'; 27 import '../universe/selector.dart';
24 import '../world.dart'; 28 import '../world.dart';
25 import 'kernel_debug.dart'; 29 import 'kernel_debug.dart';
26 30
27 /// Interface that translates between Kernel IR nodes and entities. 31 /// Interface that translates between Kernel IR nodes and entities.
28 abstract class KernelToElementMap { 32 abstract class KernelToElementMap {
29 /// Access to the commonly used elements and types. 33 /// Access to the commonly used elements and types.
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 ir.StaticInvocation node); 143 ir.StaticInvocation node);
140 144
141 /// Computes the [native.NativeBehavior] for a call to the 145 /// Computes the [native.NativeBehavior] for a call to the
142 /// [JS_EMBEDDED_GLOBAL] function. 146 /// [JS_EMBEDDED_GLOBAL] function.
143 native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall( 147 native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
144 ir.StaticInvocation node); 148 ir.StaticInvocation node);
145 149
146 /// Compute the kind of foreign helper function called by [node], if any. 150 /// Compute the kind of foreign helper function called by [node], if any.
147 ForeignKind getForeignKind(ir.StaticInvocation node); 151 ForeignKind getForeignKind(ir.StaticInvocation node);
148 152
153 /// Returns the [js.Name] for the `JsGetName` [constant] value.
154 js.Name getNameForJsGetName(ConstantValue constant, Namer namer);
155
156 /// Returns the [js.Template] for the `JsBuiltin` [constant] value.
157 js.Template getJsBuiltinTemplate(
158 ConstantValue constant, CodeEmitterTask emitter);
159
149 /// Computes the [InterfaceType] referenced by a call to the 160 /// Computes the [InterfaceType] referenced by a call to the
150 /// [JS_INTERCEPTOR_CONSTANT] function, if any. 161 /// [JS_INTERCEPTOR_CONSTANT] function, if any.
151 InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node); 162 InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node);
152 163
153 /// Computes the [ConstantValue] for the constant [expression]. 164 /// Computes the [ConstantValue] for the constant [expression].
154 ConstantValue getConstantValue(ir.Expression expression, 165 ConstantValue getConstantValue(ir.Expression expression,
155 {bool requireConstant: true, bool implicitNull: false}); 166 {bool requireConstant: true, bool implicitNull: false});
156 167
157 /// Return the [ConstantValue] the initial value of [field] or `null` if 168 /// Return the [ConstantValue] the initial value of [field] or `null` if
158 /// the initializer is not a constant expression. 169 /// the initializer is not a constant expression.
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 // `Object.superNoSuchMethod`. 538 // `Object.superNoSuchMethod`.
528 break; 539 break;
529 } 540 }
530 } 541 }
531 FunctionEntity function = elementEnvironment.lookupClassMember( 542 FunctionEntity function = elementEnvironment.lookupClassMember(
532 commonElements.objectClass, Identifiers.noSuchMethod_); 543 commonElements.objectClass, Identifiers.noSuchMethod_);
533 assert(function != null, 544 assert(function != null,
534 failedAt(cls, "No super noSuchMethod found for class $cls.")); 545 failedAt(cls, "No super noSuchMethod found for class $cls."));
535 return function; 546 return function;
536 } 547 }
548
549 js.Name getNameForJsGetName(ConstantValue constant, Namer namer) {
550 int index = _extractEnumIndexFromConstantValue(
551 constant, commonElements.jsGetNameEnum);
552 if (index == null) return null;
553 return namer.getNameForJsGetName(
554 CURRENT_ELEMENT_SPANNABLE, JsGetName.values[index]);
555 }
556
557 js.Template getJsBuiltinTemplate(
558 ConstantValue constant, CodeEmitterTask emitter) {
559 int index = _extractEnumIndexFromConstantValue(
560 constant, commonElements.jsBuiltinEnum);
561 if (index == null) return null;
562 return emitter.builtinTemplateFor(JsBuiltin.values[index]);
563 }
564
565 int _extractEnumIndexFromConstantValue(
566 ConstantValue constant, ClassEntity classElement) {
567 if (constant is ConstructedConstantValue) {
568 if (constant.type.element == classElement) {
569 assert(constant.fields.length == 1 || constant.fields.length == 2);
570 ConstantValue indexConstant = constant.fields.values.first;
571 if (indexConstant is IntConstantValue) {
572 return indexConstant.primitiveValue;
573 }
574 }
575 }
576 return null;
577 }
537 } 578 }
538 579
539 /// Visitor that converts string literals and concatenations of string literals 580 /// Visitor that converts string literals and concatenations of string literals
540 /// into the string value. 581 /// into the string value.
541 class Stringifier extends ir.ExpressionVisitor<String> { 582 class Stringifier extends ir.ExpressionVisitor<String> {
542 @override 583 @override
543 String visitStringLiteral(ir.StringLiteral node) => node.value; 584 String visitStringLiteral(ir.StringLiteral node) => node.value;
544 585
545 @override 586 @override
546 String visitStringConcatenation(ir.StringConcatenation node) { 587 String visitStringConcatenation(ir.StringConcatenation node) {
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 /// [closureClassMaps]. 1083 /// [closureClassMaps].
1043 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop( 1084 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop(
1044 ClosureDataLookup closureLookup, ir.TreeNode node); 1085 ClosureDataLookup closureLookup, ir.TreeNode node);
1045 } 1086 }
1046 1087
1047 /// Comparator for the canonical order or named arguments. 1088 /// Comparator for the canonical order or named arguments.
1048 // TODO(johnniwinther): Remove this when named parameters are sorted in dill. 1089 // TODO(johnniwinther): Remove this when named parameters are sorted in dill.
1049 int namedOrdering(ir.VariableDeclaration a, ir.VariableDeclaration b) { 1090 int namedOrdering(ir.VariableDeclaration a, ir.VariableDeclaration b) {
1050 return a.name.compareTo(b.name); 1091 return a.name.compareTo(b.name);
1051 } 1092 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/type_test_registry.dart ('k') | pkg/compiler/lib/src/kernel/element_map_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698