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

Side by Side Diff: runtime/vm/kernel_binary.cc

Issue 2860823002: Introduce classes for string and name indexes (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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)
OLDNEW
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698