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

Side by Side Diff: pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart

Issue 1424923004: Add StaticUse for more precise registration of statically known element use. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 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
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of js_backend; 5 part of js_backend;
6 6
7 class CheckedModeHelper { 7 class CheckedModeHelper {
8 final String name; 8 final String name;
9 9
10 const CheckedModeHelper(String this.name); 10 const CheckedModeHelper(String this.name);
11 11
12 Element getElement(Compiler compiler) { 12 StaticUse getStaticUse(Compiler compiler) {
13 JavaScriptBackend backend = compiler.backend; 13 JavaScriptBackend backend = compiler.backend;
14 return backend.helpers.findHelper(name); 14 return new StaticUse.staticInvoke(
15 backend.helpers.findHelper(name), callStructure);
15 } 16 }
16 17
18 CallStructure get callStructure => CallStructure.ONE_ARG;
19
17 jsAst.Expression generateCall(SsaCodeGenerator codegen, 20 jsAst.Expression generateCall(SsaCodeGenerator codegen,
18 HTypeConversion node) { 21 HTypeConversion node) {
19 Element helperElement = getElement(codegen.compiler); 22 StaticUse staticUse = getStaticUse(codegen.compiler);
20 codegen.registry.registerStaticUse(helperElement); 23 codegen.registry.registerStaticUse(staticUse);
21 List<jsAst.Expression> arguments = <jsAst.Expression>[]; 24 List<jsAst.Expression> arguments = <jsAst.Expression>[];
22 codegen.use(node.checkedInput); 25 codegen.use(node.checkedInput);
23 arguments.add(codegen.pop()); 26 arguments.add(codegen.pop());
24 generateAdditionalArguments(codegen, node, arguments); 27 generateAdditionalArguments(codegen, node, arguments);
25 jsAst.Expression helper = 28 jsAst.Expression helper =
26 codegen.backend.emitter.staticFunctionAccess(helperElement); 29 codegen.backend.emitter.staticFunctionAccess(staticUse.element);
27 return new jsAst.Call(helper, arguments); 30 return new jsAst.Call(helper, arguments);
28 } 31 }
29 32
30 void generateAdditionalArguments(SsaCodeGenerator codegen, 33 void generateAdditionalArguments(SsaCodeGenerator codegen,
31 HTypeConversion node, 34 HTypeConversion node,
32 List<jsAst.Expression> arguments) { 35 List<jsAst.Expression> arguments) {
33 // No additional arguments needed. 36 // No additional arguments needed.
34 } 37 }
35 38
36 static const List<CheckedModeHelper> helpers = const <CheckedModeHelper> [ 39 static const List<CheckedModeHelper> helpers = const <CheckedModeHelper> [
(...skipping 29 matching lines...) Expand all
66 const SubtypeCheckedModeHelper('assertSubtype'), 69 const SubtypeCheckedModeHelper('assertSubtype'),
67 const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'), 70 const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'),
68 const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'), 71 const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'),
69 const PropertyCheckedModeHelper('propertyTypeCast'), 72 const PropertyCheckedModeHelper('propertyTypeCast'),
70 const PropertyCheckedModeHelper('propertyTypeCheck')]; 73 const PropertyCheckedModeHelper('propertyTypeCheck')];
71 } 74 }
72 75
73 class MalformedCheckedModeHelper extends CheckedModeHelper { 76 class MalformedCheckedModeHelper extends CheckedModeHelper {
74 const MalformedCheckedModeHelper(String name) : super(name); 77 const MalformedCheckedModeHelper(String name) : super(name);
75 78
79 CallStructure get callStructure => CallStructure.TWO_ARGS;
80
76 void generateAdditionalArguments(SsaCodeGenerator codegen, 81 void generateAdditionalArguments(SsaCodeGenerator codegen,
77 HTypeConversion node, 82 HTypeConversion node,
78 List<jsAst.Expression> arguments) { 83 List<jsAst.Expression> arguments) {
79 ErroneousElement element = node.typeExpression.element; 84 ErroneousElement element = node.typeExpression.element;
80 arguments.add(js.escapedString(element.message)); 85 arguments.add(js.escapedString(element.message));
81 } 86 }
82 } 87 }
83 88
84 class PropertyCheckedModeHelper extends CheckedModeHelper { 89 class PropertyCheckedModeHelper extends CheckedModeHelper {
85 const PropertyCheckedModeHelper(String name) : super(name); 90 const PropertyCheckedModeHelper(String name) : super(name);
86 91
92 CallStructure get callStructure => CallStructure.TWO_ARGS;
93
87 void generateAdditionalArguments(SsaCodeGenerator codegen, 94 void generateAdditionalArguments(SsaCodeGenerator codegen,
88 HTypeConversion node, 95 HTypeConversion node,
89 List<jsAst.Expression> arguments) { 96 List<jsAst.Expression> arguments) {
90 DartType type = node.typeExpression; 97 DartType type = node.typeExpression;
91 jsAst.Name additionalArgument = codegen.backend.namer.operatorIsType(type); 98 jsAst.Name additionalArgument = codegen.backend.namer.operatorIsType(type);
92 arguments.add(js.quoteName(additionalArgument)); 99 arguments.add(js.quoteName(additionalArgument));
93 } 100 }
94 } 101 }
95 102
96 class TypeVariableCheckedModeHelper extends CheckedModeHelper { 103 class TypeVariableCheckedModeHelper extends CheckedModeHelper {
97 const TypeVariableCheckedModeHelper(String name) : super(name); 104 const TypeVariableCheckedModeHelper(String name) : super(name);
98 105
106 CallStructure get callStructure => CallStructure.TWO_ARGS;
107
99 void generateAdditionalArguments(SsaCodeGenerator codegen, 108 void generateAdditionalArguments(SsaCodeGenerator codegen,
100 HTypeConversion node, 109 HTypeConversion node,
101 List<jsAst.Expression> arguments) { 110 List<jsAst.Expression> arguments) {
102 assert(node.typeExpression.isTypeVariable); 111 assert(node.typeExpression.isTypeVariable);
103 codegen.use(node.typeRepresentation); 112 codegen.use(node.typeRepresentation);
104 arguments.add(codegen.pop()); 113 arguments.add(codegen.pop());
105 } 114 }
106 } 115 }
107 116
108 class SubtypeCheckedModeHelper extends CheckedModeHelper { 117 class SubtypeCheckedModeHelper extends CheckedModeHelper {
109 const SubtypeCheckedModeHelper(String name) : super(name); 118 const SubtypeCheckedModeHelper(String name) : super(name);
110 119
120 CallStructure get callStructure => const CallStructure.unnamed(4);
121
111 void generateAdditionalArguments(SsaCodeGenerator codegen, 122 void generateAdditionalArguments(SsaCodeGenerator codegen,
112 HTypeConversion node, 123 HTypeConversion node,
113 List<jsAst.Expression> arguments) { 124 List<jsAst.Expression> arguments) {
114 DartType type = node.typeExpression; 125 DartType type = node.typeExpression;
115 Element element = type.element; 126 Element element = type.element;
116 jsAst.Name isField = codegen.backend.namer.operatorIs(element); 127 jsAst.Name isField = codegen.backend.namer.operatorIs(element);
117 arguments.add(js.quoteName(isField)); 128 arguments.add(js.quoteName(isField));
118 codegen.use(node.typeRepresentation); 129 codegen.use(node.typeRepresentation);
119 arguments.add(codegen.pop()); 130 arguments.add(codegen.pop());
120 jsAst.Name asField = codegen.backend.namer.substitutionName(element); 131 jsAst.Name asField = codegen.backend.namer.substitutionName(element);
121 arguments.add(js.quoteName(asField)); 132 arguments.add(js.quoteName(asField));
122 } 133 }
123 } 134 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698