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

Side by Side Diff: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart

Issue 1229673006: Generated source mapping through CPS. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. 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 tree_ir_builder; 5 library tree_ir_builder;
6 6
7 import '../dart2jslib.dart' as dart2js; 7 import '../dart2jslib.dart' as dart2js;
8 import '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir; 9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir;
10 import '../util/util.dart' show CURRENT_ELEMENT_SPANNABLE; 10 import '../util/util.dart' show CURRENT_ELEMENT_SPANNABLE;
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 267 }
268 268
269 Expression visitInterceptor(cps_ir.Interceptor node) { 269 Expression visitInterceptor(cps_ir.Interceptor node) {
270 return new Interceptor(getVariableUse(node.input), node.interceptedClasses); 270 return new Interceptor(getVariableUse(node.input), node.interceptedClasses);
271 } 271 }
272 272
273 Expression visitCreateInstance(cps_ir.CreateInstance node) { 273 Expression visitCreateInstance(cps_ir.CreateInstance node) {
274 return new CreateInstance( 274 return new CreateInstance(
275 node.classElement, 275 node.classElement,
276 translateArguments(node.arguments), 276 translateArguments(node.arguments),
277 translateArguments(node.typeInformation)); 277 translateArguments(node.typeInformation),
278 node.sourceInformation);
278 } 279 }
279 280
280 Expression visitGetField(cps_ir.GetField node) { 281 Expression visitGetField(cps_ir.GetField node) {
281 return new GetField(getVariableUse(node.object), node.field); 282 return new GetField(getVariableUse(node.object), node.field);
282 } 283 }
283 284
284 Expression visitCreateBox(cps_ir.CreateBox node) { 285 Expression visitCreateBox(cps_ir.CreateBox node) {
285 return new CreateBox(); 286 return new CreateBox();
286 } 287 }
287 288
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 349
349 Statement visitInvokeStatic(cps_ir.InvokeStatic node) { 350 Statement visitInvokeStatic(cps_ir.InvokeStatic node) {
350 // Calls are translated to direct style. 351 // Calls are translated to direct style.
351 List<Expression> arguments = translateArguments(node.arguments); 352 List<Expression> arguments = translateArguments(node.arguments);
352 Expression invoke = new InvokeStatic(node.target, node.selector, arguments, 353 Expression invoke = new InvokeStatic(node.target, node.selector, arguments,
353 node.sourceInformation); 354 node.sourceInformation);
354 return continueWithExpression(node.continuation, invoke); 355 return continueWithExpression(node.continuation, invoke);
355 } 356 }
356 357
357 Statement visitInvokeMethod(cps_ir.InvokeMethod node) { 358 Statement visitInvokeMethod(cps_ir.InvokeMethod node) {
358 InvokeMethod invoke = new InvokeMethod(getVariableUse(node.receiver), 359 InvokeMethod invoke = new InvokeMethod(
359 node.selector, 360 getVariableUse(node.receiver),
360 node.mask, 361 node.selector,
361 translateArguments(node.arguments)); 362 node.mask,
363 translateArguments(node.arguments),
364 node.sourceInformation);
362 invoke.receiverIsNotNull = node.receiverIsNotNull; 365 invoke.receiverIsNotNull = node.receiverIsNotNull;
363 return continueWithExpression(node.continuation, invoke); 366 return continueWithExpression(node.continuation, invoke);
364 } 367 }
365 368
366 Statement visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) { 369 Statement visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) {
367 Expression receiver = getVariableUse(node.receiver); 370 Expression receiver = getVariableUse(node.receiver);
368 List<Expression> arguments = translateArguments(node.arguments); 371 List<Expression> arguments = translateArguments(node.arguments);
369 Expression invoke = new InvokeMethodDirectly(receiver, node.target, 372 Expression invoke = new InvokeMethodDirectly(receiver, node.target,
370 node.selector, arguments); 373 node.selector, arguments, node.sourceInformation);
371 return continueWithExpression(node.continuation, invoke); 374 return continueWithExpression(node.continuation, invoke);
372 } 375 }
373 376
374 Statement visitThrow(cps_ir.Throw node) { 377 Statement visitThrow(cps_ir.Throw node) {
375 Expression value = getVariableUse(node.value); 378 Expression value = getVariableUse(node.value);
376 return new Throw(value); 379 return new Throw(value);
377 } 380 }
378 381
379 Statement visitRethrow(cps_ir.Rethrow node) { 382 Statement visitRethrow(cps_ir.Rethrow node) {
380 return new Rethrow(); 383 return new Rethrow();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 List<Expression> typeArgs = translateArguments(node.typeArguments); 435 List<Expression> typeArgs = translateArguments(node.typeArguments);
433 return new TypeOperator(value, node.type, typeArgs, isTypeTest: true); 436 return new TypeOperator(value, node.type, typeArgs, isTypeTest: true);
434 } 437 }
435 438
436 Statement visitInvokeConstructor(cps_ir.InvokeConstructor node) { 439 Statement visitInvokeConstructor(cps_ir.InvokeConstructor node) {
437 List<Expression> arguments = translateArguments(node.arguments); 440 List<Expression> arguments = translateArguments(node.arguments);
438 Expression invoke = new InvokeConstructor( 441 Expression invoke = new InvokeConstructor(
439 node.type, 442 node.type,
440 node.target, 443 node.target,
441 node.selector, 444 node.selector,
442 arguments); 445 arguments,
446 node.sourceInformation);
443 return continueWithExpression(node.continuation, invoke); 447 return continueWithExpression(node.continuation, invoke);
444 } 448 }
445 449
446 Statement visitInvokeContinuation(cps_ir.InvokeContinuation node) { 450 Statement visitInvokeContinuation(cps_ir.InvokeContinuation node) {
447 // Invocations of the return continuation are translated to returns. 451 // Invocations of the return continuation are translated to returns.
448 // Other continuation invocations are replaced with assignments of the 452 // Other continuation invocations are replaced with assignments of the
449 // arguments to formal parameter variables, followed by the body if 453 // arguments to formal parameter variables, followed by the body if
450 // the continuation is singly reference or a break if it is multiply 454 // the continuation is singly reference or a break if it is multiply
451 // referenced. 455 // referenced.
452 cps_ir.Continuation cont = node.continuation.definition; 456 cps_ir.Continuation cont = node.continuation.definition;
453 if (cont == returnContinuation) { 457 if (cont == returnContinuation) {
454 assert(node.arguments.length == 1); 458 assert(node.arguments.length == 1);
455 return new Return(getVariableUse(node.arguments.single)); 459 return new Return(getVariableUse(node.arguments.single),
460 sourceInformation: node.sourceInformation);
456 } else { 461 } else {
457 List<Expression> arguments = translateArguments(node.arguments); 462 List<Expression> arguments = translateArguments(node.arguments);
458 return buildPhiAssignments(cont.parameters, arguments, 463 return buildPhiAssignments(cont.parameters, arguments,
459 () { 464 () {
460 // Translate invocations of recursive and non-recursive 465 // Translate invocations of recursive and non-recursive
461 // continuations differently. 466 // continuations differently.
462 // * Non-recursive continuations 467 // * Non-recursive continuations
463 // - If there is one use, translate the continuation body 468 // - If there is one use, translate the continuation body
464 // inline at the invocation site. 469 // inline at the invocation site.
465 // - If there are multiple uses, translate to Break. 470 // - If there are multiple uses, translate to Break.
(...skipping 27 matching lines...) Expand all
493 thenStatement = 498 thenStatement =
494 cont.hasExactlyOneUse ? visit(cont.body) : new Break(labels[cont]); 499 cont.hasExactlyOneUse ? visit(cont.body) : new Break(labels[cont]);
495 cont = node.falseContinuation.definition; 500 cont = node.falseContinuation.definition;
496 assert(cont.parameters.isEmpty); 501 assert(cont.parameters.isEmpty);
497 elseStatement = 502 elseStatement =
498 cont.hasExactlyOneUse ? visit(cont.body) : new Break(labels[cont]); 503 cont.hasExactlyOneUse ? visit(cont.body) : new Break(labels[cont]);
499 return new If(condition, thenStatement, elseStatement); 504 return new If(condition, thenStatement, elseStatement);
500 } 505 }
501 506
502 Expression visitConstant(cps_ir.Constant node) { 507 Expression visitConstant(cps_ir.Constant node) {
503 return new Constant(node.value); 508 return new Constant(node.value, sourceInformation: node.sourceInformation);
504 } 509 }
505 510
506 Expression visitLiteralList(cps_ir.LiteralList node) { 511 Expression visitLiteralList(cps_ir.LiteralList node) {
507 return new LiteralList( 512 return new LiteralList(
508 node.type, 513 node.type,
509 translateArguments(node.values)); 514 translateArguments(node.values));
510 } 515 }
511 516
512 Expression visitLiteralMap(cps_ir.LiteralMap node) { 517 Expression visitLiteralMap(cps_ir.LiteralMap node) {
513 return new LiteralMap( 518 return new LiteralMap(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 // These occur as parameters or bound by LetMutable. They are not visited 550 // These occur as parameters or bound by LetMutable. They are not visited
546 // directly. 551 // directly.
547 unexpectedNode(node); 552 unexpectedNode(node);
548 } 553 }
549 554
550 Expression visitIsTrue(cps_ir.IsTrue node) { 555 Expression visitIsTrue(cps_ir.IsTrue node) {
551 return getVariableUse(node.value); 556 return getVariableUse(node.value);
552 } 557 }
553 558
554 Expression visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) { 559 Expression visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) {
555 return new ReifyRuntimeType(getVariableUse(node.value)); 560 return new ReifyRuntimeType(
561 getVariableUse(node.value), node.sourceInformation);
556 } 562 }
557 563
558 Expression visitReadTypeVariable(cps_ir.ReadTypeVariable node) { 564 Expression visitReadTypeVariable(cps_ir.ReadTypeVariable node) {
559 return new ReadTypeVariable(node.variable, getVariableUse(node.target)); 565 return new ReadTypeVariable(
566 node.variable,
567 getVariableUse(node.target),
568 node.sourceInformation);
560 } 569 }
561 570
562 @override 571 @override
563 Node visitTypeExpression(cps_ir.TypeExpression node) { 572 Node visitTypeExpression(cps_ir.TypeExpression node) {
564 return new TypeExpression( 573 return new TypeExpression(
565 node.dartType, 574 node.dartType,
566 node.arguments.map(getVariableUse).toList()); 575 node.arguments.map(getVariableUse).toList());
567 } 576 }
568 577
569 Expression visitGetStatic(cps_ir.GetStatic node) { 578 Expression visitGetStatic(cps_ir.GetStatic node) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 getVariableUse(node.index)); 631 getVariableUse(node.index));
623 } 632 }
624 633
625 Expression visitSetIndex(cps_ir.SetIndex node) { 634 Expression visitSetIndex(cps_ir.SetIndex node) {
626 return new SetIndex(getVariableUse(node.object), 635 return new SetIndex(getVariableUse(node.object),
627 getVariableUse(node.index), 636 getVariableUse(node.index),
628 getVariableUse(node.value)); 637 getVariableUse(node.value));
629 } 638 }
630 } 639 }
631 640
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698