OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #include "src/ast/ast.h" | 5 #include "src/ast/ast.h" |
6 | 6 |
7 #include <cmath> // For isfinite. | 7 #include <cmath> // For isfinite. |
8 | 8 |
9 #include "src/ast/prettyprinter.h" | 9 #include "src/ast/prettyprinter.h" |
10 #include "src/ast/scopes.h" | 10 #include "src/ast/scopes.h" |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 case k##Node: \ | 156 case k##Node: \ |
157 return static_cast<const Node*>(this)->IsJump(); | 157 return static_cast<const Node*>(this)->IsJump(); |
158 JUMP_NODE_LIST(GENERATE_CASE) | 158 JUMP_NODE_LIST(GENERATE_CASE) |
159 #undef GENERATE_CASE | 159 #undef GENERATE_CASE |
160 #undef JUMP_NODE_LIST | 160 #undef JUMP_NODE_LIST |
161 default: | 161 default: |
162 return false; | 162 return false; |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 VariableProxy::VariableProxy(Zone* zone, Variable* var, int start_position, | 166 VariableProxy::VariableProxy(Variable* var, int start_position, |
167 int end_position) | 167 int end_position) |
168 : Expression(zone, start_position, kVariableProxy), | 168 : Expression(start_position, kVariableProxy), |
169 bit_field_(IsThisField::encode(var->is_this()) | | 169 bit_field_(IsThisField::encode(var->is_this()) | |
170 IsAssignedField::encode(false) | | 170 IsAssignedField::encode(false) | |
171 IsResolvedField::encode(false)), | 171 IsResolvedField::encode(false)), |
172 end_position_(end_position), | 172 end_position_(end_position), |
173 raw_name_(var->raw_name()), | 173 raw_name_(var->raw_name()), |
174 next_unresolved_(nullptr) { | 174 next_unresolved_(nullptr) { |
175 BindTo(var); | 175 BindTo(var); |
176 } | 176 } |
177 | 177 |
178 VariableProxy::VariableProxy(Zone* zone, const AstRawString* name, | 178 VariableProxy::VariableProxy(const AstRawString* name, |
179 Variable::Kind variable_kind, int start_position, | 179 Variable::Kind variable_kind, int start_position, |
180 int end_position) | 180 int end_position) |
181 : Expression(zone, start_position, kVariableProxy), | 181 : Expression(start_position, kVariableProxy), |
182 bit_field_(IsThisField::encode(variable_kind == Variable::THIS) | | 182 bit_field_(IsThisField::encode(variable_kind == Variable::THIS) | |
183 IsAssignedField::encode(false) | | 183 IsAssignedField::encode(false) | |
184 IsResolvedField::encode(false)), | 184 IsResolvedField::encode(false)), |
185 end_position_(end_position), | 185 end_position_(end_position), |
186 raw_name_(name), | 186 raw_name_(name), |
187 next_unresolved_(nullptr) {} | 187 next_unresolved_(nullptr) {} |
188 | 188 |
189 VariableProxy::VariableProxy(Zone* zone, const VariableProxy* copy_from) | 189 VariableProxy::VariableProxy(const VariableProxy* copy_from) |
190 : Expression(zone, copy_from->position(), kVariableProxy), | 190 : Expression(copy_from->position(), kVariableProxy), |
191 bit_field_(copy_from->bit_field_), | 191 bit_field_(copy_from->bit_field_), |
192 end_position_(copy_from->end_position_), | 192 end_position_(copy_from->end_position_), |
193 next_unresolved_(nullptr) { | 193 next_unresolved_(nullptr) { |
194 if (copy_from->is_resolved()) { | 194 if (copy_from->is_resolved()) { |
195 var_ = copy_from->var_; | 195 var_ = copy_from->var_; |
196 } else { | 196 } else { |
197 raw_name_ = copy_from->raw_name_; | 197 raw_name_ = copy_from->raw_name_; |
198 } | 198 } |
199 } | 199 } |
200 | 200 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 } | 243 } |
244 } | 244 } |
245 | 245 |
246 void ForInStatement::AssignFeedbackVectorSlots(Isolate* isolate, | 246 void ForInStatement::AssignFeedbackVectorSlots(Isolate* isolate, |
247 FeedbackVectorSpec* spec, | 247 FeedbackVectorSpec* spec, |
248 FeedbackVectorSlotCache* cache) { | 248 FeedbackVectorSlotCache* cache) { |
249 AssignVectorSlots(each(), spec, &each_slot_); | 249 AssignVectorSlots(each(), spec, &each_slot_); |
250 for_in_feedback_slot_ = spec->AddGeneralSlot(); | 250 for_in_feedback_slot_ = spec->AddGeneralSlot(); |
251 } | 251 } |
252 | 252 |
253 Assignment::Assignment(Zone* zone, Token::Value op, Expression* target, | 253 Assignment::Assignment(Token::Value op, Expression* target, Expression* value, |
254 Expression* value, int pos) | 254 int pos) |
255 : Expression(zone, pos, kAssignment), | 255 : Expression(pos, kAssignment), |
256 bit_field_( | 256 bit_field_( |
257 IsUninitializedField::encode(false) | KeyTypeField::encode(ELEMENT) | | 257 IsUninitializedField::encode(false) | KeyTypeField::encode(ELEMENT) | |
258 StoreModeField::encode(STANDARD_STORE) | TokenField::encode(op)), | 258 StoreModeField::encode(STANDARD_STORE) | TokenField::encode(op)), |
259 target_(target), | 259 target_(target), |
260 value_(value), | 260 value_(value), |
261 binary_operation_(NULL) {} | 261 binary_operation_(NULL) {} |
262 | 262 |
263 void Assignment::AssignFeedbackVectorSlots(Isolate* isolate, | 263 void Assignment::AssignFeedbackVectorSlots(Isolate* isolate, |
264 FeedbackVectorSpec* spec, | 264 FeedbackVectorSpec* spec, |
265 FeedbackVectorSlotCache* cache) { | 265 FeedbackVectorSlotCache* cache) { |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 if (property->key()->IsPropertyName()) { | 928 if (property->key()->IsPropertyName()) { |
929 return is_super ? NAMED_SUPER_PROPERTY_CALL : NAMED_PROPERTY_CALL; | 929 return is_super ? NAMED_SUPER_PROPERTY_CALL : NAMED_PROPERTY_CALL; |
930 } else { | 930 } else { |
931 return is_super ? KEYED_SUPER_PROPERTY_CALL : KEYED_PROPERTY_CALL; | 931 return is_super ? KEYED_SUPER_PROPERTY_CALL : KEYED_PROPERTY_CALL; |
932 } | 932 } |
933 } | 933 } |
934 | 934 |
935 return OTHER_CALL; | 935 return OTHER_CALL; |
936 } | 936 } |
937 | 937 |
938 | 938 CaseClause::CaseClause(Expression* label, ZoneList<Statement*>* statements, |
939 CaseClause::CaseClause(Zone* zone, Expression* label, | 939 int pos) |
940 ZoneList<Statement*>* statements, int pos) | 940 : Expression(pos, kCaseClause), |
941 : Expression(zone, pos, kCaseClause), | |
942 label_(label), | 941 label_(label), |
943 statements_(statements), | 942 statements_(statements), |
944 compare_type_(Type::None()) {} | 943 compare_type_(Type::None()) {} |
945 | 944 |
946 uint32_t Literal::Hash() { | 945 uint32_t Literal::Hash() { |
947 return raw_value()->IsString() | 946 return raw_value()->IsString() |
948 ? raw_value()->AsString()->hash() | 947 ? raw_value()->AsString()->hash() |
949 : ComputeLongHash(double_to_uint64(raw_value()->AsNumber())); | 948 : ComputeLongHash(double_to_uint64(raw_value()->AsNumber())); |
950 } | 949 } |
951 | 950 |
952 | 951 |
953 // static | 952 // static |
954 bool Literal::Match(void* literal1, void* literal2) { | 953 bool Literal::Match(void* literal1, void* literal2) { |
955 const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); | 954 const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); |
956 const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); | 955 const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); |
957 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) || | 956 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) || |
958 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); | 957 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); |
959 } | 958 } |
960 | 959 |
961 } // namespace internal | 960 } // namespace internal |
962 } // namespace v8 | 961 } // namespace v8 |
OLD | NEW |