| OLD | NEW |
| 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 // SExpressionUnstringifier implements the inverse operation to | 5 // SExpressionUnstringifier implements the inverse operation to |
| 6 // [SExpressionStringifier]. | 6 // [SExpressionStringifier]. |
| 7 | 7 |
| 8 library sexpr_unstringifier; | 8 library sexpr_unstringifier; |
| 9 | 9 |
| 10 import 'package:compiler/src/constants/expressions.dart'; | 10 import 'package:compiler/src/constants/expressions.dart'; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 static const String DECLARE_FUNCTION = "DeclareFunction"; | 128 static const String DECLARE_FUNCTION = "DeclareFunction"; |
| 129 static const String INVOKE_CONSTRUCTOR = "InvokeConstructor"; | 129 static const String INVOKE_CONSTRUCTOR = "InvokeConstructor"; |
| 130 static const String INVOKE_CONTINUATION = "InvokeContinuation"; | 130 static const String INVOKE_CONTINUATION = "InvokeContinuation"; |
| 131 static const String INVOKE_STATIC = "InvokeStatic"; | 131 static const String INVOKE_STATIC = "InvokeStatic"; |
| 132 static const String INVOKE_METHOD_DIRECTLY = "InvokeMethodDirectly"; | 132 static const String INVOKE_METHOD_DIRECTLY = "InvokeMethodDirectly"; |
| 133 static const String INVOKE_METHOD = "InvokeMethod"; | 133 static const String INVOKE_METHOD = "InvokeMethod"; |
| 134 static const String LET_PRIM = "LetPrim"; | 134 static const String LET_PRIM = "LetPrim"; |
| 135 static const String LET_CONT = "LetCont"; | 135 static const String LET_CONT = "LetCont"; |
| 136 static const String LET_MUTABLE = "LetMutable"; | 136 static const String LET_MUTABLE = "LetMutable"; |
| 137 static const String SET_MUTABLE_VARIABLE = "SetMutableVariable"; | 137 static const String SET_MUTABLE_VARIABLE = "SetMutableVariable"; |
| 138 static const String TYPE_OPERATOR = "TypeOperator"; | 138 static const String TYPE_CAST = "TypeCast"; |
| 139 static const String SET_STATIC = "SetStatic"; | 139 static const String SET_STATIC = "SetStatic"; |
| 140 static const String GET_LAZY_STATIC = "GetLazyStatic"; | 140 static const String GET_LAZY_STATIC = "GetLazyStatic"; |
| 141 static const String UNREACHABLE = "Unreachable"; |
| 141 | 142 |
| 142 // Primitives | 143 // Primitives |
| 143 static const String CONSTANT = "Constant"; | 144 static const String CONSTANT = "Constant"; |
| 144 static const String CREATE_FUNCTION = "CreateFunction"; | 145 static const String CREATE_FUNCTION = "CreateFunction"; |
| 145 static const String GET_MUTABLE_VARIABLE = "GetMutableVariable"; | 146 static const String GET_MUTABLE_VARIABLE = "GetMutableVariable"; |
| 146 static const String LITERAL_LIST = "LiteralList"; | 147 static const String LITERAL_LIST = "LiteralList"; |
| 147 static const String LITERAL_MAP = "LiteralMap"; | 148 static const String LITERAL_MAP = "LiteralMap"; |
| 148 static const String REIFY_TYPE_VAR = "ReifyTypeVar"; | 149 static const String REIFY_TYPE_VAR = "ReifyTypeVar"; |
| 149 static const String GET_STATIC = "GetStatic"; | 150 static const String GET_STATIC = "GetStatic"; |
| 151 static const String TYPE_TEST = "TypeTest"; |
| 150 | 152 |
| 151 // Other | 153 // Other |
| 152 static const String FUNCTION_DEFINITION = "FunctionDefinition"; | 154 static const String FUNCTION_DEFINITION = "FunctionDefinition"; |
| 153 static const String IS_TRUE = "IsTrue"; | 155 static const String IS_TRUE = "IsTrue"; |
| 154 | 156 |
| 155 // Constants | 157 // Constants |
| 156 static const String BOOL = "Bool"; | 158 static const String BOOL = "Bool"; |
| 157 static const String DOUBLE = "Double"; | 159 static const String DOUBLE = "Double"; |
| 158 static const String INT = "Int"; | 160 static const String INT = "Int"; |
| 159 static const String NULL = "Null"; | 161 static const String NULL = "Null"; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 case INVOKE_METHOD_DIRECTLY: | 242 case INVOKE_METHOD_DIRECTLY: |
| 241 return parseInvokeMethodDirectly(); | 243 return parseInvokeMethodDirectly(); |
| 242 case LET_PRIM: | 244 case LET_PRIM: |
| 243 return parseLetPrim(); | 245 return parseLetPrim(); |
| 244 case LET_CONT: | 246 case LET_CONT: |
| 245 return parseLetCont(); | 247 return parseLetCont(); |
| 246 case LET_MUTABLE: | 248 case LET_MUTABLE: |
| 247 return parseLetMutable(); | 249 return parseLetMutable(); |
| 248 case SET_MUTABLE_VARIABLE: | 250 case SET_MUTABLE_VARIABLE: |
| 249 return parseSetMutableVariable(); | 251 return parseSetMutableVariable(); |
| 250 case TYPE_OPERATOR: | 252 case TYPE_CAST: |
| 251 return parseTypeOperator(); | 253 return parseTypeCast(); |
| 252 case SET_STATIC: | 254 case SET_STATIC: |
| 253 return parseSetStatic(); | 255 return parseSetStatic(); |
| 254 case GET_LAZY_STATIC: | 256 case GET_LAZY_STATIC: |
| 255 return parseGetLazyStatic(); | 257 return parseGetLazyStatic(); |
| 258 case UNREACHABLE: |
| 259 return parseUnreachable(); |
| 256 default: | 260 default: |
| 257 assert(false); | 261 assert(false); |
| 258 } | 262 } |
| 259 | 263 |
| 260 return null; | 264 return null; |
| 261 } | 265 } |
| 262 | 266 |
| 263 /// (prim1 prim2 ... primn) | 267 /// (prim1 prim2 ... primn) |
| 264 List<Primitive> parsePrimitiveList() { | 268 List<Primitive> parsePrimitiveList() { |
| 265 tokens.consumeStart(); | 269 tokens.consumeStart(); |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 Primitive value = name2variable[tokens.read()]; | 550 Primitive value = name2variable[tokens.read()]; |
| 547 assert(value != null); | 551 assert(value != null); |
| 548 | 552 |
| 549 Expression body = parseExpression(); | 553 Expression body = parseExpression(); |
| 550 | 554 |
| 551 tokens.consumeEnd(); | 555 tokens.consumeEnd(); |
| 552 return new SetMutableVariable(local, value) | 556 return new SetMutableVariable(local, value) |
| 553 ..plug(body); | 557 ..plug(body); |
| 554 } | 558 } |
| 555 | 559 |
| 556 /// (TypeOperator operator recv type cont) | 560 /// (TypeCast value type args cont) |
| 557 TypeOperator parseTypeOperator() { | 561 TypeCast parseTypeCast() { |
| 558 tokens.consumeStart(TYPE_OPERATOR); | 562 tokens.consumeStart(TYPE_CAST); |
| 559 | 563 |
| 560 String operator = tokens.read(); | 564 Primitive value = name2variable[tokens.read()]; |
| 561 | 565 assert(value != null); |
| 562 Primitive recv = name2variable[tokens.read()]; | |
| 563 assert(recv != null); | |
| 564 | 566 |
| 565 dart_types.DartType type = new DummyNamedType(tokens.read()); | 567 dart_types.DartType type = new DummyNamedType(tokens.read()); |
| 566 | 568 |
| 567 List<ir.Primitive> typeArguments = parsePrimitiveList(); | 569 List<ir.Primitive> typeArguments = parsePrimitiveList(); |
| 568 | 570 |
| 569 Continuation cont = name2variable[tokens.read()]; | 571 Continuation cont = name2variable[tokens.read()]; |
| 570 assert(cont != null); | 572 assert(cont != null); |
| 571 | 573 |
| 572 tokens.consumeEnd(); | 574 tokens.consumeEnd(); |
| 573 return new TypeOperator(recv, type, typeArguments, cont, | 575 return new TypeCast(value, type, typeArguments, cont); |
| 574 isTypeTest: operator == 'is'); | 576 } |
| 577 |
| 578 /// (TypeTest value type args) |
| 579 TypeTest parseTypeTest() { |
| 580 tokens.consumeStart(TYPE_TEST); |
| 581 |
| 582 Primitive value = name2variable[tokens.read()]; |
| 583 assert(value != null); |
| 584 |
| 585 dart_types.DartType type = new DummyNamedType(tokens.read()); |
| 586 |
| 587 List<ir.Primitive> typeArguments = parsePrimitiveList(); |
| 588 |
| 589 tokens.consumeEnd(); |
| 590 return new TypeTest(value, type, typeArguments); |
| 575 } | 591 } |
| 576 | 592 |
| 577 /// (SetStatic field value body) | 593 /// (SetStatic field value body) |
| 578 SetStatic parseSetStatic() { | 594 SetStatic parseSetStatic() { |
| 579 tokens.consumeStart(SET_STATIC); | 595 tokens.consumeStart(SET_STATIC); |
| 580 | 596 |
| 581 Element fieldElement = new DummyElement(tokens.read()); | 597 Element fieldElement = new DummyElement(tokens.read()); |
| 582 Primitive value = name2variable[tokens.read()]; | 598 Primitive value = name2variable[tokens.read()]; |
| 583 assert(value != null); | 599 assert(value != null); |
| 584 Expression body = parseExpression(); | 600 Expression body = parseExpression(); |
| 585 | 601 |
| 586 tokens.consumeEnd(); | 602 tokens.consumeEnd(); |
| 587 return new SetStatic(fieldElement, value, null)..plug(body); | 603 return new SetStatic(fieldElement, value, null)..plug(body); |
| 588 } | 604 } |
| 589 | 605 |
| 590 /// (GetLazyStatic field cont) | 606 /// (GetLazyStatic field cont) |
| 591 GetLazyStatic parseGetLazyStatic() { | 607 GetLazyStatic parseGetLazyStatic() { |
| 592 tokens.consumeStart(GET_LAZY_STATIC); | 608 tokens.consumeStart(GET_LAZY_STATIC); |
| 593 | 609 |
| 594 Element fieldElement = new DummyElement(tokens.read()); | 610 Element fieldElement = new DummyElement(tokens.read()); |
| 595 Continuation cont = name2variable[tokens.read()]; | 611 Continuation cont = name2variable[tokens.read()]; |
| 596 assert(cont != null); | 612 assert(cont != null); |
| 597 | 613 |
| 598 tokens.consumeEnd(); | 614 tokens.consumeEnd(); |
| 599 return new GetLazyStatic(fieldElement, cont, null); | 615 return new GetLazyStatic(fieldElement, cont, null); |
| 600 } | 616 } |
| 601 | 617 |
| 618 /// (Unreachable) |
| 619 Unreachable parseUnreachable() { |
| 620 tokens.consumeStart(UNREACHABLE); |
| 621 tokens.consumeEnd(); |
| 622 return new Unreachable(); |
| 623 } |
| 624 |
| 602 /// (LetPrim (name primitive) body) | 625 /// (LetPrim (name primitive) body) |
| 603 LetPrim parseLetPrim() { | 626 LetPrim parseLetPrim() { |
| 604 tokens.consumeStart(LET_PRIM); | 627 tokens.consumeStart(LET_PRIM); |
| 605 | 628 |
| 606 // (name | 629 // (name |
| 607 tokens.consumeStart(); | 630 tokens.consumeStart(); |
| 608 String name = tokens.read(); | 631 String name = tokens.read(); |
| 609 | 632 |
| 610 // primitive) | 633 // primitive) |
| 611 Primitive primitive = parsePrimitive(); | 634 Primitive primitive = parsePrimitive(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 630 case GET_MUTABLE_VARIABLE: | 653 case GET_MUTABLE_VARIABLE: |
| 631 return parseGetMutableVariable(); | 654 return parseGetMutableVariable(); |
| 632 case LITERAL_LIST: | 655 case LITERAL_LIST: |
| 633 return parseLiteralList(); | 656 return parseLiteralList(); |
| 634 case LITERAL_MAP: | 657 case LITERAL_MAP: |
| 635 return parseLiteralMap(); | 658 return parseLiteralMap(); |
| 636 case REIFY_TYPE_VAR: | 659 case REIFY_TYPE_VAR: |
| 637 return parseReifyTypeVar(); | 660 return parseReifyTypeVar(); |
| 638 case GET_STATIC: | 661 case GET_STATIC: |
| 639 return parseGetStatic(); | 662 return parseGetStatic(); |
| 663 case TYPE_TEST: |
| 664 return parseTypeTest(); |
| 640 default: | 665 default: |
| 641 assert(false); | 666 assert(false); |
| 642 } | 667 } |
| 643 | 668 |
| 644 return null; | 669 return null; |
| 645 } | 670 } |
| 646 | 671 |
| 647 /// (Constant (constant)) | 672 /// (Constant (constant)) |
| 648 Constant parseConstant() { | 673 Constant parseConstant() { |
| 649 tokens.consumeStart(CONSTANT); | 674 tokens.consumeStart(CONSTANT); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 /// (GetStatic field) | 791 /// (GetStatic field) |
| 767 GetStatic parseGetStatic() { | 792 GetStatic parseGetStatic() { |
| 768 tokens.consumeStart(GET_STATIC); | 793 tokens.consumeStart(GET_STATIC); |
| 769 | 794 |
| 770 Element field = new DummyElement(tokens.read()); | 795 Element field = new DummyElement(tokens.read()); |
| 771 | 796 |
| 772 tokens.consumeEnd(); | 797 tokens.consumeEnd(); |
| 773 return new GetStatic(field, null); | 798 return new GetStatic(field, null); |
| 774 } | 799 } |
| 775 } | 800 } |
| OLD | NEW |