| Index: src/ast.h
|
| diff --git a/src/ast.h b/src/ast.h
|
| index b92f2db142bcc269c12dde4d8ae4d426b7790ee7..23df48b8b1e09a00ee434be3da2f4d2340559d26 100644
|
| --- a/src/ast.h
|
| +++ b/src/ast.h
|
| @@ -169,9 +169,11 @@ class AstNode: public ZoneObject {
|
| static void ResetIds() { Isolate::Current()->set_ast_node_id(0); }
|
|
|
| protected:
|
| - static unsigned GetNextId() { return ReserveIdRange(1); }
|
| - static unsigned ReserveIdRange(int n) {
|
| - Isolate* isolate = Isolate::Current();
|
| + static unsigned GetNextId(Isolate* isolate) {
|
| + return ReserveIdRange(isolate, 1);
|
| + }
|
| +
|
| + static unsigned ReserveIdRange(Isolate* isolate, int n) {
|
| unsigned tmp = isolate->ast_node_id();
|
| isolate->set_ast_node_id(tmp + n);
|
| return tmp;
|
| @@ -219,7 +221,9 @@ class Expression: public AstNode {
|
| kTest
|
| };
|
|
|
| - Expression() : id_(GetNextId()), test_id_(GetNextId()) {}
|
| + explicit Expression(Isolate* isolate)
|
| + : id_(GetNextId(isolate)),
|
| + test_id_(GetNextId(isolate)) {}
|
|
|
| virtual int position() const {
|
| UNREACHABLE();
|
| @@ -286,6 +290,7 @@ class Expression: public AstNode {
|
| */
|
| class ValidLeftHandSideSentinel: public Expression {
|
| public:
|
| + explicit ValidLeftHandSideSentinel(Isolate* isolate) : Expression(isolate) {}
|
| virtual bool IsValidLeftHandSide() { return true; }
|
| virtual void Accept(AstVisitor* v) { UNREACHABLE(); }
|
| virtual bool IsInlineable() const;
|
| @@ -317,7 +322,7 @@ class BreakableStatement: public Statement {
|
| int ExitId() const { return exit_id_; }
|
|
|
| protected:
|
| - inline BreakableStatement(ZoneStringList* labels, Type type);
|
| + BreakableStatement(Isolate* isolate, ZoneStringList* labels, Type type);
|
|
|
| private:
|
| ZoneStringList* labels_;
|
| @@ -330,7 +335,10 @@ class BreakableStatement: public Statement {
|
|
|
| class Block: public BreakableStatement {
|
| public:
|
| - inline Block(ZoneStringList* labels, int capacity, bool is_initializer_block);
|
| + inline Block(Isolate* isolate,
|
| + ZoneStringList* labels,
|
| + int capacity,
|
| + bool is_initializer_block);
|
|
|
| DECLARE_NODE_TYPE(Block)
|
|
|
| @@ -398,7 +406,7 @@ class IterationStatement: public BreakableStatement {
|
| Label* continue_target() { return &continue_target_; }
|
|
|
| protected:
|
| - explicit inline IterationStatement(ZoneStringList* labels);
|
| + inline IterationStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| void Initialize(Statement* body) {
|
| body_ = body;
|
| @@ -413,7 +421,7 @@ class IterationStatement: public BreakableStatement {
|
|
|
| class DoWhileStatement: public IterationStatement {
|
| public:
|
| - explicit inline DoWhileStatement(ZoneStringList* labels);
|
| + inline DoWhileStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| DECLARE_NODE_TYPE(DoWhileStatement)
|
|
|
| @@ -446,7 +454,7 @@ class DoWhileStatement: public IterationStatement {
|
|
|
| class WhileStatement: public IterationStatement {
|
| public:
|
| - explicit inline WhileStatement(ZoneStringList* labels);
|
| + inline WhileStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| DECLARE_NODE_TYPE(WhileStatement)
|
|
|
| @@ -479,7 +487,7 @@ class WhileStatement: public IterationStatement {
|
|
|
| class ForStatement: public IterationStatement {
|
| public:
|
| - explicit inline ForStatement(ZoneStringList* labels);
|
| + inline ForStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| DECLARE_NODE_TYPE(ForStatement)
|
|
|
| @@ -528,7 +536,7 @@ class ForStatement: public IterationStatement {
|
|
|
| class ForInStatement: public IterationStatement {
|
| public:
|
| - explicit inline ForInStatement(ZoneStringList* labels);
|
| + inline ForInStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| DECLARE_NODE_TYPE(ForInStatement)
|
|
|
| @@ -645,7 +653,10 @@ class ExitContextStatement: public Statement {
|
|
|
| class CaseClause: public ZoneObject {
|
| public:
|
| - CaseClause(Expression* label, ZoneList<Statement*>* statements, int pos);
|
| + CaseClause(Isolate* isolate,
|
| + Expression* label,
|
| + ZoneList<Statement*>* statements,
|
| + int pos);
|
|
|
| bool is_default() const { return label_ == NULL; }
|
| Expression* label() const {
|
| @@ -680,7 +691,7 @@ class CaseClause: public ZoneObject {
|
|
|
| class SwitchStatement: public BreakableStatement {
|
| public:
|
| - explicit inline SwitchStatement(ZoneStringList* labels);
|
| + inline SwitchStatement(Isolate* isolate, ZoneStringList* labels);
|
|
|
| DECLARE_NODE_TYPE(SwitchStatement)
|
|
|
| @@ -706,15 +717,16 @@ class SwitchStatement: public BreakableStatement {
|
| // given if-statement has a then- or an else-part containing code.
|
| class IfStatement: public Statement {
|
| public:
|
| - IfStatement(Expression* condition,
|
| + IfStatement(Isolate* isolate,
|
| + Expression* condition,
|
| Statement* then_statement,
|
| Statement* else_statement)
|
| : condition_(condition),
|
| then_statement_(then_statement),
|
| else_statement_(else_statement),
|
| - if_id_(GetNextId()),
|
| - then_id_(GetNextId()),
|
| - else_id_(GetNextId()) {
|
| + if_id_(GetNextId(isolate)),
|
| + then_id_(GetNextId(isolate)),
|
| + else_id_(GetNextId(isolate)) {
|
| }
|
|
|
| DECLARE_NODE_TYPE(IfStatement)
|
| @@ -843,7 +855,8 @@ class EmptyStatement: public Statement {
|
|
|
| class Literal: public Expression {
|
| public:
|
| - explicit Literal(Handle<Object> handle) : handle_(handle) { }
|
| + Literal(Isolate* isolate, Handle<Object> handle)
|
| + : Expression(isolate), handle_(handle) { }
|
|
|
| DECLARE_NODE_TYPE(Literal)
|
|
|
| @@ -896,8 +909,14 @@ class Literal: public Expression {
|
| // Base class for literals that needs space in the corresponding JSFunction.
|
| class MaterializedLiteral: public Expression {
|
| public:
|
| - explicit MaterializedLiteral(int literal_index, bool is_simple, int depth)
|
| - : literal_index_(literal_index), is_simple_(is_simple), depth_(depth) {}
|
| + MaterializedLiteral(Isolate* isolate,
|
| + int literal_index,
|
| + bool is_simple,
|
| + int depth)
|
| + : Expression(isolate),
|
| + literal_index_(literal_index),
|
| + is_simple_(is_simple),
|
| + depth_(depth) {}
|
|
|
| virtual MaterializedLiteral* AsMaterializedLiteral() { return this; }
|
|
|
| @@ -953,14 +972,15 @@ class ObjectLiteral: public MaterializedLiteral {
|
| bool emit_store_;
|
| };
|
|
|
| - ObjectLiteral(Handle<FixedArray> constant_properties,
|
| + ObjectLiteral(Isolate* isolate,
|
| + Handle<FixedArray> constant_properties,
|
| ZoneList<Property*>* properties,
|
| int literal_index,
|
| bool is_simple,
|
| bool fast_elements,
|
| int depth,
|
| bool has_function)
|
| - : MaterializedLiteral(literal_index, is_simple, depth),
|
| + : MaterializedLiteral(isolate, literal_index, is_simple, depth),
|
| constant_properties_(constant_properties),
|
| properties_(properties),
|
| fast_elements_(fast_elements),
|
| @@ -999,10 +1019,11 @@ class ObjectLiteral: public MaterializedLiteral {
|
| // Node for capturing a regexp literal.
|
| class RegExpLiteral: public MaterializedLiteral {
|
| public:
|
| - RegExpLiteral(Handle<String> pattern,
|
| + RegExpLiteral(Isolate* isolate,
|
| + Handle<String> pattern,
|
| Handle<String> flags,
|
| int literal_index)
|
| - : MaterializedLiteral(literal_index, false, 1),
|
| + : MaterializedLiteral(isolate, literal_index, false, 1),
|
| pattern_(pattern),
|
| flags_(flags) {}
|
|
|
| @@ -1020,15 +1041,16 @@ class RegExpLiteral: public MaterializedLiteral {
|
| // for minimizing the work when constructing it at runtime.
|
| class ArrayLiteral: public MaterializedLiteral {
|
| public:
|
| - ArrayLiteral(Handle<FixedArray> constant_elements,
|
| + ArrayLiteral(Isolate* isolate,
|
| + Handle<FixedArray> constant_elements,
|
| ZoneList<Expression*>* values,
|
| int literal_index,
|
| bool is_simple,
|
| int depth)
|
| - : MaterializedLiteral(literal_index, is_simple, depth),
|
| + : MaterializedLiteral(isolate, literal_index, is_simple, depth),
|
| constant_elements_(constant_elements),
|
| values_(values),
|
| - first_element_id_(ReserveIdRange(values->length())) {}
|
| + first_element_id_(ReserveIdRange(isolate, values->length())) {}
|
|
|
| DECLARE_NODE_TYPE(ArrayLiteral)
|
|
|
| @@ -1047,7 +1069,7 @@ class ArrayLiteral: public MaterializedLiteral {
|
|
|
| class VariableProxy: public Expression {
|
| public:
|
| - explicit VariableProxy(Variable* var);
|
| + VariableProxy(Isolate* isolate, Variable* var);
|
|
|
| DECLARE_NODE_TYPE(VariableProxy)
|
|
|
| @@ -1094,11 +1116,12 @@ class VariableProxy: public Expression {
|
| bool is_trivial_;
|
| int position_;
|
|
|
| - VariableProxy(Handle<String> name,
|
| + VariableProxy(Isolate* isolate,
|
| + Handle<String> name,
|
| bool is_this,
|
| bool inside_with,
|
| int position = RelocInfo::kNoPosition);
|
| - explicit VariableProxy(bool is_this);
|
| + VariableProxy(Isolate* isolate, bool is_this);
|
|
|
| friend class Scope;
|
| };
|
| @@ -1109,7 +1132,8 @@ class VariableProxySentinel: public VariableProxy {
|
| virtual bool IsValidLeftHandSide() { return !is_this(); }
|
|
|
| private:
|
| - explicit VariableProxySentinel(bool is_this) : VariableProxy(is_this) { }
|
| + VariableProxySentinel(Isolate* isolate, bool is_this)
|
| + : VariableProxy(isolate, is_this) { }
|
|
|
| friend class AstSentinels;
|
| };
|
| @@ -1139,8 +1163,8 @@ class Slot: public Expression {
|
| LOOKUP
|
| };
|
|
|
| - Slot(Variable* var, Type type, int index)
|
| - : var_(var), type_(type), index_(index) {
|
| + Slot(Isolate* isolate, Variable* var, Type type, int index)
|
| + : Expression(isolate), var_(var), type_(type), index_(index) {
|
| ASSERT(var != NULL);
|
| }
|
|
|
| @@ -1171,8 +1195,13 @@ class Property: public Expression {
|
| // properties should use the global object as receiver, not the base object
|
| // of the resolved Reference.
|
| enum Type { NORMAL, SYNTHETIC };
|
| - Property(Expression* obj, Expression* key, int pos, Type type = NORMAL)
|
| - : obj_(obj),
|
| + Property(Isolate* isolate,
|
| + Expression* obj,
|
| + Expression* key,
|
| + int pos,
|
| + Type type = NORMAL)
|
| + : Expression(isolate),
|
| + obj_(obj),
|
| key_(key),
|
| pos_(pos),
|
| type_(type),
|
| @@ -1224,14 +1253,18 @@ class Property: public Expression {
|
|
|
| class Call: public Expression {
|
| public:
|
| - Call(Expression* expression, ZoneList<Expression*>* arguments, int pos)
|
| - : expression_(expression),
|
| + Call(Isolate* isolate,
|
| + Expression* expression,
|
| + ZoneList<Expression*>* arguments,
|
| + int pos)
|
| + : Expression(isolate),
|
| + expression_(expression),
|
| arguments_(arguments),
|
| pos_(pos),
|
| is_monomorphic_(false),
|
| check_type_(RECEIVER_MAP_CHECK),
|
| receiver_types_(NULL),
|
| - return_id_(GetNextId()) {
|
| + return_id_(GetNextId(isolate)) {
|
| }
|
|
|
| DECLARE_NODE_TYPE(Call)
|
| @@ -1310,8 +1343,14 @@ class AstSentinels {
|
|
|
| class CallNew: public Expression {
|
| public:
|
| - CallNew(Expression* expression, ZoneList<Expression*>* arguments, int pos)
|
| - : expression_(expression), arguments_(arguments), pos_(pos) { }
|
| + CallNew(Isolate* isolate,
|
| + Expression* expression,
|
| + ZoneList<Expression*>* arguments,
|
| + int pos)
|
| + : Expression(isolate),
|
| + expression_(expression),
|
| + arguments_(arguments),
|
| + pos_(pos) { }
|
|
|
| DECLARE_NODE_TYPE(CallNew)
|
|
|
| @@ -1334,10 +1373,14 @@ class CallNew: public Expression {
|
| // implemented in JavaScript (see "v8natives.js").
|
| class CallRuntime: public Expression {
|
| public:
|
| - CallRuntime(Handle<String> name,
|
| + CallRuntime(Isolate* isolate,
|
| + Handle<String> name,
|
| const Runtime::Function* function,
|
| ZoneList<Expression*>* arguments)
|
| - : name_(name), function_(function), arguments_(arguments) { }
|
| + : Expression(isolate),
|
| + name_(name),
|
| + function_(function),
|
| + arguments_(arguments) { }
|
|
|
| DECLARE_NODE_TYPE(CallRuntime)
|
|
|
| @@ -1357,8 +1400,11 @@ class CallRuntime: public Expression {
|
|
|
| class UnaryOperation: public Expression {
|
| public:
|
| - UnaryOperation(Token::Value op, Expression* expression, int pos)
|
| - : op_(op), expression_(expression), pos_(pos) {
|
| + UnaryOperation(Isolate* isolate,
|
| + Token::Value op,
|
| + Expression* expression,
|
| + int pos)
|
| + : Expression(isolate), op_(op), expression_(expression), pos_(pos) {
|
| ASSERT(Token::IsUnaryOp(op));
|
| }
|
|
|
| @@ -1381,14 +1427,15 @@ class UnaryOperation: public Expression {
|
|
|
| class BinaryOperation: public Expression {
|
| public:
|
| - BinaryOperation(Token::Value op,
|
| + BinaryOperation(Isolate* isolate,
|
| + Token::Value op,
|
| Expression* left,
|
| Expression* right,
|
| int pos)
|
| - : op_(op), left_(left), right_(right), pos_(pos) {
|
| + : Expression(isolate), op_(op), left_(left), right_(right), pos_(pos) {
|
| ASSERT(Token::IsBinaryOp(op));
|
| right_id_ = (op == Token::AND || op == Token::OR)
|
| - ? static_cast<int>(GetNextId())
|
| + ? static_cast<int>(GetNextId(isolate))
|
| : AstNode::kNoNumber;
|
| }
|
|
|
| @@ -1419,13 +1466,18 @@ class BinaryOperation: public Expression {
|
|
|
| class CountOperation: public Expression {
|
| public:
|
| - CountOperation(Token::Value op, bool is_prefix, Expression* expr, int pos)
|
| - : op_(op),
|
| + CountOperation(Isolate* isolate,
|
| + Token::Value op,
|
| + bool is_prefix,
|
| + Expression* expr,
|
| + int pos)
|
| + : Expression(isolate),
|
| + op_(op),
|
| is_prefix_(is_prefix),
|
| expression_(expr),
|
| pos_(pos),
|
| - assignment_id_(GetNextId()),
|
| - count_id_(GetNextId()),
|
| + assignment_id_(GetNextId(isolate)),
|
| + count_id_(GetNextId(isolate)),
|
| receiver_types_(NULL) { }
|
|
|
| DECLARE_NODE_TYPE(CountOperation)
|
| @@ -1471,11 +1523,17 @@ class CountOperation: public Expression {
|
|
|
| class CompareOperation: public Expression {
|
| public:
|
| - CompareOperation(Token::Value op,
|
| + CompareOperation(Isolate* isolate,
|
| + Token::Value op,
|
| Expression* left,
|
| Expression* right,
|
| int pos)
|
| - : op_(op), left_(left), right_(right), pos_(pos), compare_type_(NONE) {
|
| + : Expression(isolate),
|
| + op_(op),
|
| + left_(left),
|
| + right_(right),
|
| + pos_(pos),
|
| + compare_type_(NONE) {
|
| ASSERT(Token::IsCompareOp(op));
|
| }
|
|
|
| @@ -1510,8 +1568,8 @@ class CompareOperation: public Expression {
|
|
|
| class CompareToNull: public Expression {
|
| public:
|
| - CompareToNull(bool is_strict, Expression* expression)
|
| - : is_strict_(is_strict), expression_(expression) { }
|
| + CompareToNull(Isolate* isolate, bool is_strict, Expression* expression)
|
| + : Expression(isolate), is_strict_(is_strict), expression_(expression) { }
|
|
|
| DECLARE_NODE_TYPE(CompareToNull)
|
|
|
| @@ -1529,18 +1587,20 @@ class CompareToNull: public Expression {
|
|
|
| class Conditional: public Expression {
|
| public:
|
| - Conditional(Expression* condition,
|
| + Conditional(Isolate* isolate,
|
| + Expression* condition,
|
| Expression* then_expression,
|
| Expression* else_expression,
|
| int then_expression_position,
|
| int else_expression_position)
|
| - : condition_(condition),
|
| + : Expression(isolate),
|
| + condition_(condition),
|
| then_expression_(then_expression),
|
| else_expression_(else_expression),
|
| then_expression_position_(then_expression_position),
|
| else_expression_position_(else_expression_position),
|
| - then_id_(GetNextId()),
|
| - else_id_(GetNextId()) {
|
| + then_id_(GetNextId(isolate)),
|
| + else_id_(GetNextId(isolate)) {
|
| }
|
|
|
| DECLARE_NODE_TYPE(Conditional)
|
| @@ -1570,7 +1630,11 @@ class Conditional: public Expression {
|
|
|
| class Assignment: public Expression {
|
| public:
|
| - Assignment(Token::Value op, Expression* target, Expression* value, int pos);
|
| + Assignment(Isolate* isolate,
|
| + Token::Value op,
|
| + Expression* target,
|
| + Expression* value,
|
| + int pos);
|
|
|
| DECLARE_NODE_TYPE(Assignment)
|
|
|
| @@ -1630,8 +1694,8 @@ class Assignment: public Expression {
|
|
|
| class Throw: public Expression {
|
| public:
|
| - Throw(Expression* exception, int pos)
|
| - : exception_(exception), pos_(pos) {}
|
| + Throw(Isolate* isolate, Expression* exception, int pos)
|
| + : Expression(isolate), exception_(exception), pos_(pos) {}
|
|
|
| DECLARE_NODE_TYPE(Throw)
|
|
|
| @@ -1647,7 +1711,8 @@ class Throw: public Expression {
|
|
|
| class FunctionLiteral: public Expression {
|
| public:
|
| - FunctionLiteral(Handle<String> name,
|
| + FunctionLiteral(Isolate* isolate,
|
| + Handle<String> name,
|
| Scope* scope,
|
| ZoneList<Statement*>* body,
|
| int materialized_literal_count,
|
| @@ -1659,7 +1724,8 @@ class FunctionLiteral: public Expression {
|
| int end_position,
|
| bool is_expression,
|
| bool has_duplicate_parameters)
|
| - : name_(name),
|
| + : Expression(isolate),
|
| + name_(name),
|
| scope_(scope),
|
| body_(body),
|
| materialized_literal_count_(materialized_literal_count),
|
| @@ -1738,9 +1804,10 @@ class FunctionLiteral: public Expression {
|
|
|
| class SharedFunctionInfoLiteral: public Expression {
|
| public:
|
| - explicit SharedFunctionInfoLiteral(
|
| + SharedFunctionInfoLiteral(
|
| + Isolate* isolate,
|
| Handle<SharedFunctionInfo> shared_function_info)
|
| - : shared_function_info_(shared_function_info) { }
|
| + : Expression(isolate), shared_function_info_(shared_function_info) { }
|
|
|
| DECLARE_NODE_TYPE(SharedFunctionInfoLiteral)
|
|
|
| @@ -1756,6 +1823,7 @@ class SharedFunctionInfoLiteral: public Expression {
|
|
|
| class ThisFunction: public Expression {
|
| public:
|
| + explicit ThisFunction(Isolate* isolate) : Expression(isolate) {}
|
| DECLARE_NODE_TYPE(ThisFunction)
|
| virtual bool IsInlineable() const;
|
| };
|
|
|