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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2529483002: dart2js/kernel: Implement type literal and JS_INTERCEPTOR_CONSTANT (Closed)
Patch Set: remove comment Created 4 years, 1 month 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; 8 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
9 import '../common/names.dart'; 9 import '../common/names.dart';
10 import '../common/tasks.dart' show CompilerTask; 10 import '../common/tasks.dart' show CompilerTask;
11 import '../compiler.dart'; 11 import '../compiler.dart';
12 import '../constants/values.dart' show StringConstantValue; 12 import '../constants/values.dart'
13 show
14 ConstantValue,
15 InterceptorConstantValue,
16 StringConstantValue,
17 TypeConstantValue;
13 import '../dart_types.dart'; 18 import '../dart_types.dart';
14 import '../elements/elements.dart'; 19 import '../elements/elements.dart';
15 import '../io/source_information.dart'; 20 import '../io/source_information.dart';
16 import '../js/js.dart' as js; 21 import '../js/js.dart' as js;
17 import '../js_backend/backend.dart' show JavaScriptBackend; 22 import '../js_backend/backend.dart' show JavaScriptBackend;
18 import '../kernel/kernel.dart'; 23 import '../kernel/kernel.dart';
19 import '../native/native.dart' as native; 24 import '../native/native.dart' as native;
20 import '../resolution/tree_elements.dart'; 25 import '../resolution/tree_elements.dart';
21 import '../tree/dartstring.dart'; 26 import '../tree/dartstring.dart';
22 import '../tree/nodes.dart' show FunctionExpression, Node; 27 import '../tree/nodes.dart' show FunctionExpression, Node;
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 866
862 @override 867 @override
863 void visitMapEntry(ir.MapEntry mapEntry) { 868 void visitMapEntry(ir.MapEntry mapEntry) {
864 // Visit value before the key because each will push an expression to the 869 // Visit value before the key because each will push an expression to the
865 // stack, so when we pop them off, the key is popped first, then the value. 870 // stack, so when we pop them off, the key is popped first, then the value.
866 mapEntry.value.accept(this); 871 mapEntry.value.accept(this);
867 mapEntry.key.accept(this); 872 mapEntry.key.accept(this);
868 } 873 }
869 874
870 @override 875 @override
876 void visitTypeLiteral(ir.TypeLiteral typeLiteral) {
877 ir.DartType type = typeLiteral.type;
878 if (type is ir.InterfaceType) {
879 ConstantValue constant = astAdapter.getConstantForType(type);
880 stack.add(graph.addConstant(constant, compiler));
881 return;
882 }
883 if (type is ir.TypeParameterType) {
884 // TODO(27394): Load type parameter from current 'this' object.
885 defaultExpression(typeLiteral);
886 return;
887 }
888 // TODO(27394): 'dynamic' and function types observed. Where are they from?
889 defaultExpression(typeLiteral);
890 return;
891 }
892
893 @override
871 void visitStaticGet(ir.StaticGet staticGet) { 894 void visitStaticGet(ir.StaticGet staticGet) {
872 ir.Member staticTarget = staticGet.target; 895 ir.Member staticTarget = staticGet.target;
873 if (staticTarget is ir.Procedure && 896 if (staticTarget is ir.Procedure &&
874 staticTarget.kind == ir.ProcedureKind.Getter) { 897 staticTarget.kind == ir.ProcedureKind.Getter) {
875 // Invoke the getter 898 // Invoke the getter
876 _pushStaticInvocation(staticTarget, const <HInstruction>[], 899 _pushStaticInvocation(staticTarget, const <HInstruction>[],
877 astAdapter.returnTypeOf(staticTarget)); 900 astAdapter.returnTypeOf(staticTarget));
878 } else if (staticTarget is ir.Field && staticTarget.isConst) { 901 } else if (staticTarget is ir.Field && staticTarget.isConst) {
879 assert(staticTarget.initializer != null); 902 assert(staticTarget.initializer != null);
880 stack.add(graph.addConstant( 903 stack.add(graph.addConstant(
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 default: 1327 default:
1305 compiler.reporter.reportErrorMessage( 1328 compiler.reporter.reportErrorMessage(
1306 astAdapter.getNode(invocation), 1329 astAdapter.getNode(invocation),
1307 MessageKind.GENERIC, 1330 MessageKind.GENERIC,
1308 {'text': 'Error: Unknown internal flag "$name".'}); 1331 {'text': 'Error: Unknown internal flag "$name".'});
1309 } 1332 }
1310 stack.add(graph.addConstantBool(value, compiler)); 1333 stack.add(graph.addConstantBool(value, compiler));
1311 } 1334 }
1312 1335
1313 void handleJsInterceptorConstant(ir.StaticInvocation invocation) { 1336 void handleJsInterceptorConstant(ir.StaticInvocation invocation) {
1314 unhandledForeign(invocation); 1337 // Single argument must be a TypeConstant which is converted into a
1338 // InterceptorConstant.
1339 if (_unexpectedForeignArguments(invocation, 1, 1)) {
1340 stack.add(graph.addConstantNull(compiler)); // Result expected on stack.
1341 return;
1342 }
1343 ir.Expression argument = invocation.arguments.positional.single;
1344 argument.accept(this);
1345 HInstruction argumentInstruction = pop();
1346 if (argumentInstruction is HConstant) {
1347 ConstantValue argumentConstant = argumentInstruction.constant;
1348 if (argumentConstant is TypeConstantValue) {
1349 // TODO(sra): Check that type is a subclass of [Interceptor].
1350 ConstantValue constant =
1351 new InterceptorConstantValue(argumentConstant.representedType);
1352 HInstruction instruction = graph.addConstant(constant, compiler);
1353 stack.add(instruction);
1354 return;
1355 }
1356 }
1357
1358 compiler.reporter.reportErrorMessage(astAdapter.getNode(invocation),
1359 MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
1360 stack.add(graph.addConstantNull(compiler));
1315 } 1361 }
1316 1362
1317 void handleForeignJs(ir.StaticInvocation invocation) { 1363 void handleForeignJs(ir.StaticInvocation invocation) {
1318 if (_unexpectedForeignArguments(invocation, 2)) { 1364 if (_unexpectedForeignArguments(invocation, 2)) {
1319 stack.add(graph.addConstantNull(compiler)); // Result expected on stack. 1365 stack.add(graph.addConstantNull(compiler)); // Result expected on stack.
1320 return; 1366 return;
1321 } 1367 }
1322 1368
1323 native.NativeBehavior nativeBehavior = 1369 native.NativeBehavior nativeBehavior =
1324 astAdapter.getNativeBehavior(invocation); 1370 astAdapter.getNativeBehavior(invocation);
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 push(new HNot(popBoolified(), backend.boolType)); 1553 push(new HNot(popBoolified(), backend.boolType));
1508 } 1554 }
1509 1555
1510 @override 1556 @override
1511 void visitStringConcatenation(ir.StringConcatenation stringConcat) { 1557 void visitStringConcatenation(ir.StringConcatenation stringConcat) {
1512 KernelStringBuilder stringBuilder = new KernelStringBuilder(this); 1558 KernelStringBuilder stringBuilder = new KernelStringBuilder(this);
1513 stringConcat.accept(stringBuilder); 1559 stringConcat.accept(stringBuilder);
1514 stack.add(stringBuilder.result); 1560 stack.add(stringBuilder.result);
1515 } 1561 }
1516 } 1562 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698