| Index: src/ast.h
|
| ===================================================================
|
| --- src/ast.h (revision 9837)
|
| +++ src/ast.h (working copy)
|
| @@ -118,7 +118,6 @@
|
| #define DECLARE_NODE_TYPE(type) \
|
| virtual void Accept(AstVisitor* v); \
|
| virtual AstNode::Type node_type() const { return AstNode::k##type; } \
|
| - virtual type* As##type() { return this; }
|
|
|
|
|
| class AstNode: public ZoneObject {
|
| @@ -153,7 +152,8 @@
|
|
|
| // Type testing & conversion functions overridden by concrete subclasses.
|
| #define DECLARE_NODE_FUNCTIONS(type) \
|
| - virtual type* As##type() { return NULL; }
|
| + bool Is##type() { return node_type() == AstNode::k##type; } \
|
| + type* As##type() { return Is##type() ? reinterpret_cast<type*>(this) : NULL; }
|
| AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
|
| #undef DECLARE_NODE_FUNCTIONS
|
|
|
| @@ -196,9 +196,6 @@
|
|
|
| virtual Statement* AsStatement() { return this; }
|
|
|
| - virtual Assignment* StatementAsSimpleAssignment() { return NULL; }
|
| - virtual CountOperation* StatementAsCountOperation() { return NULL; }
|
| -
|
| bool IsEmpty() { return AsEmptyStatement() != NULL; }
|
|
|
| void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; }
|
| @@ -264,7 +261,6 @@
|
|
|
| virtual Expression* AsExpression() { return this; }
|
|
|
| - virtual bool IsTrivial() { return false; }
|
| virtual bool IsValidLeftHandSide() { return false; }
|
|
|
| // Helpers for ToBoolean conversion.
|
| @@ -276,33 +272,24 @@
|
| // names because [] for string objects is handled only by keyed ICs.
|
| virtual bool IsPropertyName() { return false; }
|
|
|
| - // Mark the expression as being compiled as an expression
|
| - // statement. This is used to transform postfix increments to
|
| - // (faster) prefix increments.
|
| - virtual void MarkAsStatement() { /* do nothing */ }
|
| -
|
| // True iff the result can be safely overwritten (to avoid allocation).
|
| // False for operations that can return one of their operands.
|
| virtual bool ResultOverwriteAllowed() { return false; }
|
|
|
| // True iff the expression is a literal represented as a smi.
|
| - virtual bool IsSmiLiteral() { return false; }
|
| + bool IsSmiLiteral();
|
|
|
| // True iff the expression is a string literal.
|
| - virtual bool IsStringLiteral() { return false; }
|
| + bool IsStringLiteral();
|
|
|
| // True iff the expression is the null literal.
|
| - virtual bool IsNullLiteral() { return false; }
|
| + bool IsNullLiteral();
|
|
|
| // Type feedback information for assignments and properties.
|
| virtual bool IsMonomorphic() {
|
| UNREACHABLE();
|
| return false;
|
| }
|
| - virtual bool IsArrayLength() {
|
| - UNREACHABLE();
|
| - return false;
|
| - }
|
| virtual SmallMapList* GetReceiverTypes() {
|
| UNREACHABLE();
|
| return NULL;
|
| @@ -368,16 +355,6 @@
|
|
|
| DECLARE_NODE_TYPE(Block)
|
|
|
| - virtual Assignment* StatementAsSimpleAssignment() {
|
| - if (statements_.length() != 1) return NULL;
|
| - return statements_[0]->StatementAsSimpleAssignment();
|
| - }
|
| -
|
| - virtual CountOperation* StatementAsCountOperation() {
|
| - if (statements_.length() != 1) return NULL;
|
| - return statements_[0]->StatementAsCountOperation();
|
| - }
|
| -
|
| virtual bool IsInlineable() const;
|
|
|
| void AddStatement(Statement* statement) { statements_.Add(statement); }
|
| @@ -612,9 +589,6 @@
|
|
|
| virtual bool IsInlineable() const;
|
|
|
| - virtual Assignment* StatementAsSimpleAssignment();
|
| - virtual CountOperation* StatementAsCountOperation();
|
| -
|
| void set_expression(Expression* e) { expression_ = e; }
|
| Expression* expression() const { return expression_; }
|
|
|
| @@ -895,11 +869,6 @@
|
|
|
| DECLARE_NODE_TYPE(Literal)
|
|
|
| - virtual bool IsTrivial() { return true; }
|
| - virtual bool IsSmiLiteral() { return handle_->IsSmi(); }
|
| - virtual bool IsStringLiteral() { return handle_->IsString(); }
|
| - virtual bool IsNullLiteral() { return handle_->IsNull(); }
|
| -
|
| // Check if this literal is identical to the other literal.
|
| bool IsIdenticalTo(const Literal* other) const {
|
| return handle_.is_identical_to(other->handle_);
|
| @@ -1114,12 +1083,6 @@
|
| return var_ == NULL ? true : var_->IsValidLeftHandSide();
|
| }
|
|
|
| - virtual bool IsTrivial() {
|
| - // Reading from a mutable variable is a side effect, but the
|
| - // variable for 'this' is immutable.
|
| - return is_this_ || is_trivial_;
|
| - }
|
| -
|
| virtual bool IsInlineable() const;
|
|
|
| bool IsVariable(Handle<String> n) {
|
| @@ -1187,7 +1150,7 @@
|
| void RecordTypeFeedback(TypeFeedbackOracle* oracle);
|
| virtual bool IsMonomorphic() { return is_monomorphic_; }
|
| virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
|
| - virtual bool IsArrayLength() { return is_array_length_; }
|
| + bool IsArrayLength() { return is_array_length_; }
|
|
|
| private:
|
| Expression* obj_;
|
|
|