OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Features shared by parsing and pre-parsing scanners. | 5 // Features shared by parsing and pre-parsing scanners. |
6 | 6 |
7 #ifndef V8_PARSING_SCANNER_H_ | 7 #ifndef V8_PARSING_SCANNER_H_ |
8 #define V8_PARSING_SCANNER_H_ | 8 #define V8_PARSING_SCANNER_H_ |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 static const int kBufferSize = 100; | 141 static const int kBufferSize = 100; |
142 | 142 |
143 UnicodeCache* unicode_constants_; | 143 UnicodeCache* unicode_constants_; |
144 // Backing store used to store strings used as hashmap keys. | 144 // Backing store used to store strings used as hashmap keys. |
145 SequenceCollector<unsigned char> backing_store_; | 145 SequenceCollector<unsigned char> backing_store_; |
146 HashMap map_; | 146 HashMap map_; |
147 // Buffer used for string->number->canonical string conversions. | 147 // Buffer used for string->number->canonical string conversions. |
148 char number_buffer_[kBufferSize]; | 148 char number_buffer_[kBufferSize]; |
149 }; | 149 }; |
150 | 150 |
151 | |
152 // ---------------------------------------------------------------------------- | 151 // ---------------------------------------------------------------------------- |
153 // LiteralBuffer - Collector of chars of literals. | 152 // LiteralBuffer - Collector of chars of literals. |
154 | 153 |
| 154 const int kMaxAscii = 127; |
| 155 |
155 class LiteralBuffer { | 156 class LiteralBuffer { |
156 public: | 157 public: |
157 LiteralBuffer() : is_one_byte_(true), position_(0), backing_store_() { } | 158 LiteralBuffer() : is_one_byte_(true), position_(0), backing_store_() { } |
158 | 159 |
159 ~LiteralBuffer() { backing_store_.Dispose(); } | 160 ~LiteralBuffer() { backing_store_.Dispose(); } |
160 | 161 |
161 INLINE(void AddChar(uint32_t code_unit)) { | 162 INLINE(void AddChar(char code_unit)) { |
| 163 if (position_ >= backing_store_.length()) ExpandBuffer(); |
| 164 DCHECK(is_one_byte_); |
| 165 DCHECK(0 <= code_unit && code_unit <= kMaxAscii); |
| 166 backing_store_[position_] = static_cast<byte>(code_unit); |
| 167 position_ += kOneByteSize; |
| 168 return; |
| 169 } |
| 170 |
| 171 INLINE(void AddChar(uc32 code_unit)) { |
162 if (position_ >= backing_store_.length()) ExpandBuffer(); | 172 if (position_ >= backing_store_.length()) ExpandBuffer(); |
163 if (is_one_byte_) { | 173 if (is_one_byte_) { |
164 if (code_unit <= unibrow::Latin1::kMaxChar) { | 174 if (code_unit <= unibrow::Latin1::kMaxChar) { |
165 backing_store_[position_] = static_cast<byte>(code_unit); | 175 backing_store_[position_] = static_cast<byte>(code_unit); |
166 position_ += kOneByteSize; | 176 position_ += kOneByteSize; |
167 return; | 177 return; |
168 } | 178 } |
169 ConvertToTwoByte(); | 179 ConvertToTwoByte(); |
170 } | 180 } |
171 if (code_unit <= unibrow::Utf16::kMaxNonSurrogateCharCode) { | 181 if (code_unit <= unibrow::Utf16::kMaxNonSurrogateCharCode) { |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 : &raw_literal_buffer0_; | 560 : &raw_literal_buffer0_; |
551 free_buffer->Reset(); | 561 free_buffer->Reset(); |
552 next_.raw_literal_chars = free_buffer; | 562 next_.raw_literal_chars = free_buffer; |
553 } | 563 } |
554 | 564 |
555 INLINE(void AddLiteralChar(uc32 c)) { | 565 INLINE(void AddLiteralChar(uc32 c)) { |
556 DCHECK_NOT_NULL(next_.literal_chars); | 566 DCHECK_NOT_NULL(next_.literal_chars); |
557 next_.literal_chars->AddChar(c); | 567 next_.literal_chars->AddChar(c); |
558 } | 568 } |
559 | 569 |
| 570 INLINE(void AddLiteralChar(char c)) { |
| 571 DCHECK_NOT_NULL(next_.literal_chars); |
| 572 next_.literal_chars->AddChar(c); |
| 573 } |
| 574 |
560 INLINE(void AddRawLiteralChar(uc32 c)) { | 575 INLINE(void AddRawLiteralChar(uc32 c)) { |
561 DCHECK_NOT_NULL(next_.raw_literal_chars); | 576 DCHECK_NOT_NULL(next_.raw_literal_chars); |
562 next_.raw_literal_chars->AddChar(c); | 577 next_.raw_literal_chars->AddChar(c); |
563 } | 578 } |
564 | 579 |
565 INLINE(void ReduceRawLiteralLength(int delta)) { | 580 INLINE(void ReduceRawLiteralLength(int delta)) { |
566 DCHECK_NOT_NULL(next_.raw_literal_chars); | 581 DCHECK_NOT_NULL(next_.raw_literal_chars); |
567 next_.raw_literal_chars->ReduceLength(delta); | 582 next_.raw_literal_chars->ReduceLength(delta); |
568 } | 583 } |
569 | 584 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 bool allow_harmony_exponentiation_operator_; | 822 bool allow_harmony_exponentiation_operator_; |
808 | 823 |
809 MessageTemplate::Template scanner_error_; | 824 MessageTemplate::Template scanner_error_; |
810 Location scanner_error_location_; | 825 Location scanner_error_location_; |
811 }; | 826 }; |
812 | 827 |
813 } // namespace internal | 828 } // namespace internal |
814 } // namespace v8 | 829 } // namespace v8 |
815 | 830 |
816 #endif // V8_PARSING_SCANNER_H_ | 831 #endif // V8_PARSING_SCANNER_H_ |
OLD | NEW |