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

Side by Side Diff: lib/kernel_visitor.dart

Issue 2116793002: Work around for private names in mixin applications. (Closed) Base URL: git@github.com:dart-lang/rasta.git@master
Patch Set: Rebased on CL 2201763003. Created 4 years, 4 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) 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 library rasta.kernel_visitor; 5 library rasta.kernel_visitor;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import 'package:kernel/frontend/accessors.dart' show 9 import 'package:kernel/frontend/accessors.dart' show
10 Accessor, 10 Accessor,
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 currentElement.enclosingClass.asInstanceOf(superclass); 300 currentElement.enclosingClass.asInstanceOf(superclass);
301 // Once we have [supertype], we know how to substitute S with T: the type 301 // Once we have [supertype], we know how to substitute S with T: the type
302 // arguments of [supertype] corresponds to T, and the type variables of 302 // arguments of [supertype] corresponds to T, and the type variables of
303 // its element correspond to S. 303 // its element correspond to S.
304 type = type.subst( 304 type = type.subst(
305 supertype.typeArguments, supertype.element.typeVariables); 305 supertype.typeArguments, supertype.element.typeVariables);
306 } 306 }
307 return kernel.typeToIr(type); 307 return kernel.typeToIr(type);
308 } 308 }
309 309
310 // TODO(ahe): Hack. Fix dart2js instead.
311 ir.Name nameToIrName(Name name) {
312 if (name.isPrivate) {
313 assert(
kasperl 2016/08/02 06:17:44 Maybe assert(!name.isPrivate || ...) ?
ahe 2016/08/02 11:09:10 Done.
314 name.library.implementation == currentElement.library.implementation);
315 }
316 return kernel.irName(name.text, currentElement);
317 }
318
310 List<ir.DartType> computeTypesFromTypes(NodeList nodes, {int expected}) { 319 List<ir.DartType> computeTypesFromTypes(NodeList nodes, {int expected}) {
311 if (expected == null) { 320 if (expected == null) {
312 throw "[expected] is null"; 321 throw "[expected] is null";
313 } 322 }
314 List<ir.DartType> types = new List<ir.DartType>(expected); 323 List<ir.DartType> types = new List<ir.DartType>(expected);
315 Iterator<Node> iterator = nodes?.iterator; 324 Iterator<Node> iterator = nodes?.iterator;
316 for (int i = 0; i < expected; i++) { 325 for (int i = 0; i < expected; i++) {
317 TypeAnnotation type = null; 326 TypeAnnotation type = null;
318 if (iterator != null && iterator.moveNext()) { 327 if (iterator != null && iterator.moveNext()) {
319 type = iterator.current; 328 type = iterator.current;
(...skipping 10 matching lines...) Expand all
330 339
331 ir.DartType computeTypeFromTypes(NodeList node) { 340 ir.DartType computeTypeFromTypes(NodeList node) {
332 return computeTypesFromTypes(node, expected: 1).single; 341 return computeTypesFromTypes(node, expected: 1).single;
333 } 342 }
334 343
335 ir.MethodInvocation buildInvokeSelector( 344 ir.MethodInvocation buildInvokeSelector(
336 ir.Expression receiver, 345 ir.Expression receiver,
337 Selector selector, 346 Selector selector,
338 ir.Arguments arguments) { 347 ir.Arguments arguments) {
339 return new ir.MethodInvocation( 348 return new ir.MethodInvocation(
340 receiver, kernel.nameToIrName(selector.memberName), arguments); 349 receiver, nameToIrName(selector.memberName), arguments);
341 } 350 }
342 351
343 ir.MethodInvocation buildCall( 352 ir.MethodInvocation buildCall(
344 ir.Expression receiver, 353 ir.Expression receiver,
345 CallStructure callStructure, 354 CallStructure callStructure,
346 NodeList arguments) { 355 NodeList arguments) {
347 return buildInvokeSelector( 356 return buildInvokeSelector(
348 receiver, callStructure.callSelector, buildArguments(arguments)); 357 receiver, callStructure.callSelector, buildArguments(arguments));
349 } 358 }
350 359
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 return new ir.InvalidExpression(); 1293 return new ir.InvalidExpression();
1285 } 1294 }
1286 1295
1287 @override 1296 @override
1288 ir.PropertyGet visitDynamicPropertyGet( 1297 ir.PropertyGet visitDynamicPropertyGet(
1289 Send node, 1298 Send node,
1290 Node receiver, 1299 Node receiver,
1291 Name name, 1300 Name name,
1292 _) { 1301 _) {
1293 return new ir.PropertyGet( 1302 return new ir.PropertyGet(
1294 visitForValue(receiver), kernel.nameToIrName(name)); 1303 visitForValue(receiver), nameToIrName(name));
1295 } 1304 }
1296 1305
1297 @override 1306 @override
1298 ir.MethodInvocation visitDynamicPropertyInvoke( 1307 ir.MethodInvocation visitDynamicPropertyInvoke(
1299 Send node, 1308 Send node,
1300 Node receiver, 1309 Node receiver,
1301 NodeList arguments, 1310 NodeList arguments,
1302 Selector selector, 1311 Selector selector,
1303 _) { 1312 _) {
1304 return buildInvokeSelector( 1313 return buildInvokeSelector(
1305 visitForValue(receiver), selector, buildArguments(arguments)); 1314 visitForValue(receiver), selector, buildArguments(arguments));
1306 } 1315 }
1307 1316
1308 @override 1317 @override
1309 ir.Expression handleDynamicCompounds( 1318 ir.Expression handleDynamicCompounds(
1310 Send node, 1319 Send node,
1311 Node receiver, 1320 Node receiver,
1312 Name name, 1321 Name name,
1313 CompoundRhs rhs, 1322 CompoundRhs rhs,
1314 _) { 1323 _) {
1315 ir.Expression receiverNode = receiver == null 1324 ir.Expression receiverNode = receiver == null
1316 ? new ir.ThisExpression() : visitForValue(receiver); 1325 ? new ir.ThisExpression() : visitForValue(receiver);
1317 return buildCompound( 1326 return buildCompound(
1318 PropertyAccessor.make(receiverNode, kernel.nameToIrName(name)), rhs); 1327 PropertyAccessor.make(receiverNode, nameToIrName(name)), rhs);
1319 } 1328 }
1320 1329
1321 @override 1330 @override
1322 ir.PropertySet visitDynamicPropertySet( 1331 ir.PropertySet visitDynamicPropertySet(
1323 SendSet node, 1332 SendSet node,
1324 Node receiver, 1333 Node receiver,
1325 Name name, 1334 Name name,
1326 Node rhs, 1335 Node rhs,
1327 _) { 1336 _) {
1328 ir.Expression value = visitForValue(rhs); 1337 ir.Expression value = visitForValue(rhs);
1329 return new ir.PropertySet( 1338 return new ir.PropertySet(
1330 visitForValue(receiver), kernel.nameToIrName(name), value); 1339 visitForValue(receiver), nameToIrName(name), value);
1331 } 1340 }
1332 1341
1333 @override 1342 @override
1334 ir.Expression handleDynamicSetIfNulls( 1343 ir.Expression handleDynamicSetIfNulls(
1335 Send node, 1344 Send node,
1336 Node receiver, 1345 Node receiver,
1337 Name name, 1346 Name name,
1338 Node rhs, 1347 Node rhs,
1339 _) { 1348 _) {
1340 ir.Name irName = kernel.nameToIrName(name); 1349 ir.Name irName = nameToIrName(name);
1341 Accessor accessor = (receiver == null) 1350 Accessor accessor = (receiver == null)
1342 ? new ThisPropertyAccessor(irName) 1351 ? new ThisPropertyAccessor(irName)
1343 : PropertyAccessor.make(visitForValue(receiver), irName); 1352 : PropertyAccessor.make(visitForValue(receiver), irName);
1344 return accessor.buildNullAwareAssignment( 1353 return accessor.buildNullAwareAssignment(
1345 visitForValue(rhs), voidContext: isVoidContext); 1354 visitForValue(rhs), voidContext: isVoidContext);
1346 } 1355 }
1347 1356
1348 @override 1357 @override
1349 ir.TypeLiteral visitDynamicTypeLiteralGet( 1358 ir.TypeLiteral visitDynamicTypeLiteralGet(
1350 Send node, 1359 Send node,
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 ConstructorElement constructor, 1579 ConstructorElement constructor,
1571 InterfaceType type, 1580 InterfaceType type,
1572 NodeList arguments, 1581 NodeList arguments,
1573 CallStructure callStructure, 1582 CallStructure callStructure,
1574 _) { 1583 _) {
1575 return buildConstructorInvoke(node, isConst: false); 1584 return buildConstructorInvoke(node, isConst: false);
1576 } 1585 }
1577 1586
1578 Accessor buildNullAwarePropertyAccessor(Node receiver, Name name) { 1587 Accessor buildNullAwarePropertyAccessor(Node receiver, Name name) {
1579 return new NullAwarePropertyAccessor( 1588 return new NullAwarePropertyAccessor(
1580 visitForValue(receiver), kernel.nameToIrName(name)); 1589 visitForValue(receiver), nameToIrName(name));
1581 } 1590 }
1582 1591
1583 @override 1592 @override
1584 ir.Expression visitIfNotNullDynamicPropertyGet( 1593 ir.Expression visitIfNotNullDynamicPropertyGet(
1585 Send node, 1594 Send node,
1586 Node receiver, 1595 Node receiver,
1587 Name name, 1596 Name name,
1588 _) { 1597 _) {
1589 return buildNullAwarePropertyAccessor(receiver, name).buildSimpleRead(); 1598 return buildNullAwarePropertyAccessor(receiver, name).buildSimpleRead();
1590 } 1599 }
(...skipping 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2717 @override 2726 @override
2718 ir.MethodInvocation visitThisInvoke( 2727 ir.MethodInvocation visitThisInvoke(
2719 Send node, 2728 Send node,
2720 NodeList arguments, 2729 NodeList arguments,
2721 CallStructure callStructure, 2730 CallStructure callStructure,
2722 _) { 2731 _) {
2723 return buildCall(new ir.ThisExpression(), callStructure, arguments); 2732 return buildCall(new ir.ThisExpression(), callStructure, arguments);
2724 } 2733 }
2725 2734
2726 Accessor buildThisPropertyAccessor(Name name) { 2735 Accessor buildThisPropertyAccessor(Name name) {
2727 return new ThisPropertyAccessor(kernel.nameToIrName(name)); 2736 return new ThisPropertyAccessor(nameToIrName(name));
2728 } 2737 }
2729 2738
2730 @override 2739 @override
2731 ir.Expression visitThisPropertyGet(Send node, Name name, _) { 2740 ir.Expression visitThisPropertyGet(Send node, Name name, _) {
2732 return buildThisPropertyAccessor(name).buildSimpleRead(); 2741 return buildThisPropertyAccessor(name).buildSimpleRead();
2733 } 2742 }
2734 2743
2735 @override 2744 @override
2736 ir.MethodInvocation visitThisPropertyInvoke( 2745 ir.MethodInvocation visitThisPropertyInvoke(
2737 Send node, 2746 Send node,
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
3030 : this(null, true, node, initializers); 3039 : this(null, true, node, initializers);
3031 3040
3032 accept(ir.Visitor v) => throw "unsupported"; 3041 accept(ir.Visitor v) => throw "unsupported";
3033 3042
3034 visitChildren(ir.Visitor v) => throw "unsupported"; 3043 visitChildren(ir.Visitor v) => throw "unsupported";
3035 3044
3036 String toString() { 3045 String toString() {
3037 return "IrFunction($kind, $isConstructor, $node, $initializers)"; 3046 return "IrFunction($kind, $isConstructor, $node, $initializers)";
3038 } 3047 }
3039 } 3048 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698