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

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

Issue 2411793007: Revert "Build CFG for various JS() foreign methods" (Closed)
Patch Set: Redo "Build CFG for various JS() foreign methods" Created 4 years, 2 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
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | no next file » | 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:js_runtime/shared/embedded_names.dart';
5 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
6 7
7 import '../common.dart'; 8 import '../common.dart';
8 import '../common/names.dart'; 9 import '../common/names.dart';
9 import '../compiler.dart'; 10 import '../compiler.dart';
10 import '../constants/values.dart'; 11 import '../constants/values.dart';
11 import '../dart_types.dart'; 12 import '../dart_types.dart';
12 import '../elements/elements.dart'; 13 import '../elements/elements.dart';
14 import '../js/js.dart' as js;
13 import '../js_backend/js_backend.dart'; 15 import '../js_backend/js_backend.dart';
14 import '../kernel/kernel.dart'; 16 import '../kernel/kernel.dart';
17 import '../native/native.dart' as native;
15 import '../resolution/tree_elements.dart'; 18 import '../resolution/tree_elements.dart';
16 import '../tree/tree.dart' as ast; 19 import '../tree/tree.dart' as ast;
17 import '../types/masks.dart'; 20 import '../types/masks.dart';
18 import '../types/types.dart'; 21 import '../types/types.dart';
19 import '../universe/call_structure.dart'; 22 import '../universe/call_structure.dart';
20 import '../universe/selector.dart'; 23 import '../universe/selector.dart';
21 import '../universe/side_effects.dart'; 24 import '../universe/side_effects.dart';
22 import '../world.dart'; 25 import '../world.dart';
23 import 'locals_handler.dart'; 26 import 'locals_handler.dart';
24 import 'types.dart'; 27 import 'types.dart';
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 } 216 }
214 217
215 TypeMask inferredTypeOf(ir.Member node) { 218 TypeMask inferredTypeOf(ir.Member node) {
216 return TypeMaskFactory.inferredTypeForElement(getElement(node), _compiler); 219 return TypeMaskFactory.inferredTypeForElement(getElement(node), _compiler);
217 } 220 }
218 221
219 TypeMask selectorTypeOf(Selector selector, TypeMask mask) { 222 TypeMask selectorTypeOf(Selector selector, TypeMask mask) {
220 return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler); 223 return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler);
221 } 224 }
222 225
226 TypeMask typeFromNativeBehavior(native.NativeBehavior nativeBehavior) {
227 return TypeMaskFactory.fromNativeBehavior(nativeBehavior, _compiler);
228 }
229
223 ConstantValue getConstantFor(ir.Node node) { 230 ConstantValue getConstantFor(ir.Node node) {
224 ConstantValue constantValue = 231 ConstantValue constantValue =
225 _backend.constants.getConstantValueForNode(getNode(node), elements); 232 _backend.constants.getConstantValueForNode(getNode(node), elements);
226 assert(invariant(getNode(node), constantValue != null, 233 assert(invariant(getNode(node), constantValue != null,
227 message: 'No constant computed for $node')); 234 message: 'No constant computed for $node'));
228 return constantValue; 235 return constantValue;
229 } 236 }
230 237
231 bool isIntercepted(ir.Node node) { 238 bool isIntercepted(ir.Node node) {
232 Selector selector = getSelector(node); 239 Selector selector = getSelector(node);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 272
266 TypeMask get assertTestReturnType => TypeMaskFactory 273 TypeMask get assertTestReturnType => TypeMaskFactory
267 .inferredReturnTypeForElement(_backend.helpers.assertTest, _compiler); 274 .inferredReturnTypeForElement(_backend.helpers.assertTest, _compiler);
268 275
269 ir.Procedure get assertThrow => 276 ir.Procedure get assertThrow =>
270 kernel.functions[_backend.helpers.assertThrow]; 277 kernel.functions[_backend.helpers.assertThrow];
271 278
272 TypeMask get assertThrowReturnType => TypeMaskFactory 279 TypeMask get assertThrowReturnType => TypeMaskFactory
273 .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler); 280 .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler);
274 281
282 ir.Procedure get currentIsolate =>
283 kernel.functions[_backend.helpers.currentIsolate];
284
285 bool isInForeignLibrary(ir.Member member) =>
286 _backend.isForeign(getElement(member));
287
288 native.NativeBehavior getNativeBehavior(ir.Node node) {
289 return elements.getNativeData(getNode(node));
290 }
291
292 js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) {
293 int index = _extractEnumIndexFromConstantValue(
294 constant, _backend.helpers.jsGetNameEnum);
295 if (index == null) return null;
296 return _backend.namer
297 .getNameForJsGetName(getNode(argument), JsGetName.values[index]);
298 }
299
300 js.Template getJsBuiltinTemplate(ConstantValue constant) {
301 int index = _extractEnumIndexFromConstantValue(
302 constant, _backend.helpers.jsBuiltinEnum);
303 if (index == null) return null;
304 return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]);
305 }
306
307 int _extractEnumIndexFromConstantValue(
308 ConstantValue constant, Element classElement) {
309 if (constant is ConstructedConstantValue) {
310 if (constant.type.element == classElement) {
311 assert(constant.fields.length == 1);
312 ConstantValue indexConstant = constant.fields.values.single;
313 if (indexConstant is IntConstantValue) {
314 return indexConstant.primitiveValue;
315 }
316 }
317 }
318 return null;
319 }
320
275 DartType getDartType(ir.DartType type) { 321 DartType getDartType(ir.DartType type) {
276 return type.accept(_typeConverter); 322 return type.accept(_typeConverter);
277 } 323 }
278 324
279 List<DartType> getDartTypes(List<ir.DartType> types) { 325 List<DartType> getDartTypes(List<ir.DartType> types) {
280 return types.map(getDartType).toList(); 326 return types.map(getDartType).toList();
281 } 327 }
282 } 328 }
283 329
284 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { 330 class DartTypeConverter extends ir.DartTypeVisitor<DartType> {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 @override 372 @override
327 DartType visitDynamicType(ir.DynamicType node) { 373 DartType visitDynamicType(ir.DynamicType node) {
328 return const DynamicType(); 374 return const DynamicType();
329 } 375 }
330 376
331 @override 377 @override
332 DartType visitInvalidType(ir.InvalidType node) { 378 DartType visitInvalidType(ir.InvalidType node) {
333 throw new UnimplementedError("Invalid types not currently supported"); 379 throw new UnimplementedError("Invalid types not currently supported");
334 } 380 }
335 } 381 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698