| OLD | NEW |
| 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 library kernel.ast_from_binary; | 4 library kernel.ast_from_binary; |
| 5 | 5 |
| 6 import '../ast.dart'; | 6 import '../ast.dart'; |
| 7 import 'tag.dart'; | 7 import 'tag.dart'; |
| 8 import 'loader.dart'; | 8 import 'loader.dart'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'package:kernel/transformations/flags.dart'; | 10 import 'package:kernel/transformations/flags.dart'; |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 Map<String, Source> uriToSource = readUriToSource(); | 180 Map<String, Source> uriToSource = readUriToSource(); |
| 181 importTable.length = readUInt(); | 181 importTable.length = readUInt(); |
| 182 for (int i = 0; i < importTable.length; ++i) { | 182 for (int i = 0; i < importTable.length; ++i) { |
| 183 importTable[i] = new Library(null); | 183 importTable[i] = new Library(null); |
| 184 } | 184 } |
| 185 for (int i = 0; i < importTable.length; ++i) { | 185 for (int i = 0; i < importTable.length; ++i) { |
| 186 _currentLibrary = importTable[i]; | 186 _currentLibrary = importTable[i]; |
| 187 readLibrary(); | 187 readLibrary(); |
| 188 } | 188 } |
| 189 var mainMethod = readMemberReference(allowNull: true); | 189 var mainMethod = readMemberReference(allowNull: true); |
| 190 return new Program(importTable, uriToSource) | 190 return new Program(importTable, uriToSource)..mainMethod = mainMethod; |
| 191 ..mainMethod = mainMethod; | |
| 192 } | 191 } |
| 193 | 192 |
| 194 Map<String, Source> readUriToSource() { | 193 Map<String, Source> readUriToSource() { |
| 195 readSourceUriTable(); | 194 readSourceUriTable(); |
| 196 int length = _sourceUriTable.length; | 195 int length = _sourceUriTable.length; |
| 197 Map<String, Source> uriToLineStarts = <String, Source>{}; | 196 Map<String, Source> uriToLineStarts = <String, Source>{}; |
| 198 for (int i = 0; i < length; ++i) { | 197 for (int i = 0; i < length; ++i) { |
| 199 String uri = _sourceUriTable[i]; | 198 String uri = _sourceUriTable[i]; |
| 200 String sourceCode = readStringEntry(); | 199 String sourceCode = readStringEntry(); |
| 201 int lineCount = readUInt(); | 200 int lineCount = readUInt(); |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 readName(), readExpression(), readMemberReference(allowNull: true)); | 567 readName(), readExpression(), readMemberReference(allowNull: true)); |
| 569 case Tag.DirectPropertyGet: | 568 case Tag.DirectPropertyGet: |
| 570 return new DirectPropertyGet(readExpression(), readMemberReference()); | 569 return new DirectPropertyGet(readExpression(), readMemberReference()); |
| 571 case Tag.DirectPropertySet: | 570 case Tag.DirectPropertySet: |
| 572 return new DirectPropertySet( | 571 return new DirectPropertySet( |
| 573 readExpression(), readMemberReference(), readExpression()); | 572 readExpression(), readMemberReference(), readExpression()); |
| 574 case Tag.StaticGet: | 573 case Tag.StaticGet: |
| 575 int offset = readOffset(); | 574 int offset = readOffset(); |
| 576 return new StaticGet(readMemberReference())..fileOffset = offset; | 575 return new StaticGet(readMemberReference())..fileOffset = offset; |
| 577 case Tag.StaticSet: | 576 case Tag.StaticSet: |
| 578 return new StaticSet(readMemberReference(), readExpression()); | 577 int offset = readOffset(); |
| 578 return new StaticSet(readMemberReference(), readExpression()) |
| 579 ..fileOffset = offset; |
| 579 case Tag.MethodInvocation: | 580 case Tag.MethodInvocation: |
| 580 int offset = readOffset(); | 581 int offset = readOffset(); |
| 581 return new MethodInvocation( | 582 return new MethodInvocation( |
| 582 readExpression(), | 583 readExpression(), |
| 583 readName(), | 584 readName(), |
| 584 readArguments(), | 585 readArguments(), |
| 585 readMemberReference(allowNull: true))..fileOffset = offset; | 586 readMemberReference(allowNull: true))..fileOffset = offset; |
| 586 case Tag.SuperMethodInvocation: | 587 case Tag.SuperMethodInvocation: |
| 587 int offset = readOffset(); | 588 int offset = readOffset(); |
| 588 addTransformerFlag(TransformerFlag.superCalls); | 589 addTransformerFlag(TransformerFlag.superCalls); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 618 readExpression(), readDartTypeOption()); | 619 readExpression(), readDartTypeOption()); |
| 619 case Tag.StringConcatenation: | 620 case Tag.StringConcatenation: |
| 620 int offset = readOffset(); | 621 int offset = readOffset(); |
| 621 return new StringConcatenation(readExpressionList()) | 622 return new StringConcatenation(readExpressionList()) |
| 622 ..fileOffset = offset; | 623 ..fileOffset = offset; |
| 623 case Tag.IsExpression: | 624 case Tag.IsExpression: |
| 624 int offset = readOffset(); | 625 int offset = readOffset(); |
| 625 return new IsExpression(readExpression(), readDartType()) | 626 return new IsExpression(readExpression(), readDartType()) |
| 626 ..fileOffset = offset; | 627 ..fileOffset = offset; |
| 627 case Tag.AsExpression: | 628 case Tag.AsExpression: |
| 628 return new AsExpression(readExpression(), readDartType()); | 629 int offset = readOffset(); |
| 630 return new AsExpression(readExpression(), readDartType()) |
| 631 ..fileOffset = offset; |
| 629 case Tag.StringLiteral: | 632 case Tag.StringLiteral: |
| 630 return new StringLiteral(readStringReference()); | 633 return new StringLiteral(readStringReference()); |
| 631 case Tag.SpecializedIntLiteral: | 634 case Tag.SpecializedIntLiteral: |
| 632 int biasedValue = tagByte & Tag.SpecializedPayloadMask; | 635 int biasedValue = tagByte & Tag.SpecializedPayloadMask; |
| 633 return new IntLiteral(biasedValue - Tag.SpecializedIntLiteralBias); | 636 return new IntLiteral(biasedValue - Tag.SpecializedIntLiteralBias); |
| 634 case Tag.PositiveIntLiteral: | 637 case Tag.PositiveIntLiteral: |
| 635 return new IntLiteral(readUInt()); | 638 return new IntLiteral(readUInt()); |
| 636 case Tag.NegativeIntLiteral: | 639 case Tag.NegativeIntLiteral: |
| 637 return new IntLiteral(-readUInt()); | 640 return new IntLiteral(-readUInt()); |
| 638 case Tag.BigIntLiteral: | 641 case Tag.BigIntLiteral: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 650 case Tag.TypeLiteral: | 653 case Tag.TypeLiteral: |
| 651 return new TypeLiteral(readDartType()); | 654 return new TypeLiteral(readDartType()); |
| 652 case Tag.ThisExpression: | 655 case Tag.ThisExpression: |
| 653 return new ThisExpression(); | 656 return new ThisExpression(); |
| 654 case Tag.Rethrow: | 657 case Tag.Rethrow: |
| 655 return new Rethrow(); | 658 return new Rethrow(); |
| 656 case Tag.Throw: | 659 case Tag.Throw: |
| 657 int offset = readOffset(); | 660 int offset = readOffset(); |
| 658 return new Throw(readExpression())..fileOffset = offset; | 661 return new Throw(readExpression())..fileOffset = offset; |
| 659 case Tag.ListLiteral: | 662 case Tag.ListLiteral: |
| 663 int offset = readOffset(); |
| 660 var typeArgument = readDartType(); | 664 var typeArgument = readDartType(); |
| 661 return new ListLiteral(readExpressionList(), | 665 return new ListLiteral(readExpressionList(), |
| 662 typeArgument: typeArgument, isConst: false); | 666 typeArgument: typeArgument, isConst: false)..fileOffset = offset; |
| 663 case Tag.ConstListLiteral: | 667 case Tag.ConstListLiteral: |
| 668 int offset = readOffset(); |
| 664 var typeArgument = readDartType(); | 669 var typeArgument = readDartType(); |
| 665 return new ListLiteral(readExpressionList(), | 670 return new ListLiteral(readExpressionList(), |
| 666 typeArgument: typeArgument, isConst: true); | 671 typeArgument: typeArgument, isConst: true)..fileOffset = offset; |
| 667 case Tag.MapLiteral: | 672 case Tag.MapLiteral: |
| 668 int offset = readOffset(); | 673 int offset = readOffset(); |
| 669 var keyType = readDartType(); | 674 var keyType = readDartType(); |
| 670 var valueType = readDartType(); | 675 var valueType = readDartType(); |
| 671 return new MapLiteral(readMapEntryList(), | 676 return new MapLiteral(readMapEntryList(), |
| 672 keyType: keyType, | 677 keyType: keyType, |
| 673 valueType: valueType, | 678 valueType: valueType, |
| 674 isConst: false)..fileOffset = offset; | 679 isConst: false)..fileOffset = offset; |
| 675 case Tag.ConstMapLiteral: | 680 case Tag.ConstMapLiteral: |
| 676 int offset = readOffset(); | 681 int offset = readOffset(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 734 return new EmptyStatement(); | 739 return new EmptyStatement(); |
| 735 case Tag.AssertStatement: | 740 case Tag.AssertStatement: |
| 736 return new AssertStatement(readExpression(), readExpressionOption()); | 741 return new AssertStatement(readExpression(), readExpressionOption()); |
| 737 case Tag.LabeledStatement: | 742 case Tag.LabeledStatement: |
| 738 var label = new LabeledStatement(null); | 743 var label = new LabeledStatement(null); |
| 739 labelStack.add(label); | 744 labelStack.add(label); |
| 740 label.body = readStatement()..parent = label; | 745 label.body = readStatement()..parent = label; |
| 741 labelStack.removeLast(); | 746 labelStack.removeLast(); |
| 742 return label; | 747 return label; |
| 743 case Tag.BreakStatement: | 748 case Tag.BreakStatement: |
| 749 int offset = readOffset(); |
| 744 int index = readUInt(); | 750 int index = readUInt(); |
| 745 return new BreakStatement(labelStack[labelStackBase + index]); | 751 return new BreakStatement(labelStack[labelStackBase + index]) |
| 752 ..fileOffset = offset; |
| 746 case Tag.WhileStatement: | 753 case Tag.WhileStatement: |
| 747 return new WhileStatement(readExpression(), readStatement()); | 754 return new WhileStatement(readExpression(), readStatement()); |
| 748 case Tag.DoStatement: | 755 case Tag.DoStatement: |
| 749 return new DoStatement(readStatement(), readExpression()); | 756 return new DoStatement(readStatement(), readExpression()); |
| 750 case Tag.ForStatement: | 757 case Tag.ForStatement: |
| 751 int variableStackHeight = variableStack.length; | 758 int variableStackHeight = variableStack.length; |
| 752 var variables = readAndPushVariableDeclarationList(); | 759 var variables = readAndPushVariableDeclarationList(); |
| 753 var condition = readExpressionOption(); | 760 var condition = readExpressionOption(); |
| 754 var updates = readExpressionList(); | 761 var updates = readExpressionList(); |
| 755 var body = readStatement(); | 762 var body = readStatement(); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 } | 960 } |
| 954 | 961 |
| 955 VariableDeclaration readAndPushVariableDeclaration() { | 962 VariableDeclaration readAndPushVariableDeclaration() { |
| 956 var variable = readVariableDeclaration(); | 963 var variable = readVariableDeclaration(); |
| 957 variableStack.add(variable); | 964 variableStack.add(variable); |
| 958 return variable; | 965 return variable; |
| 959 } | 966 } |
| 960 | 967 |
| 961 VariableDeclaration readVariableDeclaration() { | 968 VariableDeclaration readVariableDeclaration() { |
| 962 int offset = readOffset(); | 969 int offset = readOffset(); |
| 970 int fileEqualsOffset = readOffset(); |
| 963 int flags = readByte(); | 971 int flags = readByte(); |
| 964 return new VariableDeclaration(readStringOrNullIfEmpty(), | 972 return new VariableDeclaration(readStringOrNullIfEmpty(), |
| 965 type: readDartType(), | 973 type: readDartType(), |
| 966 inferredValue: readOptionalInferredValue(), | 974 inferredValue: readOptionalInferredValue(), |
| 967 initializer: readExpressionOption(), | 975 initializer: readExpressionOption(), |
| 968 isFinal: flags & 0x1 != 0, | 976 isFinal: flags & 0x1 != 0, |
| 969 isConst: flags & 0x2 != 0)..fileOffset = offset; | 977 isConst: flags & 0x2 != 0) |
| 978 ..fileOffset = offset |
| 979 ..fileEqualsOffset = fileEqualsOffset; |
| 970 } | 980 } |
| 971 | 981 |
| 972 int readOffset() { | 982 int readOffset() { |
| 973 // Offset is saved as unsigned, | 983 // Offset is saved as unsigned, |
| 974 // but actually ranges from -1 and up (thus the -1) | 984 // but actually ranges from -1 and up (thus the -1) |
| 975 return readUInt() - 1; | 985 return readUInt() - 1; |
| 976 } | 986 } |
| 977 } | 987 } |
| OLD | NEW |