| Index: runtime/vm/kernel_binary.cc
|
| diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc
|
| index f3a4104572274a3447a87a640920693c3f4fde36..a1cad8377e2c09b8d4a288acc9e78b0380914b6b 100644
|
| --- a/runtime/vm/kernel_binary.cc
|
| +++ b/runtime/vm/kernel_binary.cc
|
| @@ -328,7 +328,7 @@ class ReaderHelper {
|
|
|
| class Reader {
|
| public:
|
| - Reader(const uint8_t* buffer, int64_t size)
|
| + Reader(const uint8_t* buffer, intptr_t size)
|
| : buffer_(buffer), size_(size), offset_(0) {}
|
|
|
| uint32_t ReadUInt32() {
|
| @@ -444,13 +444,13 @@ class Reader {
|
| if (offset_ != size_) {
|
| FATAL2(
|
| "Reading Kernel file: Expected to be at EOF "
|
| - "(offset: %" Pd64 ", size: %" Pd64 ")",
|
| + "(offset: %" Pd ", size: %" Pd ")",
|
| offset_, size_);
|
| }
|
| }
|
|
|
| void DumpOffset(const char* str) {
|
| - OS::PrintErr("@%" Pd64 " %s\n", offset_, str);
|
| + OS::PrintErr("@%" Pd " %s\n", offset_, str);
|
| }
|
|
|
| // The largest position read yet (since last reset).
|
| @@ -501,10 +501,12 @@ class Reader {
|
| return name;
|
| }
|
|
|
| + intptr_t offset() { return offset_; }
|
| +
|
| private:
|
| const uint8_t* buffer_;
|
| - int64_t size_;
|
| - int64_t offset_;
|
| + intptr_t size_;
|
| + intptr_t offset_;
|
| ReaderHelper builder_;
|
| TokenPosition max_position_;
|
| TokenPosition min_position_;
|
| @@ -636,7 +638,7 @@ class VariableDeclarationImpl {
|
| public:
|
| static VariableDeclaration* ReadFrom(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| - return VariableDeclaration::ReadFromImpl(reader);
|
| + return VariableDeclaration::ReadFromImpl(reader, false);
|
| }
|
| };
|
|
|
| @@ -803,6 +805,7 @@ String* Reference::ReadStringFrom(Reader* reader) {
|
|
|
| Field* Field::ReadFrom(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| + kernel_offset_ = reader->offset(); // Notice the ReadTag() below.
|
| Tag tag = reader->ReadTag();
|
| ASSERT(tag == kField);
|
|
|
| @@ -919,7 +922,7 @@ RedirectingInitializer* RedirectingInitializer::ReadFromImpl(Reader* reader) {
|
| LocalInitializer* LocalInitializer::ReadFromImpl(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| LocalInitializer* init = new LocalInitializer();
|
| - init->variable_ = VariableDeclaration::ReadFromImpl(reader);
|
| + init->variable_ = VariableDeclaration::ReadFromImpl(reader, false);
|
| return init;
|
| }
|
|
|
| @@ -1387,6 +1390,7 @@ FunctionExpression* FunctionExpression::ReadFrom(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| VariableScope<ReaderHelper> parameters(reader->helper());
|
| FunctionExpression* expr = new FunctionExpression();
|
| + expr->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| expr->function_ = FunctionNode::ReadFrom(reader);
|
| return expr;
|
| }
|
| @@ -1398,7 +1402,8 @@ Let* Let::ReadFrom(Reader* reader) {
|
| PositionScope scope(reader);
|
|
|
| Let* let = new Let();
|
| - let->variable_ = VariableDeclaration::ReadFromImpl(reader);
|
| + let->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| + let->variable_ = VariableDeclaration::ReadFromImpl(reader, false);
|
| let->body_ = Expression::ReadFrom(reader);
|
| let->position_ = reader->min_position();
|
| let->end_position_ = reader->max_position();
|
| @@ -1450,7 +1455,7 @@ Statement* Statement::ReadFrom(Reader* reader) {
|
| case kYieldStatement:
|
| return YieldStatement::ReadFrom(reader);
|
| case kVariableDeclaration:
|
| - return VariableDeclaration::ReadFromImpl(reader);
|
| + return VariableDeclaration::ReadFromImpl(reader, true);
|
| case kFunctionDeclaration:
|
| return FunctionDeclaration::ReadFrom(reader);
|
| default:
|
| @@ -1478,6 +1483,7 @@ Block* Block::ReadFromImpl(Reader* reader) {
|
|
|
| VariableScope<ReaderHelper> vars(reader->helper());
|
| Block* block = new Block();
|
| + block->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| block->statements().ReadFromStatic<Statement>(reader);
|
| block->position_ = reader->min_position();
|
| block->end_position_ = reader->max_position();
|
| @@ -1544,6 +1550,7 @@ ForStatement* ForStatement::ReadFrom(Reader* reader) {
|
| PositionScope scope(reader);
|
|
|
| ForStatement* forstmt = new ForStatement();
|
| + forstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| forstmt->variables_.ReadFromStatic<VariableDeclarationImpl>(reader);
|
| forstmt->condition_ = reader->ReadOptional<Expression>();
|
| forstmt->updates_.ReadFromStatic<Expression>(reader);
|
| @@ -1561,9 +1568,10 @@ ForInStatement* ForInStatement::ReadFrom(Reader* reader, bool is_async) {
|
| PositionScope scope(reader);
|
|
|
| ForInStatement* forinstmt = new ForInStatement();
|
| + forinstmt->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| forinstmt->is_async_ = is_async;
|
| forinstmt->position_ = reader->ReadPosition();
|
| - forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader);
|
| + forinstmt->variable_ = VariableDeclaration::ReadFromImpl(reader, false);
|
| forinstmt->iterable_ = Expression::ReadFrom(reader);
|
| forinstmt->body_ = Statement::ReadFrom(reader);
|
| forinstmt->end_position_ = reader->max_position();
|
| @@ -1655,6 +1663,7 @@ Catch* Catch::ReadFrom(Reader* reader) {
|
| PositionScope scope(reader);
|
|
|
| Catch* c = new Catch();
|
| + c->kernel_offset_ = reader->offset(); // Catch has no tag.
|
| c->guard_ = DartType::ReadFrom(reader);
|
| c->exception_ =
|
| reader->ReadOptional<VariableDeclaration, VariableDeclarationImpl>();
|
| @@ -1692,15 +1701,18 @@ VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| Tag tag = reader->ReadTag();
|
| ASSERT(tag == kVariableDeclaration);
|
| - return VariableDeclaration::ReadFromImpl(reader);
|
| + return VariableDeclaration::ReadFromImpl(reader, true);
|
| }
|
|
|
|
|
| -VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader) {
|
| +VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader,
|
| + bool read_tag) {
|
| TRACE_READ_OFFSET();
|
| PositionScope scope(reader);
|
|
|
| VariableDeclaration* decl = new VariableDeclaration();
|
| + // -1 or -0 depending on whether there's a tag or not.
|
| + decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0);
|
| decl->position_ = reader->ReadPosition();
|
| decl->equals_position_ = reader->ReadPosition();
|
| decl->flags_ = reader->ReadFlags();
|
| @@ -1722,8 +1734,9 @@ VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader) {
|
| FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) {
|
| TRACE_READ_OFFSET();
|
| FunctionDeclaration* decl = new FunctionDeclaration();
|
| + decl->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte.
|
| decl->position_ = reader->ReadPosition();
|
| - decl->variable_ = VariableDeclaration::ReadFromImpl(reader);
|
| + decl->variable_ = VariableDeclaration::ReadFromImpl(reader, false);
|
| VariableScope<ReaderHelper> parameters(reader->helper());
|
| decl->function_ = FunctionNode::ReadFrom(reader);
|
| return decl;
|
| @@ -1895,6 +1908,7 @@ FunctionNode* FunctionNode::ReadFrom(Reader* reader) {
|
| TypeParameterScope<ReaderHelper> scope(reader->helper());
|
|
|
| FunctionNode* function = new FunctionNode();
|
| + function->kernel_offset_ = reader->offset(); // FunctionNode has no tag.
|
| function->position_ = reader->ReadPosition();
|
| function->end_position_ = reader->ReadPosition();
|
| function->async_marker_ =
|
|
|