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 "ast.h" | 5 #include "ast.h" |
6 | 6 |
7 #include <cmath> // For isfinite. | 7 #include <cmath> // For isfinite. |
8 #include "builtins.h" | 8 #include "builtins.h" |
9 #include "code-stubs.h" | 9 #include "code-stubs.h" |
10 #include "contexts.h" | 10 #include "contexts.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 void type::Accept(AstVisitor* v) { v->Visit##type(this); } | 27 void type::Accept(AstVisitor* v) { v->Visit##type(this); } |
28 AST_NODE_LIST(DECL_ACCEPT) | 28 AST_NODE_LIST(DECL_ACCEPT) |
29 #undef DECL_ACCEPT | 29 #undef DECL_ACCEPT |
30 | 30 |
31 | 31 |
32 // ---------------------------------------------------------------------------- | 32 // ---------------------------------------------------------------------------- |
33 // Implementation of other node functionality. | 33 // Implementation of other node functionality. |
34 | 34 |
35 | 35 |
36 bool Expression::IsSmiLiteral() const { | 36 bool Expression::IsSmiLiteral() const { |
37 return AsLiteral() != NULL && AsLiteral()->value()->IsSmi(); | 37 return IsLiteral() && AsLiteral()->value()->IsSmi(); |
38 } | 38 } |
39 | 39 |
40 | 40 |
41 bool Expression::IsStringLiteral() const { | 41 bool Expression::IsStringLiteral() const { |
42 return AsLiteral() != NULL && AsLiteral()->value()->IsString(); | 42 return IsLiteral() && AsLiteral()->value()->IsString(); |
43 } | 43 } |
44 | 44 |
45 | 45 |
46 bool Expression::IsNullLiteral() const { | 46 bool Expression::IsNullLiteral() const { |
47 return AsLiteral() != NULL && AsLiteral()->value()->IsNull(); | 47 return IsLiteral() && AsLiteral()->value()->IsNull(); |
48 } | 48 } |
49 | 49 |
50 | 50 |
51 bool Expression::IsUndefinedLiteral(Isolate* isolate) const { | 51 bool Expression::IsUndefinedLiteral(Isolate* isolate) const { |
52 const VariableProxy* var_proxy = AsVariableProxy(); | 52 const VariableProxy* var_proxy = AsVariableProxy(); |
53 if (var_proxy == NULL) return false; | 53 if (var_proxy == NULL) return false; |
54 Variable* var = var_proxy->var(); | 54 Variable* var = var_proxy->var(); |
55 // The global identifier "undefined" is immutable. Everything | 55 // The global identifier "undefined" is immutable. Everything |
56 // else could be reassigned. | 56 // else could be reassigned. |
57 return var != NULL && var->location() == Variable::UNALLOCATED && | 57 return var != NULL && var->location() == Variable::UNALLOCATED && |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 emit_store_ = true; | 185 emit_store_ = true; |
186 key_ = key; | 186 key_ = key; |
187 value_ = value; | 187 value_ = value; |
188 Handle<Object> k = key->value(); | 188 Handle<Object> k = key->value(); |
189 if (k->IsInternalizedString() && | 189 if (k->IsInternalizedString() && |
190 String::Equals(Handle<String>::cast(k), | 190 String::Equals(Handle<String>::cast(k), |
191 zone->isolate()->factory()->proto_string())) { | 191 zone->isolate()->factory()->proto_string())) { |
192 kind_ = PROTOTYPE; | 192 kind_ = PROTOTYPE; |
193 } else if (value_->AsMaterializedLiteral() != NULL) { | 193 } else if (value_->AsMaterializedLiteral() != NULL) { |
194 kind_ = MATERIALIZED_LITERAL; | 194 kind_ = MATERIALIZED_LITERAL; |
195 } else if (value_->AsLiteral() != NULL) { | 195 } else if (value_->IsLiteral()) { |
196 kind_ = CONSTANT; | 196 kind_ = CONSTANT; |
197 } else { | 197 } else { |
198 kind_ = COMPUTED; | 198 kind_ = COMPUTED; |
199 } | 199 } |
200 } | 200 } |
201 | 201 |
202 | 202 |
203 ObjectLiteralProperty::ObjectLiteralProperty( | 203 ObjectLiteralProperty::ObjectLiteralProperty( |
204 Zone* zone, bool is_getter, FunctionLiteral* value) { | 204 Zone* zone, bool is_getter, FunctionLiteral* value) { |
205 emit_store_ = true; | 205 emit_store_ = true; |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 literals->set(1, *element_values); | 383 literals->set(1, *element_values); |
384 | 384 |
385 constant_elements_ = literals; | 385 constant_elements_ = literals; |
386 set_is_simple(is_simple); | 386 set_is_simple(is_simple); |
387 set_depth(depth_acc); | 387 set_depth(depth_acc); |
388 } | 388 } |
389 | 389 |
390 | 390 |
391 Handle<Object> MaterializedLiteral::GetBoilerplateValue(Expression* expression, | 391 Handle<Object> MaterializedLiteral::GetBoilerplateValue(Expression* expression, |
392 Isolate* isolate) { | 392 Isolate* isolate) { |
393 if (expression->AsLiteral() != NULL) { | 393 if (expression->IsLiteral()) { |
394 return expression->AsLiteral()->value(); | 394 return expression->AsLiteral()->value(); |
395 } | 395 } |
396 if (CompileTimeValue::IsCompileTimeValue(expression)) { | 396 if (CompileTimeValue::IsCompileTimeValue(expression)) { |
397 return CompileTimeValue::GetValue(isolate, expression); | 397 return CompileTimeValue::GetValue(isolate, expression); |
398 } | 398 } |
399 return isolate->factory()->uninitialized_value(); | 399 return isolate->factory()->uninitialized_value(); |
400 } | 400 } |
401 | 401 |
402 | 402 |
403 void MaterializedLiteral::BuildConstants(Isolate* isolate) { | 403 void MaterializedLiteral::BuildConstants(Isolate* isolate) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 Handle<String>* check) { | 492 Handle<String>* check) { |
493 return MatchLiteralCompareTypeof(left_, op_, right_, expr, check) || | 493 return MatchLiteralCompareTypeof(left_, op_, right_, expr, check) || |
494 MatchLiteralCompareTypeof(right_, op_, left_, expr, check); | 494 MatchLiteralCompareTypeof(right_, op_, left_, expr, check); |
495 } | 495 } |
496 | 496 |
497 | 497 |
498 static bool IsVoidOfLiteral(Expression* expr) { | 498 static bool IsVoidOfLiteral(Expression* expr) { |
499 UnaryOperation* maybe_unary = expr->AsUnaryOperation(); | 499 UnaryOperation* maybe_unary = expr->AsUnaryOperation(); |
500 return maybe_unary != NULL && | 500 return maybe_unary != NULL && |
501 maybe_unary->op() == Token::VOID && | 501 maybe_unary->op() == Token::VOID && |
502 maybe_unary->expression()->AsLiteral() != NULL; | 502 maybe_unary->expression()->IsLiteral(); |
503 } | 503 } |
504 | 504 |
505 | 505 |
506 // Check for the pattern: void <literal> equals <expression> or | 506 // Check for the pattern: void <literal> equals <expression> or |
507 // undefined equals <expression> | 507 // undefined equals <expression> |
508 static bool MatchLiteralCompareUndefined(Expression* left, | 508 static bool MatchLiteralCompareUndefined(Expression* left, |
509 Token::Value op, | 509 Token::Value op, |
510 Expression* right, | 510 Expression* right, |
511 Expression** expr, | 511 Expression** expr, |
512 Isolate* isolate) { | 512 Isolate* isolate) { |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1149 OS::SNPrintF(buffer, "%d", Smi::cast(*value_)->value()); | 1149 OS::SNPrintF(buffer, "%d", Smi::cast(*value_)->value()); |
1150 str = arr; | 1150 str = arr; |
1151 } else { | 1151 } else { |
1152 str = DoubleToCString(value_->Number(), buffer); | 1152 str = DoubleToCString(value_->Number(), buffer); |
1153 } | 1153 } |
1154 return isolate_->factory()->NewStringFromAsciiChecked(str); | 1154 return isolate_->factory()->NewStringFromAsciiChecked(str); |
1155 } | 1155 } |
1156 | 1156 |
1157 | 1157 |
1158 } } // namespace v8::internal | 1158 } } // namespace v8::internal |
OLD | NEW |