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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 bool Expression::IsPropertyName() const { | 76 bool Expression::IsPropertyName() const { |
77 return IsLiteral() && AsLiteral()->IsPropertyName(); | 77 return IsLiteral() && AsLiteral()->IsPropertyName(); |
78 } | 78 } |
79 | 79 |
80 bool Expression::IsNullLiteral() const { | 80 bool Expression::IsNullLiteral() const { |
81 if (!IsLiteral()) return false; | 81 if (!IsLiteral()) return false; |
82 return AsLiteral()->raw_value()->IsNull(); | 82 return AsLiteral()->raw_value()->IsNull(); |
83 } | 83 } |
84 | 84 |
85 bool Expression::IsUndefinedLiteral() const { | 85 bool Expression::IsUndefinedLiteral() const { |
86 if (IsLiteral()) { | 86 if (IsLiteral() && AsLiteral()->raw_value()->IsUndefined()) return true; |
87 if (AsLiteral()->raw_value()->IsUndefined()) { | |
88 return true; | |
89 } | |
90 } | |
91 | 87 |
92 const VariableProxy* var_proxy = AsVariableProxy(); | 88 const VariableProxy* var_proxy = AsVariableProxy(); |
93 if (var_proxy == NULL) return false; | 89 if (var_proxy == nullptr) return false; |
94 Variable* var = var_proxy->var(); | 90 Variable* var = var_proxy->var(); |
95 // The global identifier "undefined" is immutable. Everything | 91 // The global identifier "undefined" is immutable. Everything |
96 // else could be reassigned. | 92 // else could be reassigned. |
97 return var != NULL && var->IsUnallocatedOrGlobalSlot() && | 93 return var != NULL && var->IsUnallocated() && |
98 var_proxy->raw_name()->IsOneByteEqualTo("undefined"); | 94 var_proxy->raw_name()->IsOneByteEqualTo("undefined"); |
99 } | 95 } |
100 | 96 |
101 bool Expression::ToBooleanIsTrue() const { | 97 bool Expression::ToBooleanIsTrue() const { |
102 return IsLiteral() && AsLiteral()->ToBooleanIsTrue(); | 98 return IsLiteral() && AsLiteral()->ToBooleanIsTrue(); |
103 } | 99 } |
104 | 100 |
105 bool Expression::ToBooleanIsFalse() const { | 101 bool Expression::ToBooleanIsFalse() const { |
106 return IsLiteral() && AsLiteral()->ToBooleanIsFalse(); | 102 return IsLiteral() && AsLiteral()->ToBooleanIsFalse(); |
107 } | 103 } |
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 if (IsUsingCallFeedbackSlot()) { | 902 if (IsUsingCallFeedbackSlot()) { |
907 stub_slot_ = spec->AddGeneralSlot(); | 903 stub_slot_ = spec->AddGeneralSlot(); |
908 } | 904 } |
909 } | 905 } |
910 | 906 |
911 Call::CallType Call::GetCallType() const { | 907 Call::CallType Call::GetCallType() const { |
912 VariableProxy* proxy = expression()->AsVariableProxy(); | 908 VariableProxy* proxy = expression()->AsVariableProxy(); |
913 if (proxy != NULL) { | 909 if (proxy != NULL) { |
914 if (is_possibly_eval()) { | 910 if (is_possibly_eval()) { |
915 return POSSIBLY_EVAL_CALL; | 911 return POSSIBLY_EVAL_CALL; |
916 } else if (proxy->var()->IsUnallocatedOrGlobalSlot()) { | 912 } else if (proxy->var()->IsUnallocated()) { |
917 return GLOBAL_CALL; | 913 return GLOBAL_CALL; |
918 } else if (proxy->var()->IsLookupSlot()) { | 914 } else if (proxy->var()->IsLookupSlot()) { |
919 return LOOKUP_SLOT_CALL; | 915 return LOOKUP_SLOT_CALL; |
920 } | 916 } |
921 } | 917 } |
922 | 918 |
923 if (expression()->IsSuperCallReference()) return SUPER_CALL; | 919 if (expression()->IsSuperCallReference()) return SUPER_CALL; |
924 | 920 |
925 Property* property = expression()->AsProperty(); | 921 Property* property = expression()->AsProperty(); |
926 if (property != nullptr) { | 922 if (property != nullptr) { |
(...skipping 25 matching lines...) Expand all Loading... |
952 // static | 948 // static |
953 bool Literal::Match(void* literal1, void* literal2) { | 949 bool Literal::Match(void* literal1, void* literal2) { |
954 const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); | 950 const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); |
955 const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); | 951 const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); |
956 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) || | 952 return (x->IsString() && y->IsString() && x->AsString() == y->AsString()) || |
957 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); | 953 (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); |
958 } | 954 } |
959 | 955 |
960 } // namespace internal | 956 } // namespace internal |
961 } // namespace v8 | 957 } // namespace v8 |
OLD | NEW |