| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 | 73 |
| 74 VariableProxy::VariableProxy(Handle<String> name, | 74 VariableProxy::VariableProxy(Handle<String> name, |
| 75 bool is_this, | 75 bool is_this, |
| 76 bool inside_with) | 76 bool inside_with) |
| 77 : name_(name), | 77 : name_(name), |
| 78 var_(NULL), | 78 var_(NULL), |
| 79 is_this_(is_this), | 79 is_this_(is_this), |
| 80 inside_with_(inside_with), | 80 inside_with_(inside_with), |
| 81 is_trivial_(false), | 81 is_trivial_(false), |
| 82 reaching_definitions_(NULL) { | 82 reaching_definitions_(NULL), |
| 83 is_primitive_(false) { |
| 83 // names must be canonicalized for fast equality checks | 84 // names must be canonicalized for fast equality checks |
| 84 ASSERT(name->IsSymbol()); | 85 ASSERT(name->IsSymbol()); |
| 85 } | 86 } |
| 86 | 87 |
| 87 | 88 |
| 88 VariableProxy::VariableProxy(bool is_this) | 89 VariableProxy::VariableProxy(bool is_this) |
| 89 : is_this_(is_this), | 90 : is_this_(is_this), |
| 90 reaching_definitions_(NULL) { | 91 reaching_definitions_(NULL), |
| 92 is_primitive_(false) { |
| 91 } | 93 } |
| 92 | 94 |
| 93 | 95 |
| 94 void VariableProxy::BindTo(Variable* var) { | 96 void VariableProxy::BindTo(Variable* var) { |
| 95 ASSERT(var_ == NULL); // must be bound only once | 97 ASSERT(var_ == NULL); // must be bound only once |
| 96 ASSERT(var != NULL); // must bind | 98 ASSERT(var != NULL); // must bind |
| 97 ASSERT((is_this() && var->is_this()) || name_.is_identical_to(var->name())); | 99 ASSERT((is_this() && var->is_this()) || name_.is_identical_to(var->name())); |
| 98 // Ideally CONST-ness should match. However, this is very hard to achieve | 100 // Ideally CONST-ness should match. However, this is very hard to achieve |
| 99 // because we don't know the exact semantics of conflicting (const and | 101 // because we don't know the exact semantics of conflicting (const and |
| 100 // non-const) multiple variable declarations, const vars introduced via | 102 // non-const) multiple variable declarations, const vars introduced via |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 bool RegExpLiteral::IsPrimitive() { return false; } | 513 bool RegExpLiteral::IsPrimitive() { return false; } |
| 512 bool ObjectLiteral::IsPrimitive() { return false; } | 514 bool ObjectLiteral::IsPrimitive() { return false; } |
| 513 bool ArrayLiteral::IsPrimitive() { return false; } | 515 bool ArrayLiteral::IsPrimitive() { return false; } |
| 514 bool CatchExtensionObject::IsPrimitive() { return false; } | 516 bool CatchExtensionObject::IsPrimitive() { return false; } |
| 515 bool CallNew::IsPrimitive() { return false; } | 517 bool CallNew::IsPrimitive() { return false; } |
| 516 bool ThisFunction::IsPrimitive() { return false; } | 518 bool ThisFunction::IsPrimitive() { return false; } |
| 517 | 519 |
| 518 | 520 |
| 519 // The following expression types are not always primitive because we do not | 521 // The following expression types are not always primitive because we do not |
| 520 // have enough information to conclude that they are. | 522 // have enough information to conclude that they are. |
| 521 bool VariableProxy::IsPrimitive() { return false; } | |
| 522 bool Property::IsPrimitive() { return false; } | 523 bool Property::IsPrimitive() { return false; } |
| 523 bool Call::IsPrimitive() { return false; } | 524 bool Call::IsPrimitive() { return false; } |
| 524 bool CallRuntime::IsPrimitive() { return false; } | 525 bool CallRuntime::IsPrimitive() { return false; } |
| 525 | 526 |
| 526 | 527 |
| 528 // A variable use is not primitive unless the primitive-type analysis |
| 529 // determines otherwise. |
| 530 bool VariableProxy::IsPrimitive() { |
| 531 ASSERT(!is_primitive_ || (var() != NULL && var()->IsStackAllocated())); |
| 532 return is_primitive_; |
| 533 } |
| 534 |
| 527 // The value of a conditional is the value of one of the alternatives. It's | 535 // The value of a conditional is the value of one of the alternatives. It's |
| 528 // always primitive if both alternatives are always primitive. | 536 // always primitive if both alternatives are always primitive. |
| 529 bool Conditional::IsPrimitive() { | 537 bool Conditional::IsPrimitive() { |
| 530 return then_expression()->IsPrimitive() && else_expression()->IsPrimitive(); | 538 return then_expression()->IsPrimitive() && else_expression()->IsPrimitive(); |
| 531 } | 539 } |
| 532 | 540 |
| 533 | 541 |
| 534 // A literal is primitive when it is not a JSObject. | 542 // A literal is primitive when it is not a JSObject. |
| 535 bool Literal::IsPrimitive() { return !handle()->IsJSObject(); } | 543 bool Literal::IsPrimitive() { return !handle()->IsJSObject(); } |
| 536 | 544 |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 SetStackOverflow(); | 978 SetStackOverflow(); |
| 971 } | 979 } |
| 972 | 980 |
| 973 | 981 |
| 974 void CopyAstVisitor::VisitDeclaration(Declaration* decl) { | 982 void CopyAstVisitor::VisitDeclaration(Declaration* decl) { |
| 975 UNREACHABLE(); | 983 UNREACHABLE(); |
| 976 } | 984 } |
| 977 | 985 |
| 978 | 986 |
| 979 } } // namespace v8::internal | 987 } } // namespace v8::internal |
| OLD | NEW |