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

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

Issue 2467493003: Compute NativeBehavior for native methods and fields. (Closed)
Patch Set: Updated cf. comments 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE.md file.
4
5 import 'package:kernel/ast.dart' as ir;
6
7 import '../constants/expressions.dart';
8 import 'kernel.dart';
9
10 /// Visitor that converts a [ConstantExpression] into a kernel constant
11 /// expression.
12 class ConstantVisitor extends ConstantExpressionVisitor<ir.Node, Kernel> {
13 const ConstantVisitor();
14
15 @override
16 ir.Node visitNamed(NamedArgumentReference exp, Kernel kernel) {
17 throw new UnsupportedError(
18 '${exp.toStructuredText()} is not a valid constant.');
19 }
20
21 @override
22 ir.Node visitPositional(PositionalArgumentReference exp, Kernel kernel) {
23 throw new UnsupportedError(
24 '${exp.toStructuredText()} is not a valid constant.');
25 }
26
27 @override
28 ir.Node visitDeferred(DeferredConstantExpression exp, Kernel kernel) {
29 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
30 }
31
32 @override
33 ir.Node visitStringFromEnvironment(
34 StringFromEnvironmentConstantExpression exp, Kernel kernel) {
35 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
36 }
37
38 @override
39 ir.Node visitIntFromEnvironment(
40 IntFromEnvironmentConstantExpression exp, Kernel kernel) {
41 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
42 }
43
44 @override
45 ir.Node visitBoolFromEnvironment(
46 BoolFromEnvironmentConstantExpression exp, Kernel kernel) {
47 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
48 }
49
50 @override
51 ir.Node visitConditional(ConditionalConstantExpression exp, Kernel kernel) {
52 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
53 }
54
55 @override
56 ir.Node visitStringLength(StringLengthConstantExpression exp, Kernel kernel) {
57 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
58 }
59
60 @override
61 ir.Node visitUnary(UnaryConstantExpression exp, Kernel kernel) {
62 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
63 }
64
65 @override
66 ir.Node visitIdentical(IdenticalConstantExpression exp, Kernel kernel) {
67 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
68 }
69
70 @override
71 ir.Node visitBinary(BinaryConstantExpression exp, Kernel kernel) {
72 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
73 }
74
75 @override
76 ir.Node visitFunction(FunctionConstantExpression exp, Kernel kernel) {
77 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
78 }
79
80 @override
81 ir.Node visitVariable(VariableConstantExpression exp, Kernel kernel) {
82 return new ir.StaticGet(kernel.fieldToIr(exp.element));
83 }
84
85 @override
86 ir.Node visitType(TypeConstantExpression exp, Kernel kernel) {
87 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
88 }
89
90 @override
91 ir.Node visitSymbol(SymbolConstantExpression exp, Kernel kernel) {
92 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
93 }
94
95 @override
96 ir.Node visitConcatenate(ConcatenateConstantExpression exp, Kernel kernel) {
97 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
98 }
99
100 @override
101 ir.Node visitConstructed(ConstructedConstantExpression exp, Kernel kernel) {
102 List<ir.Expression> positional = <ir.Expression>[];
103 List<ir.NamedExpression> named = <ir.NamedExpression>[];
104 int positionalCount = exp.callStructure.positionalArgumentCount;
105 for (int index = 0; index < positionalCount; index++) {
106 ir.Expression argument = visit(exp.arguments[index], kernel);
107 if (index < exp.callStructure.positionalArgumentCount) {
108 positional.add(argument);
109 } else {
110 named.add(new ir.NamedExpression(
111 exp.callStructure.namedArguments[index - positionalCount],
112 argument));
113 }
114 }
115 ir.Arguments arguments = new ir.Arguments(positional, named: named);
116 return new ir.ConstructorInvocation(
117 kernel.functionToIr(exp.target), arguments,
118 isConst: true);
119 }
120
121 @override
122 ir.Node visitMap(MapConstantExpression exp, Kernel kernel) {
123 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
124 }
125
126 @override
127 ir.Node visitList(ListConstantExpression exp, Kernel kernel) {
128 throw new UnimplementedError('${exp.toStructuredText()} is not supported.');
129 }
130
131 @override
132 ir.Node visitNull(NullConstantExpression exp, Kernel kernel) {
133 return new ir.NullLiteral();
134 }
135
136 @override
137 ir.Node visitString(StringConstantExpression exp, Kernel kernel) {
138 return new ir.StringLiteral(exp.primitiveValue);
139 }
140
141 @override
142 ir.Node visitDouble(DoubleConstantExpression exp, Kernel kernel) {
143 return new ir.DoubleLiteral(exp.primitiveValue);
144 }
145
146 @override
147 ir.Node visitInt(IntConstantExpression exp, Kernel kernel) {
148 return new ir.IntLiteral(exp.primitiveValue);
149 }
150
151 @override
152 ir.Node visitBool(BoolConstantExpression exp, Kernel kernel) {
153 return new ir.BoolLiteral(exp.primitiveValue);
154 }
155 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart ('k') | pkg/compiler/lib/src/kernel/kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698