Parser / Scanner: Minor refactorings to make streaming scripts work easier.
1) Call DeserializeScopeChain only if it's going to do something non-trivial. And we only need to internalize the AstValueFactory in those cases. 2) BufferedUtf16CharacterStream::FillBuffer doesn't need the length argument. The length is always kBufferSize and the subclasses can just read it (it's protected). R=rossberg@chromium.org BUG= Review URL: https://codereview.chromium.org/381613003 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22307 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
91efa58849
commit
79ddf746d9
@ -859,7 +859,7 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
|
|||||||
FunctionLiteral* result = NULL;
|
FunctionLiteral* result = NULL;
|
||||||
{ Scope* scope = NewScope(scope_, GLOBAL_SCOPE);
|
{ Scope* scope = NewScope(scope_, GLOBAL_SCOPE);
|
||||||
info->SetGlobalScope(scope);
|
info->SetGlobalScope(scope);
|
||||||
if (!info->context().is_null()) {
|
if (!info->context().is_null() && !info->context()->IsNativeContext()) {
|
||||||
scope = Scope::DeserializeScopeChain(*info->context(), scope, zone());
|
scope = Scope::DeserializeScopeChain(*info->context(), scope, zone());
|
||||||
// The Scope is backed up by ScopeInfo (which is in the V8 heap); this
|
// 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
|
// means the Parser cannot operate independent of the V8 heap. Tell the
|
||||||
|
@ -78,7 +78,7 @@ bool BufferedUtf16CharacterStream::ReadBlock() {
|
|||||||
if (buffer_cursor_ < buffer_end_) return true;
|
if (buffer_cursor_ < buffer_end_) return true;
|
||||||
// Otherwise read a new block.
|
// Otherwise read a new block.
|
||||||
}
|
}
|
||||||
unsigned length = FillBuffer(pos_, kBufferSize);
|
unsigned length = FillBuffer(pos_);
|
||||||
buffer_end_ = buffer_ + length;
|
buffer_end_ = buffer_ + length;
|
||||||
return length > 0;
|
return length > 0;
|
||||||
}
|
}
|
||||||
@ -118,9 +118,9 @@ unsigned GenericStringUtf16CharacterStream::BufferSeekForward(unsigned delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos,
|
unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos) {
|
||||||
unsigned length) {
|
|
||||||
if (from_pos >= length_) return 0;
|
if (from_pos >= length_) return 0;
|
||||||
|
unsigned length = kBufferSize;
|
||||||
if (from_pos + length > length_) {
|
if (from_pos + length > length_) {
|
||||||
length = length_ - from_pos;
|
length = length_ - from_pos;
|
||||||
}
|
}
|
||||||
@ -155,8 +155,7 @@ unsigned Utf8ToUtf16CharacterStream::BufferSeekForward(unsigned delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position,
|
unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position) {
|
||||||
unsigned length) {
|
|
||||||
static const unibrow::uchar kMaxUtf16Character = 0xffff;
|
static const unibrow::uchar kMaxUtf16Character = 0xffff;
|
||||||
SetRawPosition(char_position);
|
SetRawPosition(char_position);
|
||||||
if (raw_character_position_ != char_position) {
|
if (raw_character_position_ != char_position) {
|
||||||
@ -165,7 +164,7 @@ unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position,
|
|||||||
return 0u;
|
return 0u;
|
||||||
}
|
}
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
while (i < length - 1) {
|
while (i < kBufferSize - 1) {
|
||||||
if (raw_data_pos_ == raw_data_length_) break;
|
if (raw_data_pos_ == raw_data_length_) break;
|
||||||
unibrow::uchar c = raw_data_[raw_data_pos_];
|
unibrow::uchar c = raw_data_[raw_data_pos_];
|
||||||
if (c <= unibrow::Utf8::kMaxOneByteChar) {
|
if (c <= unibrow::Utf8::kMaxOneByteChar) {
|
||||||
|
@ -29,7 +29,7 @@ class BufferedUtf16CharacterStream: public Utf16CharacterStream {
|
|||||||
virtual void SlowPushBack(uc16 character);
|
virtual void SlowPushBack(uc16 character);
|
||||||
|
|
||||||
virtual unsigned BufferSeekForward(unsigned delta) = 0;
|
virtual unsigned BufferSeekForward(unsigned delta) = 0;
|
||||||
virtual unsigned FillBuffer(unsigned position, unsigned length) = 0;
|
virtual unsigned FillBuffer(unsigned position) = 0;
|
||||||
|
|
||||||
const uc16* pushback_limit_;
|
const uc16* pushback_limit_;
|
||||||
uc16 buffer_[kBufferSize];
|
uc16 buffer_[kBufferSize];
|
||||||
@ -46,7 +46,7 @@ class GenericStringUtf16CharacterStream: public BufferedUtf16CharacterStream {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual unsigned BufferSeekForward(unsigned delta);
|
virtual unsigned BufferSeekForward(unsigned delta);
|
||||||
virtual unsigned FillBuffer(unsigned position, unsigned length);
|
virtual unsigned FillBuffer(unsigned position);
|
||||||
|
|
||||||
Handle<String> string_;
|
Handle<String> string_;
|
||||||
unsigned length_;
|
unsigned length_;
|
||||||
@ -61,7 +61,7 @@ class Utf8ToUtf16CharacterStream: public BufferedUtf16CharacterStream {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual unsigned BufferSeekForward(unsigned delta);
|
virtual unsigned BufferSeekForward(unsigned delta);
|
||||||
virtual unsigned FillBuffer(unsigned char_position, unsigned length);
|
virtual unsigned FillBuffer(unsigned char_position);
|
||||||
void SetRawPosition(unsigned char_position);
|
void SetRawPosition(unsigned char_position);
|
||||||
|
|
||||||
const byte* raw_data_;
|
const byte* raw_data_;
|
||||||
|
Loading…
Reference in New Issue
Block a user