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

Unified Diff: vm/raw_object_snapshot.cc

Issue 9462003: Changes to shrink the token stream representation from two words to one word. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 10 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 | « vm/raw_object.cc ('k') | vm/scanner.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/raw_object_snapshot.cc
===================================================================
--- vm/raw_object_snapshot.cc (revision 4719)
+++ vm/raw_object_snapshot.cc (working copy)
@@ -572,6 +572,54 @@
}
+RawLiteralToken* LiteralToken::ReadFrom(SnapshotReader* reader,
+ intptr_t object_id,
+ intptr_t tags,
+ Snapshot::Kind kind) {
+ ASSERT(reader != NULL);
+ ASSERT(kind != Snapshot::kMessage);
+
+ // Create the literal token object.
+ LiteralToken& literal_token = LiteralToken::ZoneHandle(
+ reader->isolate(), NEW_OBJECT(LiteralToken));
+ reader->AddBackwardReference(object_id, &literal_token);
+
+ // Set the object tags.
+ literal_token.set_tags(tags);
+
+ // Read the token attributes.
+ Token::Kind token_kind = static_cast<Token::Kind>(reader->ReadIntptrValue());
+ literal_token.set_kind(token_kind);
+ *reader->StringHandle() ^= reader->ReadObject();
+ literal_token.set_literal(*reader->StringHandle());
+ *reader->ObjectHandle() = reader->ReadObject();
+ literal_token.set_value(*reader->ObjectHandle());
+
+ return literal_token.raw();
+}
+
+
+void RawLiteralToken::WriteTo(SnapshotWriter* writer,
+ intptr_t object_id,
+ Snapshot::Kind kind) {
+ ASSERT(writer != NULL);
+ ASSERT(kind != Snapshot::kMessage);
+
+ // Write out the serialization header value for this object.
+ writer->WriteSerializationMarker(kInlined, object_id);
+
+ // Write out the class and tags information.
+ writer->WriteObjectHeader(Object::kLiteralTokenClass, ptr()->tags_);
+
+ // Write out the kind field.
+ writer->Write<intptr_t>(ptr()->kind_);
+
+ // Write out literal and value fields.
+ writer->WriteObject(ptr()->literal_);
+ writer->WriteObject(ptr()->value_);
+}
+
+
RawTokenStream* TokenStream::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
intptr_t tags,
@@ -592,9 +640,8 @@
// Read the token stream into the TokenStream.
for (intptr_t i = 0; i < len; i++) {
- Token::Kind kind = static_cast<Token::Kind>(reader->ReadSmiValue());
- *reader->StringHandle() ^= reader->ReadObject();
- token_stream.SetTokenAt(i, kind, *reader->StringHandle());
+ *reader->ObjectHandle() = reader->ReadObject();
+ token_stream.SetTokenAt(i, *reader->ObjectHandle());
}
return token_stream.raw();
}
« no previous file with comments | « vm/raw_object.cc ('k') | vm/scanner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698