diff --git a/src/parser.cc b/src/parser.cc index b25a7b1af2..544c8c7d8d 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -859,7 +859,7 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, FunctionLiteral* result = NULL; { Scope* scope = NewScope(scope_, GLOBAL_SCOPE); info->SetGlobalScope(scope); - if (!info->context().is_null()) { + if (!info->context().is_null() && !info->context()->IsNativeContext()) { scope = Scope::DeserializeScopeChain(*info->context(), scope, zone()); // The Scope is backed up by ScopeInfo (which is in the V8 heap); this // means the Parser cannot operate independent of the V8 heap. Tell the diff --git a/src/scanner-character-streams.cc b/src/scanner-character-streams.cc index 23af45fe09..5b30026bef 100644 --- a/src/scanner-character-streams.cc +++ b/src/scanner-character-streams.cc @@ -78,7 +78,7 @@ bool BufferedUtf16CharacterStream::ReadBlock() { if (buffer_cursor_ < buffer_end_) return true; // Otherwise read a new block. } - unsigned length = FillBuffer(pos_, kBufferSize); + unsigned length = FillBuffer(pos_); buffer_end_ = buffer_ + length; return length > 0; } @@ -118,9 +118,9 @@ unsigned GenericStringUtf16CharacterStream::BufferSeekForward(unsigned delta) { } -unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos, - unsigned length) { +unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos) { if (from_pos >= length_) return 0; + unsigned length = kBufferSize; if (from_pos + length > length_) { length = length_ - from_pos; } @@ -155,8 +155,7 @@ unsigned Utf8ToUtf16CharacterStream::BufferSeekForward(unsigned delta) { } -unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position, - unsigned length) { +unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position) { static const unibrow::uchar kMaxUtf16Character = 0xffff; SetRawPosition(char_position); if (raw_character_position_ != char_position) { @@ -165,7 +164,7 @@ unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position, return 0u; } unsigned i = 0; - while (i < length - 1) { + while (i < kBufferSize - 1) { if (raw_data_pos_ == raw_data_length_) break; unibrow::uchar c = raw_data_[raw_data_pos_]; if (c <= unibrow::Utf8::kMaxOneByteChar) { diff --git a/src/scanner-character-streams.h b/src/scanner-character-streams.h index a25eb584a5..5297ce897d 100644 --- a/src/scanner-character-streams.h +++ b/src/scanner-character-streams.h @@ -29,7 +29,7 @@ class BufferedUtf16CharacterStream: public Utf16CharacterStream { virtual void SlowPushBack(uc16 character); virtual unsigned BufferSeekForward(unsigned delta) = 0; - virtual unsigned FillBuffer(unsigned position, unsigned length) = 0; + virtual unsigned FillBuffer(unsigned position) = 0; const uc16* pushback_limit_; uc16 buffer_[kBufferSize]; @@ -46,7 +46,7 @@ class GenericStringUtf16CharacterStream: public BufferedUtf16CharacterStream { protected: virtual unsigned BufferSeekForward(unsigned delta); - virtual unsigned FillBuffer(unsigned position, unsigned length); + virtual unsigned FillBuffer(unsigned position); Handle string_; unsigned length_; @@ -61,7 +61,7 @@ class Utf8ToUtf16CharacterStream: public BufferedUtf16CharacterStream { protected: virtual unsigned BufferSeekForward(unsigned delta); - virtual unsigned FillBuffer(unsigned char_position, unsigned length); + virtual unsigned FillBuffer(unsigned char_position); void SetRawPosition(unsigned char_position); const byte* raw_data_;