OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "src/utils.h" | 32 #include "src/utils.h" |
33 | 33 |
34 namespace v8 { | 34 namespace v8 { |
35 namespace internal { | 35 namespace internal { |
36 | 36 |
37 namespace { | 37 namespace { |
38 | 38 |
39 // For using StringToArrayIndex. | 39 // For using StringToArrayIndex. |
40 class OneByteStringStream { | 40 class OneByteStringStream { |
41 public: | 41 public: |
42 explicit OneByteStringStream(Vector<const byte> lb) : | 42 explicit OneByteStringStream(Vector<const byte> lb) |
43 literal_bytes_(lb), pos_(0) {} | 43 : literal_bytes_(lb), pos_(0) {} |
44 | 44 |
45 bool HasMore() { return pos_ < literal_bytes_.length(); } | 45 bool HasMore() { return pos_ < literal_bytes_.length(); } |
46 uint16_t GetNext() { return literal_bytes_[pos_++]; } | 46 uint16_t GetNext() { return literal_bytes_[pos_++]; } |
47 | 47 |
48 private: | 48 private: |
49 Vector<const byte> literal_bytes_; | 49 Vector<const byte> literal_bytes_; |
50 int pos_; | 50 int pos_; |
51 }; | 51 }; |
52 | 52 |
53 } // namespace | 53 } // namespace |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 if (literal_bytes_.length() == 0) { | 88 if (literal_bytes_.length() == 0) { |
89 string_ = isolate->factory()->empty_string(); | 89 string_ = isolate->factory()->empty_string(); |
90 } else { | 90 } else { |
91 AstRawStringInternalizationKey key(this); | 91 AstRawStringInternalizationKey key(this); |
92 string_ = StringTable::LookupKey(isolate, &key); | 92 string_ = StringTable::LookupKey(isolate, &key); |
93 } | 93 } |
94 } | 94 } |
95 | 95 |
96 | 96 |
97 bool AstRawString::AsArrayIndex(uint32_t* index) const { | 97 bool AstRawString::AsArrayIndex(uint32_t* index) const { |
98 if (!string_.is_null()) | 98 if (!string_.is_null()) return string_->AsArrayIndex(index); |
99 return string_->AsArrayIndex(index); | |
100 if (!is_one_byte_ || literal_bytes_.length() == 0 || | 99 if (!is_one_byte_ || literal_bytes_.length() == 0 || |
101 literal_bytes_.length() > String::kMaxArrayIndexSize) | 100 literal_bytes_.length() > String::kMaxArrayIndexSize) |
102 return false; | 101 return false; |
103 OneByteStringStream stream(literal_bytes_); | 102 OneByteStringStream stream(literal_bytes_); |
104 return StringToArrayIndex(&stream, index); | 103 return StringToArrayIndex(&stream, index); |
105 } | 104 } |
106 | 105 |
107 | 106 |
108 bool AstRawString::IsOneByteEqualTo(const char* data) const { | 107 bool AstRawString::IsOneByteEqualTo(const char* data) const { |
109 int length = static_cast<int>(strlen(data)); | 108 int length = static_cast<int>(strlen(data)); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 DCHECK(content.IsTwoByte()); | 234 DCHECK(content.IsTwoByte()); |
236 result = GetTwoByteStringInternal(content.ToUC16Vector()); | 235 result = GetTwoByteStringInternal(content.ToUC16Vector()); |
237 } | 236 } |
238 } | 237 } |
239 isolate_ = saved_isolate; | 238 isolate_ = saved_isolate; |
240 if (isolate_) result->Internalize(isolate_); | 239 if (isolate_) result->Internalize(isolate_); |
241 return result; | 240 return result; |
242 } | 241 } |
243 | 242 |
244 | 243 |
245 const AstConsString* AstValueFactory::NewConsString( | 244 const AstConsString* AstValueFactory::NewConsString(const AstString* left, |
246 const AstString* left, const AstString* right) { | 245 const AstString* right) { |
247 // This Vector will be valid as long as the Collector is alive (meaning that | 246 // This Vector will be valid as long as the Collector is alive (meaning that |
248 // the AstRawString will not be moved). | 247 // the AstRawString will not be moved). |
249 AstConsString* new_string = new (zone_) AstConsString(left, right); | 248 AstConsString* new_string = new (zone_) AstConsString(left, right); |
250 strings_.Add(new_string); | 249 strings_.Add(new_string); |
251 if (isolate_) { | 250 if (isolate_) { |
252 new_string->Internalize(isolate_); | 251 new_string->Internalize(isolate_); |
253 } | 252 } |
254 return new_string; | 253 return new_string; |
255 } | 254 } |
256 | 255 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 AstValue* value = new (zone_) AstValue(number, with_dot); | 296 AstValue* value = new (zone_) AstValue(number, with_dot); |
298 if (isolate_) { | 297 if (isolate_) { |
299 value->Internalize(isolate_); | 298 value->Internalize(isolate_); |
300 } | 299 } |
301 values_.Add(value); | 300 values_.Add(value); |
302 return value; | 301 return value; |
303 } | 302 } |
304 | 303 |
305 | 304 |
306 const AstValue* AstValueFactory::NewSmi(int number) { | 305 const AstValue* AstValueFactory::NewSmi(int number) { |
307 AstValue* value = | 306 AstValue* value = new (zone_) AstValue(AstValue::SMI, number); |
308 new (zone_) AstValue(AstValue::SMI, number); | |
309 if (isolate_) { | 307 if (isolate_) { |
310 value->Internalize(isolate_); | 308 value->Internalize(isolate_); |
311 } | 309 } |
312 values_.Add(value); | 310 values_.Add(value); |
313 return value; | 311 return value; |
314 } | 312 } |
315 | 313 |
316 | 314 |
317 #define GENERATE_VALUE_GETTER(value, initializer) \ | 315 #define GENERATE_VALUE_GETTER(value, initializer) \ |
318 if (!value) { \ | 316 if (!value) { \ |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 length) == 0; | 400 length) == 0; |
403 } else { | 401 } else { |
404 return CompareCharsUnsigned(reinterpret_cast<const uint16_t*>(l), | 402 return CompareCharsUnsigned(reinterpret_cast<const uint16_t*>(l), |
405 reinterpret_cast<const uint16_t*>(r), | 403 reinterpret_cast<const uint16_t*>(r), |
406 length) == 0; | 404 length) == 0; |
407 } | 405 } |
408 } | 406 } |
409 } | 407 } |
410 } // namespace internal | 408 } // namespace internal |
411 } // namespace v8 | 409 } // namespace v8 |
OLD | NEW |