Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: src/ast/ast-value-factory.h

Issue 1439693002: [runtime] Support Proxy setPrototypeOf trap (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@2015-11-09_new_Proxy_1417063011
Patch Set: merging with master Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ast/ast.cc ('k') | src/ast/ast-value-factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 protected: 59 protected:
60 // This is null until the string is internalized. 60 // This is null until the string is internalized.
61 Handle<String> string_; 61 Handle<String> string_;
62 }; 62 };
63 63
64 64
65 class AstRawString : public AstString { 65 class AstRawString : public AstString {
66 public: 66 public:
67 int length() const override { 67 int length() const override {
68 if (is_one_byte_) 68 if (is_one_byte_) return literal_bytes_.length();
69 return literal_bytes_.length();
70 return literal_bytes_.length() / 2; 69 return literal_bytes_.length() / 2;
71 } 70 }
72 71
73 int byte_length() const { return literal_bytes_.length(); } 72 int byte_length() const { return literal_bytes_.length(); }
74 73
75 void Internalize(Isolate* isolate) override; 74 void Internalize(Isolate* isolate) override;
76 75
77 bool AsArrayIndex(uint32_t* index) const; 76 bool AsArrayIndex(uint32_t* index) const;
78 77
79 // The string is not null-terminated, use length() to find out the length. 78 // The string is not null-terminated, use length() to find out the length.
80 const unsigned char* raw_data() const { 79 const unsigned char* raw_data() const { return literal_bytes_.start(); }
81 return literal_bytes_.start();
82 }
83 bool is_one_byte() const { return is_one_byte_; } 80 bool is_one_byte() const { return is_one_byte_; }
84 bool IsOneByteEqualTo(const char* data) const; 81 bool IsOneByteEqualTo(const char* data) const;
85 uint16_t FirstCharacter() const { 82 uint16_t FirstCharacter() const {
86 if (is_one_byte_) 83 if (is_one_byte_) return literal_bytes_[0];
87 return literal_bytes_[0];
88 const uint16_t* c = 84 const uint16_t* c =
89 reinterpret_cast<const uint16_t*>(literal_bytes_.start()); 85 reinterpret_cast<const uint16_t*>(literal_bytes_.start());
90 return *c; 86 return *c;
91 } 87 }
92 88
93 // For storing AstRawStrings in a hash map. 89 // For storing AstRawStrings in a hash map.
94 uint32_t hash() const { 90 uint32_t hash() const { return hash_; }
95 return hash_;
96 }
97 91
98 private: 92 private:
99 friend class AstValueFactory; 93 friend class AstValueFactory;
100 friend class AstRawStringInternalizationKey; 94 friend class AstRawStringInternalizationKey;
101 95
102 AstRawString(bool is_one_byte, const Vector<const byte>& literal_bytes, 96 AstRawString(bool is_one_byte, const Vector<const byte>& literal_bytes,
103 uint32_t hash) 97 uint32_t hash)
104 : is_one_byte_(is_one_byte), literal_bytes_(literal_bytes), hash_(hash) {} 98 : is_one_byte_(is_one_byte), literal_bytes_(literal_bytes), hash_(hash) {}
105 99
106 AstRawString() 100 AstRawString() : is_one_byte_(true), hash_(0) {}
107 : is_one_byte_(true),
108 hash_(0) {}
109 101
110 bool is_one_byte_; 102 bool is_one_byte_;
111 103
112 // Points to memory owned by Zone. 104 // Points to memory owned by Zone.
113 Vector<const byte> literal_bytes_; 105 Vector<const byte> literal_bytes_;
114 uint32_t hash_; 106 uint32_t hash_;
115 }; 107 };
116 108
117 109
118 class AstConsString : public AstString { 110 class AstConsString : public AstString {
119 public: 111 public:
120 AstConsString(const AstString* left, const AstString* right) 112 AstConsString(const AstString* left, const AstString* right)
121 : left_(left), 113 : left_(left), right_(right) {}
122 right_(right) {}
123 114
124 int length() const override { return left_->length() + right_->length(); } 115 int length() const override { return left_->length() + right_->length(); }
125 116
126 void Internalize(Isolate* isolate) override; 117 void Internalize(Isolate* isolate) override;
127 118
128 private: 119 private:
129 friend class AstValueFactory; 120 friend class AstValueFactory;
130 121
131 const AstString* left_; 122 const AstString* left_;
132 const AstString* right_; 123 const AstString* right_;
133 }; 124 };
134 125
135 126
136 // AstValue is either a string, a number, a string array, a boolean, or a 127 // AstValue is either a string, a number, a string array, a boolean, or a
137 // special value (null, undefined, the hole). 128 // special value (null, undefined, the hole).
138 class AstValue : public ZoneObject { 129 class AstValue : public ZoneObject {
139 public: 130 public:
140 bool IsString() const { 131 bool IsString() const { return type_ == STRING; }
141 return type_ == STRING;
142 }
143 132
144 bool IsNumber() const { 133 bool IsNumber() const {
145 return type_ == NUMBER || type_ == NUMBER_WITH_DOT || type_ == SMI; 134 return type_ == NUMBER || type_ == NUMBER_WITH_DOT || type_ == SMI;
146 } 135 }
147 136
148 bool ContainsDot() const { return type_ == NUMBER_WITH_DOT; } 137 bool ContainsDot() const { return type_ == NUMBER_WITH_DOT; }
149 138
150 const AstRawString* AsString() const { 139 const AstRawString* AsString() const {
151 if (type_ == STRING) 140 if (type_ == STRING) return string_;
152 return string_;
153 UNREACHABLE(); 141 UNREACHABLE();
154 return 0; 142 return 0;
155 } 143 }
156 144
157 double AsNumber() const { 145 double AsNumber() const {
158 if (type_ == NUMBER || type_ == NUMBER_WITH_DOT) 146 if (type_ == NUMBER || type_ == NUMBER_WITH_DOT) return number_;
159 return number_; 147 if (type_ == SMI) return smi_;
160 if (type_ == SMI)
161 return smi_;
162 UNREACHABLE(); 148 UNREACHABLE();
163 return 0; 149 return 0;
164 } 150 }
165 151
166 bool EqualsString(const AstRawString* string) const { 152 bool EqualsString(const AstRawString* string) const {
167 return type_ == STRING && string_ == string; 153 return type_ == STRING && string_ == string;
168 } 154 }
169 155
170 bool IsPropertyName() const; 156 bool IsPropertyName() const;
171 157
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 reinterpret_cast<const uint8_t*>(string), StrLength(string))); 291 reinterpret_cast<const uint8_t*>(string), StrLength(string)));
306 } 292 }
307 const AstRawString* GetTwoByteString(Vector<const uint16_t> literal) { 293 const AstRawString* GetTwoByteString(Vector<const uint16_t> literal) {
308 return GetTwoByteStringInternal(literal); 294 return GetTwoByteStringInternal(literal);
309 } 295 }
310 const AstRawString* GetString(Handle<String> literal); 296 const AstRawString* GetString(Handle<String> literal);
311 const AstConsString* NewConsString(const AstString* left, 297 const AstConsString* NewConsString(const AstString* left,
312 const AstString* right); 298 const AstString* right);
313 299
314 void Internalize(Isolate* isolate); 300 void Internalize(Isolate* isolate);
315 bool IsInternalized() { 301 bool IsInternalized() { return isolate_ != NULL; }
316 return isolate_ != NULL;
317 }
318 302
319 #define F(name, str) \ 303 #define F(name, str) \
320 const AstRawString* name##_string() { \ 304 const AstRawString* name##_string() { \
321 if (name##_string_ == NULL) { \ 305 if (name##_string_ == NULL) { \
322 const char* data = str; \ 306 const char* data = str; \
323 name##_string_ = GetOneByteString( \ 307 name##_string_ = GetOneByteString( \
324 Vector<const uint8_t>(reinterpret_cast<const uint8_t*>(data), \ 308 Vector<const uint8_t>(reinterpret_cast<const uint8_t*>(data), \
325 static_cast<int>(strlen(data)))); \ 309 static_cast<int>(strlen(data)))); \
326 } \ 310 } \
327 return name##_string_; \ 311 return name##_string_; \
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 OTHER_CONSTANTS(F) 351 OTHER_CONSTANTS(F)
368 #undef F 352 #undef F
369 }; 353 };
370 } // namespace internal 354 } // namespace internal
371 } // namespace v8 355 } // namespace v8
372 356
373 #undef STRING_CONSTANTS 357 #undef STRING_CONSTANTS
374 #undef OTHER_CONSTANTS 358 #undef OTHER_CONSTANTS
375 359
376 #endif // V8_AST_AST_VALUE_FACTORY_H_ 360 #endif // V8_AST_AST_VALUE_FACTORY_H_
OLDNEW
« no previous file with comments | « src/ast/ast.cc ('k') | src/ast/ast-value-factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698