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

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

Issue 2938193003: Revert "Towards compiling Hello World!" and "Compile and run Hello World!" (Closed)
Patch Set: 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';
6 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
7 6
8 import '../closure.dart'; 7 import '../closure.dart';
9 import '../common.dart'; 8 import '../common.dart';
10 import '../common/names.dart'; 9 import '../common/names.dart';
11 import '../constants/constructors.dart'; 10 import '../constants/constructors.dart';
12 import '../constants/expressions.dart'; 11 import '../constants/expressions.dart';
13 import '../constants/values.dart'; 12 import '../constants/values.dart';
14 import '../common_elements.dart'; 13 import '../common_elements.dart';
15 import '../elements/entities.dart'; 14 import '../elements/entities.dart';
16 import '../elements/jumps.dart'; 15 import '../elements/jumps.dart';
17 import '../elements/names.dart'; 16 import '../elements/names.dart';
18 import '../elements/operators.dart'; 17 import '../elements/operators.dart';
19 import '../elements/types.dart'; 18 import '../elements/types.dart';
20 import '../js/js.dart' as js;
21 import '../js_backend/backend.dart' show JavaScriptBackend; 19 import '../js_backend/backend.dart' show JavaScriptBackend;
22 import '../js_backend/namer.dart';
23 import '../js_emitter/code_emitter_task.dart';
24 import '../native/native.dart' as native; 20 import '../native/native.dart' as native;
25 import '../types/types.dart'; 21 import '../types/types.dart';
26 import '../universe/call_structure.dart'; 22 import '../universe/call_structure.dart';
27 import '../universe/selector.dart'; 23 import '../universe/selector.dart';
28 import '../world.dart'; 24 import '../world.dart';
29 import 'kernel_debug.dart'; 25 import 'kernel_debug.dart';
30 26
31 /// Interface that translates between Kernel IR nodes and entities. 27 /// Interface that translates between Kernel IR nodes and entities.
32 abstract class KernelToElementMap { 28 abstract class KernelToElementMap {
33 /// Access to the commonly used elements and types. 29 /// Access to the commonly used elements and types.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 ir.StaticInvocation node); 140 ir.StaticInvocation node);
145 141
146 /// Computes the [native.NativeBehavior] for a call to the 142 /// Computes the [native.NativeBehavior] for a call to the
147 /// [JS_EMBEDDED_GLOBAL] function. 143 /// [JS_EMBEDDED_GLOBAL] function.
148 native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall( 144 native.NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
149 ir.StaticInvocation node); 145 ir.StaticInvocation node);
150 146
151 /// Compute the kind of foreign helper function called by [node], if any. 147 /// Compute the kind of foreign helper function called by [node], if any.
152 ForeignKind getForeignKind(ir.StaticInvocation node); 148 ForeignKind getForeignKind(ir.StaticInvocation node);
153 149
154 /// Returns the [js.Name] for the `JsGetName` [constant] value.
155 js.Name getNameForJsGetName(ConstantValue constant, Namer namer);
156
157 /// Returns the [js.Template] for the `JsBuiltin` [constant] value.
158 js.Template getJsBuiltinTemplate(
159 ConstantValue constant, CodeEmitterTask emitter);
160
161 /// Computes the [InterfaceType] referenced by a call to the 150 /// Computes the [InterfaceType] referenced by a call to the
162 /// [JS_INTERCEPTOR_CONSTANT] function, if any. 151 /// [JS_INTERCEPTOR_CONSTANT] function, if any.
163 InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node); 152 InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node);
164 153
165 /// Computes the [ConstantValue] for the constant [expression]. 154 /// Computes the [ConstantValue] for the constant [expression].
166 ConstantValue getConstantValue(ir.Expression expression, 155 ConstantValue getConstantValue(ir.Expression expression,
167 {bool requireConstant: true, bool implicitNull: false}); 156 {bool requireConstant: true, bool implicitNull: false});
168 157
169 /// Return the [ConstantValue] the initial value of [field] or `null` if 158 /// Return the [ConstantValue] the initial value of [field] or `null` if
170 /// the initializer is not a constant expression. 159 /// the initializer is not a constant expression.
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 // `Object.superNoSuchMethod`. 528 // `Object.superNoSuchMethod`.
540 break; 529 break;
541 } 530 }
542 } 531 }
543 FunctionEntity function = elementEnvironment.lookupClassMember( 532 FunctionEntity function = elementEnvironment.lookupClassMember(
544 commonElements.objectClass, Identifiers.noSuchMethod_); 533 commonElements.objectClass, Identifiers.noSuchMethod_);
545 assert(function != null, 534 assert(function != null,
546 failedAt(cls, "No super noSuchMethod found for class $cls.")); 535 failedAt(cls, "No super noSuchMethod found for class $cls."));
547 return function; 536 return function;
548 } 537 }
549
550 js.Name getNameForJsGetName(ConstantValue constant, Namer namer) {
551 int index = _extractEnumIndexFromConstantValue(
552 constant, commonElements.jsGetNameEnum);
553 if (index == null) return null;
554 return namer.getNameForJsGetName(
555 CURRENT_ELEMENT_SPANNABLE, JsGetName.values[index]);
556 }
557
558 js.Template getJsBuiltinTemplate(
559 ConstantValue constant, CodeEmitterTask emitter) {
560 int index = _extractEnumIndexFromConstantValue(
561 constant, commonElements.jsBuiltinEnum);
562 if (index == null) return null;
563 return emitter.builtinTemplateFor(JsBuiltin.values[index]);
564 }
565
566 int _extractEnumIndexFromConstantValue(
567 ConstantValue constant, ClassEntity classElement) {
568 if (constant is ConstructedConstantValue) {
569 if (constant.type.element == classElement) {
570 assert(constant.fields.length == 1 || constant.fields.length == 2);
571 ConstantValue indexConstant = constant.fields.values.first;
572 if (indexConstant is IntConstantValue) {
573 return indexConstant.primitiveValue;
574 }
575 }
576 }
577 return null;
578 }
579 } 538 }
580 539
581 /// Visitor that converts string literals and concatenations of string literals 540 /// Visitor that converts string literals and concatenations of string literals
582 /// into the string value. 541 /// into the string value.
583 class Stringifier extends ir.ExpressionVisitor<String> { 542 class Stringifier extends ir.ExpressionVisitor<String> {
584 @override 543 @override
585 String visitStringLiteral(ir.StringLiteral node) => node.value; 544 String visitStringLiteral(ir.StringLiteral node) => node.value;
586 545
587 @override 546 @override
588 String visitStringConcatenation(ir.StringConcatenation node) { 547 String visitStringConcatenation(ir.StringConcatenation node) {
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 1037
1079 /// Returns the [JumpTarget] for the branch in [node]. 1038 /// Returns the [JumpTarget] for the branch in [node].
1080 // TODO(johnniwinther): Split this by kind of [node]? 1039 // TODO(johnniwinther): Split this by kind of [node]?
1081 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false}); 1040 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false});
1082 1041
1083 /// Returns the [LoopClosureRepresentationInfo] for the loop [node] in 1042 /// Returns the [LoopClosureRepresentationInfo] for the loop [node] in
1084 /// [closureClassMaps]. 1043 /// [closureClassMaps].
1085 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop( 1044 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop(
1086 ClosureDataLookup closureLookup, ir.TreeNode node); 1045 ClosureDataLookup closureLookup, ir.TreeNode node);
1087 } 1046 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/js_strategy.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