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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart

Issue 1213033002: Fix runtimeType.toString for tear-offs. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library dart2js.new_js_emitter.emitter; 5 library dart2js.new_js_emitter.emitter;
6 6
7 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show 7 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
8 JsBuiltin, 8 JsBuiltin,
9 METADATA, 9 METADATA,
10 TYPES; 10 TYPES;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 126
127 @override 127 @override
128 js.Expression typeAccess(Element element) { 128 js.Expression typeAccess(Element element) {
129 // TODO(floitsch): minify 'ensureResolved'. 129 // TODO(floitsch): minify 'ensureResolved'.
130 // TODO(floitsch): don't emit `ensureResolved` for eager classes. 130 // TODO(floitsch): don't emit `ensureResolved` for eager classes.
131 return js.js('#.ensureResolved()', _globalPropertyAccess(element)); 131 return js.js('#.ensureResolved()', _globalPropertyAccess(element));
132 } 132 }
133 133
134 @override 134 @override
135 js.Template templateForBuiltin(JsBuiltin builtin) { 135 js.Template templateForBuiltin(JsBuiltin builtin) {
136 String typeNameProperty = ModelEmitter.typeNameProperty;
137
138 switch (builtin) { 136 switch (builtin) {
139 case JsBuiltin.dartObjectConstructor: 137 case JsBuiltin.dartObjectConstructor:
140 return js.js.expressionTemplateYielding( 138 return js.js.expressionTemplateYielding(
141 typeAccess(_compiler.objectClass)); 139 typeAccess(_compiler.objectClass));
142 140
143 case JsBuiltin.isCheckPropertyToJsConstructorName: 141 case JsBuiltin.isCheckPropertyToJsConstructorName:
144 int isPrefixLength = namer.operatorIsPrefix.length; 142 int isPrefixLength = namer.operatorIsPrefix.length;
145 return js.js.expressionTemplateFor('#.substring($isPrefixLength)'); 143 return js.js.expressionTemplateFor('#.substring($isPrefixLength)');
146 144
147 case JsBuiltin.isFunctionType: 145 case JsBuiltin.isFunctionType:
148 return _backend.rti.representationGenerator.templateForIsFunctionType; 146 return _backend.rti.representationGenerator.templateForIsFunctionType;
149 147
150 case JsBuiltin.rawRtiToJsConstructorName: 148 case JsBuiltin.rawRtiToJsConstructorName:
151 return js.js.expressionTemplateFor("#.$typeNameProperty"); 149 return js.js.expressionTemplateFor("#.name");
152 150
153 case JsBuiltin.rawRuntimeType: 151 case JsBuiltin.rawRuntimeType:
154 return js.js.expressionTemplateFor("#.constructor"); 152 return js.js.expressionTemplateFor("#.constructor");
155 153
156 case JsBuiltin.createFunctionTypeRti: 154 case JsBuiltin.createFunctionTypeRti:
157 return _backend.rti.representationGenerator 155 return _backend.rti.representationGenerator
158 .templateForCreateFunctionType; 156 .templateForCreateFunctionType;
159 157
160 case JsBuiltin.isSubtype: 158 case JsBuiltin.isSubtype:
161 // TODO(floitsch): move this closer to where is-check properties are 159 // TODO(floitsch): move this closer to where is-check properties are
162 // built. 160 // built.
163 String isPrefix = namer.operatorIsPrefix; 161 String isPrefix = namer.operatorIsPrefix;
164 return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype"); 162 return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype");
165 163
166 case JsBuiltin.isFunctionTypeRti: 164 case JsBuiltin.isFunctionTypeRti:
167 String functionClassName = 165 String functionClassName =
168 _backend.namer.runtimeTypeName(_compiler.functionClass); 166 _backend.namer.runtimeTypeName(_compiler.functionClass);
169 return js.js.expressionTemplateFor( 167 return js.js.expressionTemplateFor(
170 '#.$typeNameProperty === "$functionClassName"'); 168 '#.name === "$functionClassName"');
171 169
172 case JsBuiltin.isNullTypeRti: 170 case JsBuiltin.isNullTypeRti:
173 String nullClassName = 171 String nullClassName =
174 _backend.namer.runtimeTypeName(_compiler.nullClass); 172 _backend.namer.runtimeTypeName(_compiler.nullClass);
175 return js.js.expressionTemplateFor( 173 return js.js.expressionTemplateFor(
176 '#.$typeNameProperty === "$nullClassName"'); 174 '#.name === "$nullClassName"');
177 175
178 case JsBuiltin.isDartObjectTypeRti: 176 case JsBuiltin.isDartObjectTypeRti:
179 String dartObjectClassName = 177 String dartObjectClassName =
180 _backend.namer.runtimeTypeName(_compiler.objectClass); 178 _backend.namer.runtimeTypeName(_compiler.objectClass);
181 return js.js.expressionTemplateFor( 179 return js.js.expressionTemplateFor(
182 '#.$typeNameProperty === "$dartObjectClassName"'); 180 '#.name === "$dartObjectClassName"');
183 181
184 case JsBuiltin.getMetadata: 182 case JsBuiltin.getMetadata:
185 return _emitter.templateForReadMetadata; 183 return _emitter.templateForReadMetadata;
186 184
187 case JsBuiltin.getType: 185 case JsBuiltin.getType:
188 return _emitter.templateForReadType; 186 return _emitter.templateForReadType;
189 187
190 default: 188 default:
191 _compiler.internalError(NO_LOCATION_SPANNABLE, 189 _compiler.internalError(NO_LOCATION_SPANNABLE,
192 "Unhandled Builtin: $builtin"); 190 "Unhandled Builtin: $builtin");
193 return null; 191 return null;
194 } 192 }
195 } 193 }
196 194
197 @override 195 @override
198 void invalidateCaches() { 196 void invalidateCaches() {
199 } 197 }
200 } 198 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698