| 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 #if !defined(DART_PRECOMPILED_RUNTIME) | 4 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 5 | 5 |
| 6 #include "vm/kernel_binary.h" | 6 #include "vm/kernel_binary.h" |
| 7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
| 8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
| 9 #include "vm/growable_array.h" | 9 #include "vm/growable_array.h" |
| 10 #include "vm/kernel.h" | 10 #include "vm/kernel.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 | 89 |
| 90 // Read all [TypeParameter]s and their bounds. | 90 // Read all [TypeParameter]s and their bounds. |
| 91 for (intptr_t i = 0; i < length; i++) { | 91 for (intptr_t i = 0; i < length; i++) { |
| 92 (*this)[i]->ReadFrom(reader); | 92 (*this)[i]->ReadFrom(reader); |
| 93 } | 93 } |
| 94 } | 94 } |
| 95 | 95 |
| 96 | 96 |
| 97 NamedParameter* NamedParameter::ReadFrom(Reader* reader) { | 97 NamedParameter* NamedParameter::ReadFrom(Reader* reader) { |
| 98 TRACE_READ_OFFSET(); | 98 TRACE_READ_OFFSET(); |
| 99 intptr_t name_index = reader->ReadUInt(); | 99 StringIndex name_index(reader->ReadUInt()); |
| 100 DartType* type = DartType::ReadFrom(reader); | 100 DartType* type = DartType::ReadFrom(reader); |
| 101 return new NamedParameter(name_index, type); | 101 return new NamedParameter(name_index, type); |
| 102 } | 102 } |
| 103 | 103 |
| 104 | 104 |
| 105 template <typename B, typename S> | 105 template <typename B, typename S> |
| 106 class DowncastReader { | 106 class DowncastReader { |
| 107 public: | 107 public: |
| 108 static S* ReadFrom(Reader* reader) { | 108 static S* ReadFrom(Reader* reader) { |
| 109 TRACE_READ_OFFSET(); | 109 TRACE_READ_OFFSET(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 | 169 |
| 170 | 170 |
| 171 Library* Library::ReadFrom(Reader* reader) { | 171 Library* Library::ReadFrom(Reader* reader) { |
| 172 TRACE_READ_OFFSET(); | 172 TRACE_READ_OFFSET(); |
| 173 int flags = reader->ReadFlags(); | 173 int flags = reader->ReadFlags(); |
| 174 ASSERT(flags == 0); // external libraries not supported | 174 ASSERT(flags == 0); // external libraries not supported |
| 175 kernel_data_ = reader->buffer(); | 175 kernel_data_ = reader->buffer(); |
| 176 kernel_data_size_ = reader->size(); | 176 kernel_data_size_ = reader->size(); |
| 177 | 177 |
| 178 canonical_name_ = reader->ReadCanonicalNameReference(); | 178 canonical_name_ = reader->ReadCanonicalNameReference(); |
| 179 name_index_ = reader->ReadUInt(); | 179 name_index_ = StringIndex(reader->ReadUInt()); |
| 180 import_uri_index_ = reader->CanonicalNameString(canonical_name_); | 180 import_uri_index_ = reader->CanonicalNameString(canonical_name_); |
| 181 source_uri_index_ = reader->ReadUInt(); | 181 source_uri_index_ = reader->ReadUInt(); |
| 182 reader->set_current_script_id(source_uri_index_); | 182 reader->set_current_script_id(source_uri_index_); |
| 183 | 183 |
| 184 int num_imports = reader->ReadUInt(); | 184 int num_imports = reader->ReadUInt(); |
| 185 if (num_imports != 0) { | 185 if (num_imports != 0) { |
| 186 FATAL("Deferred imports not implemented in VM"); | 186 FATAL("Deferred imports not implemented in VM"); |
| 187 } | 187 } |
| 188 int num_typedefs = reader->ReadUInt(); | 188 int num_typedefs = reader->ReadUInt(); |
| 189 typedefs().EnsureInitialized(num_typedefs); | 189 typedefs().EnsureInitialized(num_typedefs); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 203 procedures().ReadFrom<Procedure>(reader, this); | 203 procedures().ReadFrom<Procedure>(reader, this); |
| 204 return this; | 204 return this; |
| 205 } | 205 } |
| 206 | 206 |
| 207 | 207 |
| 208 Typedef* Typedef::ReadFrom(Reader* reader) { | 208 Typedef* Typedef::ReadFrom(Reader* reader) { |
| 209 TRACE_READ_OFFSET(); | 209 TRACE_READ_OFFSET(); |
| 210 | 210 |
| 211 canonical_name_ = reader->ReadCanonicalNameReference(); | 211 canonical_name_ = reader->ReadCanonicalNameReference(); |
| 212 position_ = reader->ReadPosition(false); | 212 position_ = reader->ReadPosition(false); |
| 213 name_index_ = reader->ReadUInt(); | 213 name_index_ = StringIndex(reader->ReadUInt()); |
| 214 source_uri_index_ = reader->ReadUInt(); | 214 source_uri_index_ = reader->ReadUInt(); |
| 215 type_parameters_.ReadFrom(reader); | 215 type_parameters_.ReadFrom(reader); |
| 216 type_ = DartType::ReadFrom(reader); | 216 type_ = DartType::ReadFrom(reader); |
| 217 | 217 |
| 218 return this; | 218 return this; |
| 219 } | 219 } |
| 220 | 220 |
| 221 | 221 |
| 222 Class* Class::ReadFrom(Reader* reader) { | 222 Class* Class::ReadFrom(Reader* reader) { |
| 223 TRACE_READ_OFFSET(); | 223 TRACE_READ_OFFSET(); |
| 224 | 224 |
| 225 canonical_name_ = reader->ReadCanonicalNameReference(); | 225 canonical_name_ = reader->ReadCanonicalNameReference(); |
| 226 position_ = reader->ReadPosition(false); | 226 position_ = reader->ReadPosition(false); |
| 227 is_abstract_ = reader->ReadBool(); | 227 is_abstract_ = reader->ReadBool(); |
| 228 name_index_ = reader->ReadUInt(); | 228 name_index_ = StringIndex(reader->ReadUInt()); |
| 229 source_uri_index_ = reader->ReadUInt(); | 229 source_uri_index_ = reader->ReadUInt(); |
| 230 reader->set_current_script_id(source_uri_index_); | 230 reader->set_current_script_id(source_uri_index_); |
| 231 reader->record_token_position(position_); | 231 reader->record_token_position(position_); |
| 232 annotations_.ReadFromStatic<Expression>(reader); | 232 annotations_.ReadFromStatic<Expression>(reader); |
| 233 | 233 |
| 234 return this; | 234 return this; |
| 235 } | 235 } |
| 236 | 236 |
| 237 | 237 |
| 238 NormalClass* NormalClass::ReadFrom(Reader* reader) { | 238 NormalClass* NormalClass::ReadFrom(Reader* reader) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 263 type_parameters_.ReadFrom(reader); | 263 type_parameters_.ReadFrom(reader); |
| 264 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 264 first_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
| 265 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); | 265 second_ = InterfaceType::Cast(DartType::ReadFrom(reader)); |
| 266 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( | 266 implemented_classes_.ReadFromStatic<DowncastReader<DartType, InterfaceType> >( |
| 267 reader); | 267 reader); |
| 268 constructors_.ReadFrom<Constructor>(reader, this); | 268 constructors_.ReadFrom<Constructor>(reader, this); |
| 269 return this; | 269 return this; |
| 270 } | 270 } |
| 271 | 271 |
| 272 | 272 |
| 273 intptr_t Reference::ReadMemberFrom(Reader* reader, bool allow_null) { | 273 NameIndex Reference::ReadMemberFrom(Reader* reader, bool allow_null) { |
| 274 TRACE_READ_OFFSET(); | 274 TRACE_READ_OFFSET(); |
| 275 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 275 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
| 276 if ((canonical_name == -1) && !allow_null) { | 276 if ((canonical_name == -1) && !allow_null) { |
| 277 FATAL("Expected a valid member reference, but got `null`"); | 277 FATAL("Expected a valid member reference, but got `null`"); |
| 278 } | 278 } |
| 279 return canonical_name; | 279 return canonical_name; |
| 280 } | 280 } |
| 281 | 281 |
| 282 | 282 |
| 283 intptr_t Reference::ReadClassFrom(Reader* reader, bool allow_null) { | 283 NameIndex Reference::ReadClassFrom(Reader* reader, bool allow_null) { |
| 284 TRACE_READ_OFFSET(); | 284 TRACE_READ_OFFSET(); |
| 285 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 285 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
| 286 if ((canonical_name == -1) && !allow_null) { | 286 if ((canonical_name == -1) && !allow_null) { |
| 287 FATAL("Expected a valid class reference, but got `null`"); | 287 FATAL("Expected a valid class reference, but got `null`"); |
| 288 } | 288 } |
| 289 return canonical_name; | 289 return canonical_name; |
| 290 } | 290 } |
| 291 | 291 |
| 292 | 292 |
| 293 intptr_t Reference::ReadTypedefFrom(Reader* reader) { | 293 NameIndex Reference::ReadTypedefFrom(Reader* reader) { |
| 294 TRACE_READ_OFFSET(); | 294 TRACE_READ_OFFSET(); |
| 295 intptr_t canonical_name = reader->ReadCanonicalNameReference(); | 295 NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
| 296 if (canonical_name == -1) { | 296 if (canonical_name == -1) { |
| 297 FATAL("Expected a valid typedef reference, but got `null`"); | 297 FATAL("Expected a valid typedef reference, but got `null`"); |
| 298 } | 298 } |
| 299 return canonical_name; | 299 return canonical_name; |
| 300 } | 300 } |
| 301 | 301 |
| 302 | 302 |
| 303 Field* Field::ReadFrom(Reader* reader) { | 303 Field* Field::ReadFrom(Reader* reader) { |
| 304 TRACE_READ_OFFSET(); | 304 TRACE_READ_OFFSET(); |
| 305 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. | 305 kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 Arguments* arguments = new Arguments(); | 660 Arguments* arguments = new Arguments(); |
| 661 arguments->types().ReadFromStatic<DartType>(reader); | 661 arguments->types().ReadFromStatic<DartType>(reader); |
| 662 arguments->positional().ReadFromStatic<Expression>(reader); | 662 arguments->positional().ReadFromStatic<Expression>(reader); |
| 663 arguments->named().ReadFromStatic<NamedExpression>(reader); | 663 arguments->named().ReadFromStatic<NamedExpression>(reader); |
| 664 return arguments; | 664 return arguments; |
| 665 } | 665 } |
| 666 | 666 |
| 667 | 667 |
| 668 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { | 668 NamedExpression* NamedExpression::ReadFrom(Reader* reader) { |
| 669 TRACE_READ_OFFSET(); | 669 TRACE_READ_OFFSET(); |
| 670 intptr_t name_index = reader->ReadUInt(); | 670 StringIndex name_index(reader->ReadUInt()); |
| 671 Expression* expression = Expression::ReadFrom(reader); | 671 Expression* expression = Expression::ReadFrom(reader); |
| 672 return new NamedExpression(name_index, expression); | 672 return new NamedExpression(name_index, expression); |
| 673 } | 673 } |
| 674 | 674 |
| 675 | 675 |
| 676 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { | 676 MethodInvocation* MethodInvocation::ReadFrom(Reader* reader) { |
| 677 TRACE_READ_OFFSET(); | 677 TRACE_READ_OFFSET(); |
| 678 MethodInvocation* invocation = new MethodInvocation(); | 678 MethodInvocation* invocation = new MethodInvocation(); |
| 679 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 679 invocation->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 680 invocation->position_ = reader->ReadPosition(); | 680 invocation->position_ = reader->ReadPosition(); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 expr->position_ = reader->ReadPosition(); | 783 expr->position_ = reader->ReadPosition(); |
| 784 expr->operand_ = Expression::ReadFrom(reader); | 784 expr->operand_ = Expression::ReadFrom(reader); |
| 785 expr->type_ = DartType::ReadFrom(reader); | 785 expr->type_ = DartType::ReadFrom(reader); |
| 786 return expr; | 786 return expr; |
| 787 } | 787 } |
| 788 | 788 |
| 789 | 789 |
| 790 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { | 790 StringLiteral* StringLiteral::ReadFrom(Reader* reader) { |
| 791 TRACE_READ_OFFSET(); | 791 TRACE_READ_OFFSET(); |
| 792 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. | 792 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
| 793 StringLiteral* lit = new StringLiteral(reader->ReadUInt()); | 793 StringLiteral* lit = new StringLiteral(StringIndex(reader->ReadUInt())); |
| 794 lit->kernel_offset_ = offset; | 794 lit->kernel_offset_ = offset; |
| 795 return lit; | 795 return lit; |
| 796 } | 796 } |
| 797 | 797 |
| 798 | 798 |
| 799 BigintLiteral* BigintLiteral::ReadFrom(Reader* reader) { | 799 BigintLiteral* BigintLiteral::ReadFrom(Reader* reader) { |
| 800 TRACE_READ_OFFSET(); | 800 TRACE_READ_OFFSET(); |
| 801 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. | 801 intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
| 802 BigintLiteral* lit = new BigintLiteral(reader->ReadUInt()); | 802 BigintLiteral* lit = new BigintLiteral(StringIndex(reader->ReadUInt())); |
| 803 lit->kernel_offset_ = offset; | 803 lit->kernel_offset_ = offset; |
| 804 return lit; | 804 return lit; |
| 805 } | 805 } |
| 806 | 806 |
| 807 | 807 |
| 808 IntLiteral* IntLiteral::ReadFrom(Reader* reader, bool is_negative) { | 808 IntLiteral* IntLiteral::ReadFrom(Reader* reader, bool is_negative) { |
| 809 TRACE_READ_OFFSET(); | 809 TRACE_READ_OFFSET(); |
| 810 IntLiteral* literal = new IntLiteral(); | 810 IntLiteral* literal = new IntLiteral(); |
| 811 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 811 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 812 literal->value_ = is_negative ? -static_cast<int64_t>(reader->ReadUInt()) | 812 literal->value_ = is_negative ? -static_cast<int64_t>(reader->ReadUInt()) |
| 813 : reader->ReadUInt(); | 813 : reader->ReadUInt(); |
| 814 return literal; | 814 return literal; |
| 815 } | 815 } |
| 816 | 816 |
| 817 | 817 |
| 818 IntLiteral* IntLiteral::ReadFrom(Reader* reader, uint8_t payload) { | 818 IntLiteral* IntLiteral::ReadFrom(Reader* reader, uint8_t payload) { |
| 819 TRACE_READ_OFFSET(); | 819 TRACE_READ_OFFSET(); |
| 820 IntLiteral* literal = new IntLiteral(); | 820 IntLiteral* literal = new IntLiteral(); |
| 821 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 821 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 822 literal->value_ = static_cast<int32_t>(payload) - SpecializedIntLiteralBias; | 822 literal->value_ = static_cast<int32_t>(payload) - SpecializedIntLiteralBias; |
| 823 return literal; | 823 return literal; |
| 824 } | 824 } |
| 825 | 825 |
| 826 | 826 |
| 827 DoubleLiteral* DoubleLiteral::ReadFrom(Reader* reader) { | 827 DoubleLiteral* DoubleLiteral::ReadFrom(Reader* reader) { |
| 828 TRACE_READ_OFFSET(); | 828 TRACE_READ_OFFSET(); |
| 829 DoubleLiteral* literal = new DoubleLiteral(); | 829 DoubleLiteral* literal = new DoubleLiteral(); |
| 830 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 830 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 831 literal->value_index_ = reader->ReadUInt(); | 831 literal->value_index_ = StringIndex(reader->ReadUInt()); |
| 832 return literal; | 832 return literal; |
| 833 } | 833 } |
| 834 | 834 |
| 835 | 835 |
| 836 BoolLiteral* BoolLiteral::ReadFrom(Reader* reader, bool value) { | 836 BoolLiteral* BoolLiteral::ReadFrom(Reader* reader, bool value) { |
| 837 TRACE_READ_OFFSET(); | 837 TRACE_READ_OFFSET(); |
| 838 BoolLiteral* lit = new BoolLiteral(); | 838 BoolLiteral* lit = new BoolLiteral(); |
| 839 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 839 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 840 lit->value_ = value; | 840 lit->value_ = value; |
| 841 return lit; | 841 return lit; |
| 842 } | 842 } |
| 843 | 843 |
| 844 | 844 |
| 845 NullLiteral* NullLiteral::ReadFrom(Reader* reader) { | 845 NullLiteral* NullLiteral::ReadFrom(Reader* reader) { |
| 846 TRACE_READ_OFFSET(); | 846 TRACE_READ_OFFSET(); |
| 847 NullLiteral* lit = new NullLiteral(); | 847 NullLiteral* lit = new NullLiteral(); |
| 848 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 848 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 849 return lit; | 849 return lit; |
| 850 } | 850 } |
| 851 | 851 |
| 852 | 852 |
| 853 SymbolLiteral* SymbolLiteral::ReadFrom(Reader* reader) { | 853 SymbolLiteral* SymbolLiteral::ReadFrom(Reader* reader) { |
| 854 TRACE_READ_OFFSET(); | 854 TRACE_READ_OFFSET(); |
| 855 SymbolLiteral* lit = new SymbolLiteral(); | 855 SymbolLiteral* lit = new SymbolLiteral(); |
| 856 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 856 lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 857 lit->value_index_ = reader->ReadUInt(); | 857 lit->value_index_ = StringIndex(reader->ReadUInt()); |
| 858 return lit; | 858 return lit; |
| 859 } | 859 } |
| 860 | 860 |
| 861 | 861 |
| 862 TypeLiteral* TypeLiteral::ReadFrom(Reader* reader) { | 862 TypeLiteral* TypeLiteral::ReadFrom(Reader* reader) { |
| 863 TRACE_READ_OFFSET(); | 863 TRACE_READ_OFFSET(); |
| 864 TypeLiteral* literal = new TypeLiteral(); | 864 TypeLiteral* literal = new TypeLiteral(); |
| 865 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 865 literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 866 literal->type_ = DartType::ReadFrom(reader); | 866 literal->type_ = DartType::ReadFrom(reader); |
| 867 return literal; | 867 return literal; |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1325 bool read_tag) { | 1325 bool read_tag) { |
| 1326 TRACE_READ_OFFSET(); | 1326 TRACE_READ_OFFSET(); |
| 1327 PositionScope scope(reader); | 1327 PositionScope scope(reader); |
| 1328 | 1328 |
| 1329 VariableDeclaration* decl = new VariableDeclaration(); | 1329 VariableDeclaration* decl = new VariableDeclaration(); |
| 1330 // -1 or -0 depending on whether there's a tag or not. | 1330 // -1 or -0 depending on whether there's a tag or not. |
| 1331 decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0); | 1331 decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0); |
| 1332 decl->position_ = reader->ReadPosition(); | 1332 decl->position_ = reader->ReadPosition(); |
| 1333 decl->equals_position_ = reader->ReadPosition(); | 1333 decl->equals_position_ = reader->ReadPosition(); |
| 1334 decl->flags_ = reader->ReadFlags(); | 1334 decl->flags_ = reader->ReadFlags(); |
| 1335 decl->name_index_ = reader->ReadUInt(); | 1335 decl->name_index_ = StringIndex(reader->ReadUInt()); |
| 1336 decl->type_ = DartType::ReadFrom(reader); | 1336 decl->type_ = DartType::ReadFrom(reader); |
| 1337 decl->initializer_ = reader->ReadOptional<Expression>(); | 1337 decl->initializer_ = reader->ReadOptional<Expression>(); |
| 1338 | 1338 |
| 1339 // Go to next token position so it ends *after* the last potentially | 1339 // Go to next token position so it ends *after* the last potentially |
| 1340 // debuggable position in the initializer. | 1340 // debuggable position in the initializer. |
| 1341 TokenPosition position = reader->max_position(); | 1341 TokenPosition position = reader->max_position(); |
| 1342 if (position.IsReal()) position.Next(); | 1342 if (position.IsReal()) position.Next(); |
| 1343 decl->end_position_ = position; | 1343 decl->end_position_ = position; |
| 1344 reader->helper()->variables().Push(decl); | 1344 reader->helper()->variables().Push(decl); |
| 1345 | 1345 |
| 1346 return decl; | 1346 return decl; |
| 1347 } | 1347 } |
| 1348 | 1348 |
| 1349 | 1349 |
| 1350 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { | 1350 FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
| 1351 TRACE_READ_OFFSET(); | 1351 TRACE_READ_OFFSET(); |
| 1352 FunctionDeclaration* decl = new FunctionDeclaration(); | 1352 FunctionDeclaration* decl = new FunctionDeclaration(); |
| 1353 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. | 1353 decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
| 1354 decl->position_ = reader->ReadPosition(); | 1354 decl->position_ = reader->ReadPosition(); |
| 1355 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); | 1355 decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false); |
| 1356 VariableScope<ReaderHelper> parameters(reader->helper()); | 1356 VariableScope<ReaderHelper> parameters(reader->helper()); |
| 1357 decl->function_ = FunctionNode::ReadFrom(reader); | 1357 decl->function_ = FunctionNode::ReadFrom(reader); |
| 1358 return decl; | 1358 return decl; |
| 1359 } | 1359 } |
| 1360 | 1360 |
| 1361 | 1361 |
| 1362 Name* Name::ReadFrom(Reader* reader) { | 1362 Name* Name::ReadFrom(Reader* reader) { |
| 1363 intptr_t name_index = reader->ReadUInt(); | 1363 StringIndex name_index(reader->ReadUInt()); |
| 1364 if ((reader->StringLength(name_index) >= 1) && | 1364 if ((reader->StringLength(name_index) >= 1) && |
| 1365 (reader->CharacterAt(name_index, 0) == '_')) { | 1365 (reader->CharacterAt(name_index, 0) == '_')) { |
| 1366 intptr_t library_reference = reader->ReadCanonicalNameReference(); | 1366 intptr_t library_reference = reader->ReadCanonicalNameReference(); |
| 1367 return new Name(name_index, library_reference); | 1367 return new Name(name_index, library_reference); |
| 1368 } else { | 1368 } else { |
| 1369 return new Name(name_index, NULL); | 1369 return new Name(name_index, NULL); |
| 1370 } | 1370 } |
| 1371 } | 1371 } |
| 1372 | 1372 |
| 1373 | 1373 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1416 | 1416 |
| 1417 | 1417 |
| 1418 VoidType* VoidType::ReadFrom(Reader* reader) { | 1418 VoidType* VoidType::ReadFrom(Reader* reader) { |
| 1419 TRACE_READ_OFFSET(); | 1419 TRACE_READ_OFFSET(); |
| 1420 return new VoidType(); | 1420 return new VoidType(); |
| 1421 } | 1421 } |
| 1422 | 1422 |
| 1423 | 1423 |
| 1424 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { | 1424 InterfaceType* InterfaceType::ReadFrom(Reader* reader) { |
| 1425 TRACE_READ_OFFSET(); | 1425 TRACE_READ_OFFSET(); |
| 1426 intptr_t klass_name = Reference::ReadClassFrom(reader); | 1426 NameIndex klass_name = Reference::ReadClassFrom(reader); |
| 1427 InterfaceType* type = new InterfaceType(klass_name); | 1427 InterfaceType* type = new InterfaceType(klass_name); |
| 1428 type->type_arguments().ReadFromStatic<DartType>(reader); | 1428 type->type_arguments().ReadFromStatic<DartType>(reader); |
| 1429 return type; | 1429 return type; |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 | 1432 |
| 1433 InterfaceType* InterfaceType::ReadFrom(Reader* reader, | 1433 InterfaceType* InterfaceType::ReadFrom(Reader* reader, |
| 1434 bool _without_type_arguments_) { | 1434 bool _without_type_arguments_) { |
| 1435 TRACE_READ_OFFSET(); | 1435 TRACE_READ_OFFSET(); |
| 1436 intptr_t klass_name = Reference::ReadClassFrom(reader); | 1436 NameIndex klass_name = Reference::ReadClassFrom(reader); |
| 1437 InterfaceType* type = new InterfaceType(klass_name); | 1437 InterfaceType* type = new InterfaceType(klass_name); |
| 1438 ASSERT(_without_type_arguments_); | 1438 ASSERT(_without_type_arguments_); |
| 1439 return type; | 1439 return type; |
| 1440 } | 1440 } |
| 1441 | 1441 |
| 1442 | 1442 |
| 1443 TypedefType* TypedefType::ReadFrom(Reader* reader) { | 1443 TypedefType* TypedefType::ReadFrom(Reader* reader) { |
| 1444 TRACE_READ_OFFSET(); | 1444 TRACE_READ_OFFSET(); |
| 1445 intptr_t typedef_name = Reference::ReadTypedefFrom(reader); | 1445 NameIndex typedef_name = Reference::ReadTypedefFrom(reader); |
| 1446 TypedefType* type = new TypedefType(typedef_name); | 1446 TypedefType* type = new TypedefType(typedef_name); |
| 1447 type->type_arguments().ReadFromStatic<DartType>(reader); | 1447 type->type_arguments().ReadFromStatic<DartType>(reader); |
| 1448 return type; | 1448 return type; |
| 1449 } | 1449 } |
| 1450 | 1450 |
| 1451 | 1451 |
| 1452 FunctionType* FunctionType::ReadFrom(Reader* reader) { | 1452 FunctionType* FunctionType::ReadFrom(Reader* reader) { |
| 1453 TRACE_READ_OFFSET(); | 1453 TRACE_READ_OFFSET(); |
| 1454 FunctionType* type = new FunctionType(); | 1454 FunctionType* type = new FunctionType(); |
| 1455 TypeParameterScope<ReaderHelper> scope(reader->helper()); | 1455 TypeParameterScope<ReaderHelper> scope(reader->helper()); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1511 // Skip the UTF-8 encoded strings. | 1511 // Skip the UTF-8 encoded strings. |
| 1512 reader->MarkStringDataOffset(); | 1512 reader->MarkStringDataOffset(); |
| 1513 reader->Consume(offset); | 1513 reader->Consume(offset); |
| 1514 | 1514 |
| 1515 program->source_table_.ReadFrom(reader); | 1515 program->source_table_.ReadFrom(reader); |
| 1516 | 1516 |
| 1517 // Deserialize the canonical name table to give fast access to canonical names | 1517 // Deserialize the canonical name table to give fast access to canonical names |
| 1518 // during deserialization. | 1518 // during deserialization. |
| 1519 program->name_table_offset_ = reader->offset(); | 1519 program->name_table_offset_ = reader->offset(); |
| 1520 intptr_t name_count = reader->ReadUInt(); | 1520 intptr_t name_count = reader->ReadUInt(); |
| 1521 reader->canonical_name_parents_ = new intptr_t[name_count]; | 1521 reader->canonical_name_parents_ = new NameIndex[name_count]; |
| 1522 reader->canonical_name_strings_ = new intptr_t[name_count]; | 1522 reader->canonical_name_strings_ = new StringIndex[name_count]; |
| 1523 for (int i = 0; i < name_count; ++i) { | 1523 for (int i = 0; i < name_count; ++i) { |
| 1524 // The parent name index is biased: 0 is the root name and otherwise N+1 is | 1524 // The parent name index is biased: 0 is the root name and otherwise N+1 is |
| 1525 // the Nth name. | 1525 // the Nth name. |
| 1526 reader->canonical_name_parents_[i] = reader->ReadUInt() - 1; | 1526 reader->canonical_name_parents_[i] = reader->ReadCanonicalNameReference(); |
| 1527 reader->canonical_name_strings_[i] = reader->ReadUInt(); | 1527 reader->canonical_name_strings_[i] = StringIndex(reader->ReadUInt()); |
| 1528 } | 1528 } |
| 1529 | 1529 |
| 1530 int libraries = reader->ReadUInt(); | 1530 int libraries = reader->ReadUInt(); |
| 1531 program->libraries().EnsureInitialized(libraries); | 1531 program->libraries().EnsureInitialized(libraries); |
| 1532 for (intptr_t i = 0; i < libraries; i++) { | 1532 for (intptr_t i = 0; i < libraries; i++) { |
| 1533 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); | 1533 program->libraries().GetOrCreate<Library>(i)->ReadFrom(reader); |
| 1534 } | 1534 } |
| 1535 | 1535 |
| 1536 program->main_method_reference_ = | 1536 program->main_method_reference_ = |
| 1537 Reference::ReadMemberFrom(reader, /*allow_null=*/true); | 1537 Reference::ReadMemberFrom(reader, /*allow_null=*/true); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1562 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( | 1562 LabelScope<ReaderHelper, BlockStack<LabeledStatement> > labels( |
| 1563 reader->helper()); | 1563 reader->helper()); |
| 1564 VariableScope<ReaderHelper> vars(reader->helper()); | 1564 VariableScope<ReaderHelper> vars(reader->helper()); |
| 1565 function->body_ = reader->ReadOptional<Statement>(); | 1565 function->body_ = reader->ReadOptional<Statement>(); |
| 1566 return function; | 1566 return function; |
| 1567 } | 1567 } |
| 1568 | 1568 |
| 1569 | 1569 |
| 1570 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { | 1570 TypeParameter* TypeParameter::ReadFrom(Reader* reader) { |
| 1571 TRACE_READ_OFFSET(); | 1571 TRACE_READ_OFFSET(); |
| 1572 name_index_ = reader->ReadUInt(); | 1572 name_index_ = StringIndex(reader->ReadUInt()); |
| 1573 bound_ = DartType::ReadFrom(reader); | 1573 bound_ = DartType::ReadFrom(reader); |
| 1574 return this; | 1574 return this; |
| 1575 } | 1575 } |
| 1576 | 1576 |
| 1577 | 1577 |
| 1578 } // namespace kernel | 1578 } // namespace kernel |
| 1579 | 1579 |
| 1580 | 1580 |
| 1581 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 1581 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 1582 intptr_t buffer_length) { | 1582 intptr_t buffer_length) { |
| 1583 kernel::Reader reader(buffer, buffer_length); | 1583 kernel::Reader reader(buffer, buffer_length); |
| 1584 return kernel::Program::ReadFrom(&reader); | 1584 return kernel::Program::ReadFrom(&reader); |
| 1585 } | 1585 } |
| 1586 | 1586 |
| 1587 | 1587 |
| 1588 } // namespace dart | 1588 } // namespace dart |
| 1589 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1589 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |