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

Unified Diff: sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart

Issue 231863007: Support local variables in dart2dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Incorporated review comments. Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
index 7b27bcf7a2670d10fa2cef28f3658b95050819fe..3b29e65cd5805142bf6601b405a564cce57b16a2 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
@@ -121,6 +121,7 @@ class Unpickler {
ir.Expression readExpressionNode() {
int tag = readByte();
switch (tag) {
+ // Nontail-position expressions.
case Pickles.NODE_CONSTANT:
ir.Definition constant = readConstant();
unpickled[index++] = constant;
@@ -136,6 +137,8 @@ class Unpickler {
parameters.forEach((p) => unpickled[index++] = p);
addExpression(new ir.LetCont(continuation, body));
break;
+
+ // Tail-position expressions.
case Pickles.NODE_INVOKE_STATIC:
addExpression(readInvokeStatic());
current = null;
@@ -144,6 +147,11 @@ class Unpickler {
addExpression(readInvokeContinuation());
current = null;
break;
+ case Pickles.NODE_BRANCH:
+ addExpression(readBranch());
+ current = null;
+ break;
+
default:
compiler.internalError(NO_LOCATION_SPANNABLE,
"Unexpected expression entry tag: $tag");
@@ -216,8 +224,26 @@ class Unpickler {
ir.InvokeContinuation readInvokeContinuation() {
ir.Continuation continuation = readBackReference();
- ir.Definition argument = readBackReference();
- return new ir.InvokeContinuation(continuation, argument);
+ List<ir.Definition> arguments = readBackReferenceList();
+ return new ir.InvokeContinuation(continuation, arguments);
+ }
+
+ ir.Branch readBranch() {
+ ir.Condition condition = readCondition();
+ ir.Continuation trueContinuation = readBackReference();
+ ir.Continuation falseContinuation = readBackReference();
+ return new ir.Branch(condition, trueContinuation, falseContinuation);
+ }
+
+ ir.Condition readCondition() {
+ int tag = readByte();
+ assert(tag == Pickles.NODE_IS_TRUE);
+ return readIsTrue();
+ }
+
+ ir.IsTrue readIsTrue() {
+ ir.Definition value = readBackReference();
+ return new ir.IsTrue(value);
}
Constant readConstantValue() {
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/ir/ir_tracer.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698