| Index: src/ast.h
|
| diff --git a/src/ast.h b/src/ast.h
|
| index c63090687b96a912975b39a69522a647d7d8a458..44332dc7691a35d15e63b5224dc877060e354c74 100644
|
| --- a/src/ast.h
|
| +++ b/src/ast.h
|
| @@ -206,12 +206,12 @@ class AstNode: public ZoneObject {
|
| return zone->New(static_cast<int>(size));
|
| }
|
|
|
| - AstNode() {}
|
| -
|
| + explicit AstNode(int position): position_(position) {}
|
| virtual ~AstNode() {}
|
|
|
| virtual void Accept(AstVisitor* v) = 0;
|
| virtual NodeType node_type() const = 0;
|
| + int position() const { return position_; }
|
|
|
| // Type testing & conversion functions overridden by concrete subclasses.
|
| #define DECLARE_NODE_FUNCTIONS(type) \
|
| @@ -248,21 +248,18 @@ class AstNode: public ZoneObject {
|
| void* operator new(size_t size);
|
|
|
| friend class CaseClause; // Generates AST IDs.
|
| +
|
| + int position_;
|
| };
|
|
|
|
|
| class Statement : public AstNode {
|
| public:
|
| - Statement() : statement_pos_(RelocInfo::kNoPosition) {}
|
| + // TODO(rossberg)
|
| + explicit Statement(int position) : AstNode(position) {}
|
|
|
| bool IsEmpty() { return AsEmptyStatement() != NULL; }
|
| virtual bool IsJump() const { return false; }
|
| -
|
| - void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; }
|
| - int statement_pos() const { return statement_pos_; }
|
| -
|
| - private:
|
| - int statement_pos_;
|
| };
|
|
|
|
|
| @@ -329,11 +326,6 @@ class Expression : public AstNode {
|
| kTest
|
| };
|
|
|
| - virtual int position() const {
|
| - UNREACHABLE();
|
| - return 0;
|
| - }
|
| -
|
| virtual bool IsValidLeftHandSide() { return false; }
|
|
|
| // Helpers for ToBoolean conversion.
|
| @@ -387,8 +379,9 @@ class Expression : public AstNode {
|
| TypeFeedbackId test_id() const { return test_id_; }
|
|
|
| protected:
|
| - explicit Expression(Isolate* isolate)
|
| - : bounds_(Bounds::Unbounded(isolate)),
|
| + Expression(Isolate* isolate, int pos)
|
| + : AstNode(pos),
|
| + bounds_(Bounds::Unbounded(isolate)),
|
| id_(GetNextId(isolate)),
|
| test_id_(GetNextId(isolate)) {}
|
| void set_to_boolean_types(byte types) { to_boolean_types_ = types; }
|
| @@ -431,8 +424,10 @@ class BreakableStatement : public Statement {
|
|
|
| protected:
|
| BreakableStatement(
|
| - Isolate* isolate, ZoneStringList* labels, BreakableType breakable_type)
|
| - : labels_(labels),
|
| + Isolate* isolate, ZoneStringList* labels,
|
| + BreakableType breakable_type, int position)
|
| + : Statement(position),
|
| + labels_(labels),
|
| breakable_type_(breakable_type),
|
| entry_id_(GetNextId(isolate)),
|
| exit_id_(GetNextId(isolate)) {
|
| @@ -473,8 +468,9 @@ class Block V8_FINAL : public BreakableStatement {
|
| ZoneStringList* labels,
|
| int capacity,
|
| bool is_initializer_block,
|
| + int pos,
|
| Zone* zone)
|
| - : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY),
|
| + : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY, pos),
|
| statements_(capacity, zone),
|
| is_initializer_block_(is_initializer_block),
|
| scope_(NULL) {
|
| @@ -498,8 +494,10 @@ class Declaration : public AstNode {
|
| protected:
|
| Declaration(VariableProxy* proxy,
|
| VariableMode mode,
|
| - Scope* scope)
|
| - : proxy_(proxy),
|
| + Scope* scope,
|
| + int pos)
|
| + : AstNode(pos),
|
| + proxy_(proxy),
|
| mode_(mode),
|
| scope_(scope) {
|
| ASSERT(IsDeclaredVariableMode(mode));
|
| @@ -525,8 +523,9 @@ class VariableDeclaration V8_FINAL : public Declaration {
|
| protected:
|
| VariableDeclaration(VariableProxy* proxy,
|
| VariableMode mode,
|
| - Scope* scope)
|
| - : Declaration(proxy, mode, scope) {
|
| + Scope* scope,
|
| + int pos)
|
| + : Declaration(proxy, mode, scope, pos) {
|
| }
|
| };
|
|
|
| @@ -545,8 +544,9 @@ class FunctionDeclaration V8_FINAL : public Declaration {
|
| FunctionDeclaration(VariableProxy* proxy,
|
| VariableMode mode,
|
| FunctionLiteral* fun,
|
| - Scope* scope)
|
| - : Declaration(proxy, mode, scope),
|
| + Scope* scope,
|
| + int pos)
|
| + : Declaration(proxy, mode, scope, pos),
|
| fun_(fun) {
|
| // At the moment there are no "const functions" in JavaScript...
|
| ASSERT(mode == VAR || mode == LET);
|
| @@ -570,8 +570,9 @@ class ModuleDeclaration V8_FINAL : public Declaration {
|
| protected:
|
| ModuleDeclaration(VariableProxy* proxy,
|
| Module* module,
|
| - Scope* scope)
|
| - : Declaration(proxy, MODULE, scope),
|
| + Scope* scope,
|
| + int pos)
|
| + : Declaration(proxy, MODULE, scope, pos),
|
| module_(module) {
|
| }
|
|
|
| @@ -592,8 +593,9 @@ class ImportDeclaration V8_FINAL : public Declaration {
|
| protected:
|
| ImportDeclaration(VariableProxy* proxy,
|
| Module* module,
|
| - Scope* scope)
|
| - : Declaration(proxy, LET, scope),
|
| + Scope* scope,
|
| + int pos)
|
| + : Declaration(proxy, LET, scope, pos),
|
| module_(module) {
|
| }
|
|
|
| @@ -611,8 +613,8 @@ class ExportDeclaration V8_FINAL : public Declaration {
|
| }
|
|
|
| protected:
|
| - ExportDeclaration(VariableProxy* proxy, Scope* scope)
|
| - : Declaration(proxy, LET, scope) {}
|
| + ExportDeclaration(VariableProxy* proxy, Scope* scope, int pos)
|
| + : Declaration(proxy, LET, scope, pos) {}
|
| };
|
|
|
|
|
| @@ -622,11 +624,13 @@ class Module : public AstNode {
|
| Block* body() const { return body_; }
|
|
|
| protected:
|
| - explicit Module(Zone* zone)
|
| - : interface_(Interface::NewModule(zone)),
|
| + Module(Zone* zone, int pos)
|
| + : AstNode(pos),
|
| + interface_(Interface::NewModule(zone)),
|
| body_(NULL) {}
|
| - explicit Module(Interface* interface, Block* body = NULL)
|
| - : interface_(interface),
|
| + Module(Interface* interface, int pos, Block* body = NULL)
|
| + : AstNode(pos),
|
| + interface_(interface),
|
| body_(body) {}
|
|
|
| private:
|
| @@ -640,7 +644,8 @@ class ModuleLiteral V8_FINAL : public Module {
|
| DECLARE_NODE_TYPE(ModuleLiteral)
|
|
|
| protected:
|
| - ModuleLiteral(Block* body, Interface* interface) : Module(interface, body) {}
|
| + ModuleLiteral(Block* body, Interface* interface, int pos)
|
| + : Module(interface, pos, body) {}
|
| };
|
|
|
|
|
| @@ -651,7 +656,7 @@ class ModuleVariable V8_FINAL : public Module {
|
| VariableProxy* proxy() const { return proxy_; }
|
|
|
| protected:
|
| - inline explicit ModuleVariable(VariableProxy* proxy);
|
| + inline ModuleVariable(VariableProxy* proxy, int pos);
|
|
|
| private:
|
| VariableProxy* proxy_;
|
| @@ -666,8 +671,8 @@ class ModulePath V8_FINAL : public Module {
|
| Handle<String> name() const { return name_; }
|
|
|
| protected:
|
| - ModulePath(Module* module, Handle<String> name, Zone* zone)
|
| - : Module(zone),
|
| + ModulePath(Module* module, Handle<String> name, Zone* zone, int pos)
|
| + : Module(zone, pos),
|
| module_(module),
|
| name_(name) {
|
| }
|
| @@ -685,8 +690,8 @@ class ModuleUrl V8_FINAL : public Module {
|
| Handle<String> url() const { return url_; }
|
|
|
| protected:
|
| - ModuleUrl(Handle<String> url, Zone* zone)
|
| - : Module(zone), url_(url) {
|
| + ModuleUrl(Handle<String> url, Zone* zone, int pos)
|
| + : Module(zone, pos), url_(url) {
|
| }
|
|
|
| private:
|
| @@ -702,8 +707,9 @@ class ModuleStatement V8_FINAL : public Statement {
|
| Block* body() const { return body_; }
|
|
|
| protected:
|
| - ModuleStatement(VariableProxy* proxy, Block* body)
|
| - : proxy_(proxy),
|
| + ModuleStatement(VariableProxy* proxy, Block* body, int pos)
|
| + : Statement(pos),
|
| + proxy_(proxy),
|
| body_(body) {
|
| }
|
|
|
| @@ -730,8 +736,8 @@ class IterationStatement : public BreakableStatement {
|
| Label* continue_target() { return &continue_target_; }
|
|
|
| protected:
|
| - IterationStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
|
| + IterationStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS, pos),
|
| body_(NULL),
|
| osr_entry_id_(GetNextId(isolate)) {
|
| }
|
| @@ -759,6 +765,7 @@ class DoWhileStatement V8_FINAL : public IterationStatement {
|
|
|
| Expression* cond() const { return cond_; }
|
|
|
| + // TODO(rossberg): get rid of this.
|
| // Position where condition expression starts. We need it to make
|
| // the loop's condition a breakable location.
|
| int condition_position() { return condition_position_; }
|
| @@ -769,8 +776,8 @@ class DoWhileStatement V8_FINAL : public IterationStatement {
|
| BailoutId BackEdgeId() const { return back_edge_id_; }
|
|
|
| protected:
|
| - DoWhileStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : IterationStatement(isolate, labels),
|
| + DoWhileStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : IterationStatement(isolate, labels, pos),
|
| cond_(NULL),
|
| condition_position_(-1),
|
| continue_id_(GetNextId(isolate)),
|
| @@ -809,8 +816,8 @@ class WhileStatement V8_FINAL : public IterationStatement {
|
| BailoutId BodyId() const { return body_id_; }
|
|
|
| protected:
|
| - WhileStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : IterationStatement(isolate, labels),
|
| + WhileStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : IterationStatement(isolate, labels, pos),
|
| cond_(NULL),
|
| may_have_function_literal_(true),
|
| body_id_(GetNextId(isolate)) {
|
| @@ -860,8 +867,8 @@ class ForStatement V8_FINAL : public IterationStatement {
|
| void set_loop_variable(Variable* var) { loop_variable_ = var; }
|
|
|
| protected:
|
| - ForStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : IterationStatement(isolate, labels),
|
| + ForStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : IterationStatement(isolate, labels, pos),
|
| init_(NULL),
|
| cond_(NULL),
|
| next_(NULL),
|
| @@ -902,8 +909,8 @@ class ForEachStatement : public IterationStatement {
|
| Expression* subject() const { return subject_; }
|
|
|
| protected:
|
| - ForEachStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : IterationStatement(isolate, labels),
|
| + ForEachStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : IterationStatement(isolate, labels, pos),
|
| each_(NULL),
|
| subject_(NULL) {
|
| }
|
| @@ -933,8 +940,8 @@ class ForInStatement V8_FINAL : public ForEachStatement {
|
| virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; }
|
|
|
| protected:
|
| - ForInStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : ForEachStatement(isolate, labels),
|
| + ForInStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : ForEachStatement(isolate, labels, pos),
|
| for_in_type_(SLOW_FOR_IN),
|
| body_id_(GetNextId(isolate)),
|
| prepare_id_(GetNextId(isolate)) {
|
| @@ -994,8 +1001,8 @@ class ForOfStatement V8_FINAL : public ForEachStatement {
|
| BailoutId BackEdgeId() const { return back_edge_id_; }
|
|
|
| protected:
|
| - ForOfStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : ForEachStatement(isolate, labels),
|
| + ForOfStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : ForEachStatement(isolate, labels, pos),
|
| assign_iterator_(NULL),
|
| next_result_(NULL),
|
| result_done_(NULL),
|
| @@ -1020,8 +1027,8 @@ class ExpressionStatement V8_FINAL : public Statement {
|
| virtual bool IsJump() const V8_OVERRIDE { return expression_->IsThrow(); }
|
|
|
| protected:
|
| - explicit ExpressionStatement(Expression* expression)
|
| - : expression_(expression) { }
|
| + ExpressionStatement(Expression* expression, int pos)
|
| + : Statement(pos), expression_(expression) { }
|
|
|
| private:
|
| Expression* expression_;
|
| @@ -1033,7 +1040,7 @@ class JumpStatement : public Statement {
|
| virtual bool IsJump() const V8_FINAL V8_OVERRIDE { return true; }
|
|
|
| protected:
|
| - JumpStatement() {}
|
| + explicit JumpStatement(int pos) : Statement(pos) {}
|
| };
|
|
|
|
|
| @@ -1044,8 +1051,8 @@ class ContinueStatement V8_FINAL : public JumpStatement {
|
| IterationStatement* target() const { return target_; }
|
|
|
| protected:
|
| - explicit ContinueStatement(IterationStatement* target)
|
| - : target_(target) { }
|
| + explicit ContinueStatement(IterationStatement* target, int pos)
|
| + : JumpStatement(pos), target_(target) { }
|
|
|
| private:
|
| IterationStatement* target_;
|
| @@ -1059,8 +1066,8 @@ class BreakStatement V8_FINAL : public JumpStatement {
|
| BreakableStatement* target() const { return target_; }
|
|
|
| protected:
|
| - explicit BreakStatement(BreakableStatement* target)
|
| - : target_(target) { }
|
| + explicit BreakStatement(BreakableStatement* target, int pos)
|
| + : JumpStatement(pos), target_(target) { }
|
|
|
| private:
|
| BreakableStatement* target_;
|
| @@ -1074,8 +1081,8 @@ class ReturnStatement V8_FINAL : public JumpStatement {
|
| Expression* expression() const { return expression_; }
|
|
|
| protected:
|
| - explicit ReturnStatement(Expression* expression)
|
| - : expression_(expression) { }
|
| + explicit ReturnStatement(Expression* expression, int pos)
|
| + : JumpStatement(pos), expression_(expression) { }
|
|
|
| private:
|
| Expression* expression_;
|
| @@ -1091,8 +1098,10 @@ class WithStatement V8_FINAL : public Statement {
|
| Statement* statement() const { return statement_; }
|
|
|
| protected:
|
| - WithStatement(Scope* scope, Expression* expression, Statement* statement)
|
| - : scope_(scope),
|
| + WithStatement(
|
| + Scope* scope, Expression* expression, Statement* statement, int pos)
|
| + : Statement(pos),
|
| + scope_(scope),
|
| expression_(expression),
|
| statement_(statement) { }
|
|
|
| @@ -1158,8 +1167,8 @@ class SwitchStatement V8_FINAL : public BreakableStatement {
|
| void set_switch_type(SwitchType switch_type) { switch_type_ = switch_type; }
|
|
|
| protected:
|
| - SwitchStatement(Isolate* isolate, ZoneStringList* labels)
|
| - : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
|
| + SwitchStatement(Isolate* isolate, ZoneStringList* labels, int pos)
|
| + : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS, pos),
|
| tag_(NULL),
|
| cases_(NULL) { }
|
|
|
| @@ -1199,8 +1208,10 @@ class IfStatement V8_FINAL : public Statement {
|
| IfStatement(Isolate* isolate,
|
| Expression* condition,
|
| Statement* then_statement,
|
| - Statement* else_statement)
|
| - : condition_(condition),
|
| + Statement* else_statement,
|
| + int pos)
|
| + : Statement(pos),
|
| + condition_(condition),
|
| then_statement_(then_statement),
|
| else_statement_(else_statement),
|
| if_id_(GetNextId(isolate)),
|
| @@ -1222,7 +1233,8 @@ class IfStatement V8_FINAL : public Statement {
|
| // stack in the compiler; this should probably be reworked.
|
| class TargetCollector V8_FINAL : public AstNode {
|
| public:
|
| - explicit TargetCollector(Zone* zone) : targets_(0, zone) { }
|
| + explicit TargetCollector(Zone* zone)
|
| + : AstNode(RelocInfo::kNoPosition), targets_(0, zone) { }
|
|
|
| // Adds a jump target to the collector. The collector stores a pointer not
|
| // a copy of the target to make binding work, so make sure not to pass in
|
| @@ -1252,8 +1264,9 @@ class TryStatement : public Statement {
|
| ZoneList<Label*>* escaping_targets() const { return escaping_targets_; }
|
|
|
| protected:
|
| - TryStatement(int index, Block* try_block)
|
| - : index_(index),
|
| + TryStatement(int index, Block* try_block, int pos)
|
| + : Statement(pos),
|
| + index_(index),
|
| try_block_(try_block),
|
| escaping_targets_(NULL) { }
|
|
|
| @@ -1279,8 +1292,9 @@ class TryCatchStatement V8_FINAL : public TryStatement {
|
| Block* try_block,
|
| Scope* scope,
|
| Variable* variable,
|
| - Block* catch_block)
|
| - : TryStatement(index, try_block),
|
| + Block* catch_block,
|
| + int pos)
|
| + : TryStatement(index, try_block, pos),
|
| scope_(scope),
|
| variable_(variable),
|
| catch_block_(catch_block) {
|
| @@ -1300,8 +1314,9 @@ class TryFinallyStatement V8_FINAL : public TryStatement {
|
| Block* finally_block() const { return finally_block_; }
|
|
|
| protected:
|
| - TryFinallyStatement(int index, Block* try_block, Block* finally_block)
|
| - : TryStatement(index, try_block),
|
| + TryFinallyStatement(
|
| + int index, Block* try_block, Block* finally_block, int pos)
|
| + : TryStatement(index, try_block, pos),
|
| finally_block_(finally_block) { }
|
|
|
| private:
|
| @@ -1314,7 +1329,7 @@ class DebuggerStatement V8_FINAL : public Statement {
|
| DECLARE_NODE_TYPE(DebuggerStatement)
|
|
|
| protected:
|
| - DebuggerStatement() {}
|
| + explicit DebuggerStatement(int pos): Statement(pos) {}
|
| };
|
|
|
|
|
| @@ -1323,7 +1338,7 @@ class EmptyStatement V8_FINAL : public Statement {
|
| DECLARE_NODE_TYPE(EmptyStatement)
|
|
|
| protected:
|
| - EmptyStatement() {}
|
| + explicit EmptyStatement(int pos): Statement(pos) {}
|
| };
|
|
|
|
|
| @@ -1380,8 +1395,9 @@ class Literal V8_FINAL : public Expression {
|
| TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); }
|
|
|
| protected:
|
| - Literal(Isolate* isolate, Handle<Object> value)
|
| - : Expression(isolate),
|
| + Literal(
|
| + Isolate* isolate, Handle<Object> value, int position)
|
| + : Expression(isolate, position),
|
| value_(value),
|
| isolate_(isolate) { }
|
|
|
| @@ -1411,8 +1427,9 @@ class MaterializedLiteral : public Expression {
|
| MaterializedLiteral(Isolate* isolate,
|
| int literal_index,
|
| bool is_simple,
|
| - int depth)
|
| - : Expression(isolate),
|
| + int depth,
|
| + int pos)
|
| + : Expression(isolate, pos),
|
| literal_index_(literal_index),
|
| is_simple_(is_simple),
|
| depth_(depth) {}
|
| @@ -1510,8 +1527,9 @@ class ObjectLiteral V8_FINAL : public MaterializedLiteral {
|
| bool fast_elements,
|
| int depth,
|
| bool may_store_doubles,
|
| - bool has_function)
|
| - : MaterializedLiteral(isolate, literal_index, is_simple, depth),
|
| + bool has_function,
|
| + int pos)
|
| + : MaterializedLiteral(isolate, literal_index, is_simple, depth, pos),
|
| constant_properties_(constant_properties),
|
| properties_(properties),
|
| fast_elements_(fast_elements),
|
| @@ -1539,8 +1557,9 @@ class RegExpLiteral V8_FINAL : public MaterializedLiteral {
|
| RegExpLiteral(Isolate* isolate,
|
| Handle<String> pattern,
|
| Handle<String> flags,
|
| - int literal_index)
|
| - : MaterializedLiteral(isolate, literal_index, false, 1),
|
| + int literal_index,
|
| + int pos)
|
| + : MaterializedLiteral(isolate, literal_index, false, 1, pos),
|
| pattern_(pattern),
|
| flags_(flags) {}
|
|
|
| @@ -1549,6 +1568,7 @@ class RegExpLiteral V8_FINAL : public MaterializedLiteral {
|
| Handle<String> flags_;
|
| };
|
|
|
| +
|
| // An array literal has a literals object that is used
|
| // for minimizing the work when constructing it at runtime.
|
| class ArrayLiteral V8_FINAL : public MaterializedLiteral {
|
| @@ -1569,8 +1589,9 @@ class ArrayLiteral V8_FINAL : public MaterializedLiteral {
|
| ZoneList<Expression*>* values,
|
| int literal_index,
|
| bool is_simple,
|
| - int depth)
|
| - : MaterializedLiteral(isolate, literal_index, is_simple, depth),
|
| + int depth,
|
| + int pos)
|
| + : MaterializedLiteral(isolate, literal_index, is_simple, depth, pos),
|
| constant_elements_(constant_elements),
|
| values_(values),
|
| first_element_id_(ReserveIdRange(isolate, values->length())) {}
|
| @@ -1603,7 +1624,6 @@ class VariableProxy V8_FINAL : public Expression {
|
| Handle<String> name() const { return name_; }
|
| Variable* var() const { return var_; }
|
| bool is_this() const { return is_this_; }
|
| - int position() const { return position_; }
|
| Interface* interface() const { return interface_; }
|
|
|
|
|
| @@ -1614,7 +1634,7 @@ class VariableProxy V8_FINAL : public Expression {
|
| void BindTo(Variable* var);
|
|
|
| protected:
|
| - VariableProxy(Isolate* isolate, Variable* var);
|
| + VariableProxy(Isolate* isolate, Variable* var, int position);
|
|
|
| VariableProxy(Isolate* isolate,
|
| Handle<String> name,
|
| @@ -1629,7 +1649,6 @@ class VariableProxy V8_FINAL : public Expression {
|
| // True if this variable proxy is being used in an assignment
|
| // or with a increment/decrement operator.
|
| bool is_lvalue_;
|
| - int position_;
|
| Interface* interface_;
|
| };
|
|
|
| @@ -1642,7 +1661,6 @@ class Property V8_FINAL : public Expression {
|
|
|
| Expression* obj() const { return obj_; }
|
| Expression* key() const { return key_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| BailoutId LoadId() const { return load_id_; }
|
|
|
| @@ -1667,10 +1685,9 @@ class Property V8_FINAL : public Expression {
|
| Expression* obj,
|
| Expression* key,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| obj_(obj),
|
| key_(key),
|
| - pos_(pos),
|
| load_id_(GetNextId(isolate)),
|
| is_monomorphic_(false),
|
| is_uninitialized_(false),
|
| @@ -1681,7 +1698,6 @@ class Property V8_FINAL : public Expression {
|
| private:
|
| Expression* obj_;
|
| Expression* key_;
|
| - int pos_;
|
| const BailoutId load_id_;
|
|
|
| SmallMapList receiver_types_;
|
| @@ -1699,7 +1715,6 @@ class Call V8_FINAL : public Expression {
|
|
|
| Expression* expression() const { return expression_; }
|
| ZoneList<Expression*>* arguments() const { return arguments_; }
|
| - virtual int position() const V8_FINAL { return pos_; }
|
|
|
| // Type feedback information.
|
| TypeFeedbackId CallFeedbackId() const { return reuse(id()); }
|
| @@ -1754,10 +1769,9 @@ class Call V8_FINAL : public Expression {
|
| Expression* expression,
|
| ZoneList<Expression*>* arguments,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| expression_(expression),
|
| arguments_(arguments),
|
| - pos_(pos),
|
| is_monomorphic_(false),
|
| check_type_(RECEIVER_MAP_CHECK),
|
| return_id_(GetNextId(isolate)) { }
|
| @@ -1765,7 +1779,6 @@ class Call V8_FINAL : public Expression {
|
| private:
|
| Expression* expression_;
|
| ZoneList<Expression*>* arguments_;
|
| - int pos_;
|
|
|
| bool is_monomorphic_;
|
| CheckType check_type_;
|
| @@ -1784,7 +1797,6 @@ class CallNew V8_FINAL : public Expression {
|
|
|
| Expression* expression() const { return expression_; }
|
| ZoneList<Expression*>* arguments() const { return arguments_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| // Type feedback information.
|
| TypeFeedbackId CallNewFeedbackId() const { return reuse(id()); }
|
| @@ -1803,10 +1815,9 @@ class CallNew V8_FINAL : public Expression {
|
| Expression* expression,
|
| ZoneList<Expression*>* arguments,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| expression_(expression),
|
| arguments_(arguments),
|
| - pos_(pos),
|
| is_monomorphic_(false),
|
| elements_kind_(GetInitialFastElementsKind()),
|
| return_id_(GetNextId(isolate)) { }
|
| @@ -1814,7 +1825,6 @@ class CallNew V8_FINAL : public Expression {
|
| private:
|
| Expression* expression_;
|
| ZoneList<Expression*>* arguments_;
|
| - int pos_;
|
|
|
| bool is_monomorphic_;
|
| Handle<JSFunction> target_;
|
| @@ -1844,8 +1854,9 @@ class CallRuntime V8_FINAL : public Expression {
|
| CallRuntime(Isolate* isolate,
|
| Handle<String> name,
|
| const Runtime::Function* function,
|
| - ZoneList<Expression*>* arguments)
|
| - : Expression(isolate),
|
| + ZoneList<Expression*>* arguments,
|
| + int pos)
|
| + : Expression(isolate, pos),
|
| name_(name),
|
| function_(function),
|
| arguments_(arguments) { }
|
| @@ -1863,7 +1874,6 @@ class UnaryOperation V8_FINAL : public Expression {
|
|
|
| Token::Value op() const { return op_; }
|
| Expression* expression() const { return expression_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| BailoutId MaterializeTrueId() { return materialize_true_id_; }
|
| BailoutId MaterializeFalseId() { return materialize_false_id_; }
|
| @@ -1876,10 +1886,9 @@ class UnaryOperation V8_FINAL : public Expression {
|
| Token::Value op,
|
| Expression* expression,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| op_(op),
|
| expression_(expression),
|
| - pos_(pos),
|
| materialize_true_id_(GetNextId(isolate)),
|
| materialize_false_id_(GetNextId(isolate)) {
|
| ASSERT(Token::IsUnaryOp(op));
|
| @@ -1888,7 +1897,6 @@ class UnaryOperation V8_FINAL : public Expression {
|
| private:
|
| Token::Value op_;
|
| Expression* expression_;
|
| - int pos_;
|
|
|
| // For unary not (Token::NOT), the AST ids where true and false will
|
| // actually be materialized, respectively.
|
| @@ -1906,7 +1914,6 @@ class BinaryOperation V8_FINAL : public Expression {
|
| Token::Value op() const { return op_; }
|
| Expression* left() const { return left_; }
|
| Expression* right() const { return right_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| BailoutId RightId() const { return right_id_; }
|
|
|
| @@ -1923,11 +1930,10 @@ class BinaryOperation V8_FINAL : public Expression {
|
| Expression* left,
|
| Expression* right,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| op_(op),
|
| left_(left),
|
| right_(right),
|
| - pos_(pos),
|
| right_id_(GetNextId(isolate)) {
|
| ASSERT(Token::IsBinaryOp(op));
|
| }
|
| @@ -1936,7 +1942,6 @@ class BinaryOperation V8_FINAL : public Expression {
|
| Token::Value op_;
|
| Expression* left_;
|
| Expression* right_;
|
| - int pos_;
|
|
|
| // TODO(rossberg): the fixed arg should probably be represented as a Constant
|
| // type for the RHS.
|
| @@ -1961,7 +1966,6 @@ class CountOperation V8_FINAL : public Expression {
|
| }
|
|
|
| Expression* expression() const { return expression_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
|
| virtual bool IsMonomorphic() V8_OVERRIDE { return is_monomorphic_; }
|
| @@ -1984,13 +1988,12 @@ class CountOperation V8_FINAL : public Expression {
|
| bool is_prefix,
|
| Expression* expr,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| op_(op),
|
| is_prefix_(is_prefix),
|
| is_monomorphic_(false),
|
| store_mode_(STANDARD_STORE),
|
| expression_(expr),
|
| - pos_(pos),
|
| assignment_id_(GetNextId(isolate)),
|
| count_id_(GetNextId(isolate)) {}
|
|
|
| @@ -2003,7 +2006,6 @@ class CountOperation V8_FINAL : public Expression {
|
| TypeInfo type_;
|
|
|
| Expression* expression_;
|
| - int pos_;
|
| const BailoutId assignment_id_;
|
| const TypeFeedbackId count_id_;
|
| SmallMapList receiver_types_;
|
| @@ -2017,7 +2019,6 @@ class CompareOperation V8_FINAL : public Expression {
|
| Token::Value op() const { return op_; }
|
| Expression* left() const { return left_; }
|
| Expression* right() const { return right_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| // Type feedback information.
|
| TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); }
|
| @@ -2035,11 +2036,10 @@ class CompareOperation V8_FINAL : public Expression {
|
| Expression* left,
|
| Expression* right,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| op_(op),
|
| left_(left),
|
| right_(right),
|
| - pos_(pos),
|
| combined_type_(Type::Null(), isolate) {
|
| ASSERT(Token::IsCompareOp(op));
|
| }
|
| @@ -2048,7 +2048,6 @@ class CompareOperation V8_FINAL : public Expression {
|
| Token::Value op_;
|
| Expression* left_;
|
| Expression* right_;
|
| - int pos_;
|
|
|
| Handle<Type> combined_type_;
|
| };
|
| @@ -2062,6 +2061,7 @@ class Conditional V8_FINAL : public Expression {
|
| Expression* then_expression() const { return then_expression_; }
|
| Expression* else_expression() const { return else_expression_; }
|
|
|
| + // TODO(rossberg): get rid of this.
|
| int then_expression_position() const { return then_expression_position_; }
|
| int else_expression_position() const { return else_expression_position_; }
|
|
|
| @@ -2074,8 +2074,9 @@ class Conditional V8_FINAL : public Expression {
|
| Expression* then_expression,
|
| Expression* else_expression,
|
| int then_expression_position,
|
| - int else_expression_position)
|
| - : Expression(isolate),
|
| + int else_expression_position,
|
| + int position)
|
| + : Expression(isolate, position),
|
| condition_(condition),
|
| then_expression_(then_expression),
|
| else_expression_(else_expression),
|
| @@ -2106,7 +2107,6 @@ class Assignment V8_FINAL : public Expression {
|
| Token::Value op() const { return op_; }
|
| Expression* target() const { return target_; }
|
| Expression* value() const { return value_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
| BinaryOperation* binary_operation() const { return binary_operation_; }
|
|
|
| // This check relies on the definition order of token in token.h.
|
| @@ -2137,8 +2137,8 @@ class Assignment V8_FINAL : public Expression {
|
| void Init(Isolate* isolate, AstNodeFactory<Visitor>* factory) {
|
| ASSERT(Token::IsAssignmentOp(op_));
|
| if (is_compound()) {
|
| - binary_operation_ =
|
| - factory->NewBinaryOperation(binary_op(), target_, value_, pos_ + 1);
|
| + binary_operation_ = factory->NewBinaryOperation(
|
| + binary_op(), target_, value_, position() + 1);
|
| }
|
| }
|
|
|
| @@ -2146,7 +2146,6 @@ class Assignment V8_FINAL : public Expression {
|
| Token::Value op_;
|
| Expression* target_;
|
| Expression* value_;
|
| - int pos_;
|
| BinaryOperation* binary_operation_;
|
| const BailoutId assignment_id_;
|
|
|
| @@ -2172,7 +2171,6 @@ class Yield V8_FINAL : public Expression {
|
| Expression* generator_object() const { return generator_object_; }
|
| Expression* expression() const { return expression_; }
|
| Kind yield_kind() const { return yield_kind_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| // Delegating yield surrounds the "yield" in a "try/catch". This index
|
| // locates the catch handler in the handler table, and is equivalent to
|
| @@ -2192,19 +2190,17 @@ class Yield V8_FINAL : public Expression {
|
| Expression* expression,
|
| Kind yield_kind,
|
| int pos)
|
| - : Expression(isolate),
|
| + : Expression(isolate, pos),
|
| generator_object_(generator_object),
|
| expression_(expression),
|
| yield_kind_(yield_kind),
|
| - index_(-1),
|
| - pos_(pos) { }
|
| + index_(-1) { }
|
|
|
| private:
|
| Expression* generator_object_;
|
| Expression* expression_;
|
| Kind yield_kind_;
|
| int index_;
|
| - int pos_;
|
| };
|
|
|
|
|
| @@ -2213,15 +2209,13 @@ class Throw V8_FINAL : public Expression {
|
| DECLARE_NODE_TYPE(Throw)
|
|
|
| Expression* exception() const { return exception_; }
|
| - virtual int position() const V8_OVERRIDE { return pos_; }
|
|
|
| protected:
|
| Throw(Isolate* isolate, Expression* exception, int pos)
|
| - : Expression(isolate), exception_(exception), pos_(pos) {}
|
| + : Expression(isolate, pos), exception_(exception) {}
|
|
|
| private:
|
| Expression* exception_;
|
| - int pos_;
|
| };
|
|
|
|
|
| @@ -2336,8 +2330,9 @@ class FunctionLiteral V8_FINAL : public Expression {
|
| ParameterFlag has_duplicate_parameters,
|
| IsFunctionFlag is_function,
|
| IsParenthesizedFlag is_parenthesized,
|
| - IsGeneratorFlag is_generator)
|
| - : Expression(isolate),
|
| + IsGeneratorFlag is_generator,
|
| + int position)
|
| + : Expression(isolate, position),
|
| name_(name),
|
| scope_(scope),
|
| body_(body),
|
| @@ -2394,8 +2389,9 @@ class SharedFunctionInfoLiteral V8_FINAL : public Expression {
|
| protected:
|
| SharedFunctionInfoLiteral(
|
| Isolate* isolate,
|
| - Handle<SharedFunctionInfo> shared_function_info)
|
| - : Expression(isolate),
|
| + Handle<SharedFunctionInfo> shared_function_info,
|
| + int pos)
|
| + : Expression(isolate, pos),
|
| shared_function_info_(shared_function_info) { }
|
|
|
| private:
|
| @@ -2408,7 +2404,7 @@ class ThisFunction V8_FINAL : public Expression {
|
| DECLARE_NODE_TYPE(ThisFunction)
|
|
|
| protected:
|
| - explicit ThisFunction(Isolate* isolate): Expression(isolate) {}
|
| + explicit ThisFunction(Isolate* isolate, int pos): Expression(isolate, pos) {}
|
| };
|
|
|
| #undef DECLARE_NODE_TYPE
|
| @@ -2775,8 +2771,8 @@ class RegExpEmpty V8_FINAL : public RegExpTree {
|
| // ----------------------------------------------------------------------------
|
| // Out-of-line inline constructors (to side-step cyclic dependencies).
|
|
|
| -inline ModuleVariable::ModuleVariable(VariableProxy* proxy)
|
| - : Module(proxy->interface()),
|
| +inline ModuleVariable::ModuleVariable(VariableProxy* proxy, int pos)
|
| + : Module(proxy->interface(), pos),
|
| proxy_(proxy) {
|
| }
|
|
|
| @@ -2893,75 +2889,81 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
|
|
| VariableDeclaration* NewVariableDeclaration(VariableProxy* proxy,
|
| VariableMode mode,
|
| - Scope* scope) {
|
| + Scope* scope,
|
| + int pos) {
|
| VariableDeclaration* decl =
|
| - new(zone_) VariableDeclaration(proxy, mode, scope);
|
| + new(zone_) VariableDeclaration(proxy, mode, scope, pos);
|
| VISIT_AND_RETURN(VariableDeclaration, decl)
|
| }
|
|
|
| FunctionDeclaration* NewFunctionDeclaration(VariableProxy* proxy,
|
| VariableMode mode,
|
| FunctionLiteral* fun,
|
| - Scope* scope) {
|
| + Scope* scope,
|
| + int pos) {
|
| FunctionDeclaration* decl =
|
| - new(zone_) FunctionDeclaration(proxy, mode, fun, scope);
|
| + new(zone_) FunctionDeclaration(proxy, mode, fun, scope, pos);
|
| VISIT_AND_RETURN(FunctionDeclaration, decl)
|
| }
|
|
|
| ModuleDeclaration* NewModuleDeclaration(VariableProxy* proxy,
|
| Module* module,
|
| - Scope* scope) {
|
| + Scope* scope,
|
| + int pos) {
|
| ModuleDeclaration* decl =
|
| - new(zone_) ModuleDeclaration(proxy, module, scope);
|
| + new(zone_) ModuleDeclaration(proxy, module, scope, pos);
|
| VISIT_AND_RETURN(ModuleDeclaration, decl)
|
| }
|
|
|
| ImportDeclaration* NewImportDeclaration(VariableProxy* proxy,
|
| Module* module,
|
| - Scope* scope) {
|
| + Scope* scope,
|
| + int pos) {
|
| ImportDeclaration* decl =
|
| - new(zone_) ImportDeclaration(proxy, module, scope);
|
| + new(zone_) ImportDeclaration(proxy, module, scope, pos);
|
| VISIT_AND_RETURN(ImportDeclaration, decl)
|
| }
|
|
|
| ExportDeclaration* NewExportDeclaration(VariableProxy* proxy,
|
| - Scope* scope) {
|
| + Scope* scope,
|
| + int pos) {
|
| ExportDeclaration* decl =
|
| - new(zone_) ExportDeclaration(proxy, scope);
|
| + new(zone_) ExportDeclaration(proxy, scope, pos);
|
| VISIT_AND_RETURN(ExportDeclaration, decl)
|
| }
|
|
|
| - ModuleLiteral* NewModuleLiteral(Block* body, Interface* interface) {
|
| - ModuleLiteral* module = new(zone_) ModuleLiteral(body, interface);
|
| + ModuleLiteral* NewModuleLiteral(Block* body, Interface* interface, int pos) {
|
| + ModuleLiteral* module = new(zone_) ModuleLiteral(body, interface, pos);
|
| VISIT_AND_RETURN(ModuleLiteral, module)
|
| }
|
|
|
| - ModuleVariable* NewModuleVariable(VariableProxy* proxy) {
|
| - ModuleVariable* module = new(zone_) ModuleVariable(proxy);
|
| + ModuleVariable* NewModuleVariable(VariableProxy* proxy, int pos) {
|
| + ModuleVariable* module = new(zone_) ModuleVariable(proxy, pos);
|
| VISIT_AND_RETURN(ModuleVariable, module)
|
| }
|
|
|
| - ModulePath* NewModulePath(Module* origin, Handle<String> name) {
|
| - ModulePath* module = new(zone_) ModulePath(origin, name, zone_);
|
| + ModulePath* NewModulePath(Module* origin, Handle<String> name, int pos) {
|
| + ModulePath* module = new(zone_) ModulePath(origin, name, zone_, pos);
|
| VISIT_AND_RETURN(ModulePath, module)
|
| }
|
|
|
| - ModuleUrl* NewModuleUrl(Handle<String> url) {
|
| - ModuleUrl* module = new(zone_) ModuleUrl(url, zone_);
|
| + ModuleUrl* NewModuleUrl(Handle<String> url, int pos) {
|
| + ModuleUrl* module = new(zone_) ModuleUrl(url, zone_, pos);
|
| VISIT_AND_RETURN(ModuleUrl, module)
|
| }
|
|
|
| Block* NewBlock(ZoneStringList* labels,
|
| int capacity,
|
| - bool is_initializer_block) {
|
| + bool is_initializer_block,
|
| + int pos) {
|
| Block* block = new(zone_) Block(
|
| - isolate_, labels, capacity, is_initializer_block, zone_);
|
| + isolate_, labels, capacity, is_initializer_block, pos, zone_);
|
| VISIT_AND_RETURN(Block, block)
|
| }
|
|
|
| #define STATEMENT_WITH_LABELS(NodeType) \
|
| - NodeType* New##NodeType(ZoneStringList* labels) { \
|
| - NodeType* stmt = new(zone_) NodeType(isolate_, labels); \
|
| + NodeType* New##NodeType(ZoneStringList* labels, int pos) { \
|
| + NodeType* stmt = new(zone_) NodeType(isolate_, labels, pos); \
|
| VISIT_AND_RETURN(NodeType, stmt); \
|
| }
|
| STATEMENT_WITH_LABELS(DoWhileStatement)
|
| @@ -2971,14 +2973,15 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| #undef STATEMENT_WITH_LABELS
|
|
|
| ForEachStatement* NewForEachStatement(ForEachStatement::VisitMode visit_mode,
|
| - ZoneStringList* labels) {
|
| + ZoneStringList* labels,
|
| + int pos) {
|
| switch (visit_mode) {
|
| case ForEachStatement::ENUMERATE: {
|
| - ForInStatement* stmt = new(zone_) ForInStatement(isolate_, labels);
|
| + ForInStatement* stmt = new(zone_) ForInStatement(isolate_, labels, pos);
|
| VISIT_AND_RETURN(ForInStatement, stmt);
|
| }
|
| case ForEachStatement::ITERATE: {
|
| - ForOfStatement* stmt = new(zone_) ForOfStatement(isolate_, labels);
|
| + ForOfStatement* stmt = new(zone_) ForOfStatement(isolate_, labels, pos);
|
| VISIT_AND_RETURN(ForOfStatement, stmt);
|
| }
|
| }
|
| @@ -2986,44 +2989,47 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| return NULL;
|
| }
|
|
|
| - ModuleStatement* NewModuleStatement(VariableProxy* proxy, Block* body) {
|
| - ModuleStatement* stmt = new(zone_) ModuleStatement(proxy, body);
|
| + ModuleStatement* NewModuleStatement(
|
| + VariableProxy* proxy, Block* body, int pos) {
|
| + ModuleStatement* stmt = new(zone_) ModuleStatement(proxy, body, pos);
|
| VISIT_AND_RETURN(ModuleStatement, stmt)
|
| }
|
|
|
| - ExpressionStatement* NewExpressionStatement(Expression* expression) {
|
| - ExpressionStatement* stmt = new(zone_) ExpressionStatement(expression);
|
| + ExpressionStatement* NewExpressionStatement(Expression* expression, int pos) {
|
| + ExpressionStatement* stmt = new(zone_) ExpressionStatement(expression, pos);
|
| VISIT_AND_RETURN(ExpressionStatement, stmt)
|
| }
|
|
|
| - ContinueStatement* NewContinueStatement(IterationStatement* target) {
|
| - ContinueStatement* stmt = new(zone_) ContinueStatement(target);
|
| + ContinueStatement* NewContinueStatement(IterationStatement* target, int pos) {
|
| + ContinueStatement* stmt = new(zone_) ContinueStatement(target, pos);
|
| VISIT_AND_RETURN(ContinueStatement, stmt)
|
| }
|
|
|
| - BreakStatement* NewBreakStatement(BreakableStatement* target) {
|
| - BreakStatement* stmt = new(zone_) BreakStatement(target);
|
| + BreakStatement* NewBreakStatement(BreakableStatement* target, int pos) {
|
| + BreakStatement* stmt = new(zone_) BreakStatement(target, pos);
|
| VISIT_AND_RETURN(BreakStatement, stmt)
|
| }
|
|
|
| - ReturnStatement* NewReturnStatement(Expression* expression) {
|
| - ReturnStatement* stmt = new(zone_) ReturnStatement(expression);
|
| + ReturnStatement* NewReturnStatement(Expression* expression, int pos) {
|
| + ReturnStatement* stmt = new(zone_) ReturnStatement(expression, pos);
|
| VISIT_AND_RETURN(ReturnStatement, stmt)
|
| }
|
|
|
| WithStatement* NewWithStatement(Scope* scope,
|
| Expression* expression,
|
| - Statement* statement) {
|
| + Statement* statement,
|
| + int pos) {
|
| WithStatement* stmt = new(zone_) WithStatement(
|
| - scope, expression, statement);
|
| + scope, expression, statement, pos);
|
| VISIT_AND_RETURN(WithStatement, stmt)
|
| }
|
|
|
| IfStatement* NewIfStatement(Expression* condition,
|
| Statement* then_statement,
|
| - Statement* else_statement) {
|
| + Statement* else_statement,
|
| + int pos) {
|
| IfStatement* stmt = new(zone_) IfStatement(
|
| - isolate_, condition, then_statement, else_statement);
|
| + isolate_, condition, then_statement, else_statement, pos);
|
| VISIT_AND_RETURN(IfStatement, stmt)
|
| }
|
|
|
| @@ -3031,36 +3037,38 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| Block* try_block,
|
| Scope* scope,
|
| Variable* variable,
|
| - Block* catch_block) {
|
| + Block* catch_block,
|
| + int pos) {
|
| TryCatchStatement* stmt = new(zone_) TryCatchStatement(
|
| - index, try_block, scope, variable, catch_block);
|
| + index, try_block, scope, variable, catch_block, pos);
|
| VISIT_AND_RETURN(TryCatchStatement, stmt)
|
| }
|
|
|
| TryFinallyStatement* NewTryFinallyStatement(int index,
|
| Block* try_block,
|
| - Block* finally_block) {
|
| + Block* finally_block,
|
| + int pos) {
|
| TryFinallyStatement* stmt =
|
| - new(zone_) TryFinallyStatement(index, try_block, finally_block);
|
| + new(zone_) TryFinallyStatement(index, try_block, finally_block, pos);
|
| VISIT_AND_RETURN(TryFinallyStatement, stmt)
|
| }
|
|
|
| - DebuggerStatement* NewDebuggerStatement() {
|
| - DebuggerStatement* stmt = new(zone_) DebuggerStatement();
|
| + DebuggerStatement* NewDebuggerStatement(int pos) {
|
| + DebuggerStatement* stmt = new(zone_) DebuggerStatement(pos);
|
| VISIT_AND_RETURN(DebuggerStatement, stmt)
|
| }
|
|
|
| - EmptyStatement* NewEmptyStatement() {
|
| - return new(zone_) EmptyStatement();
|
| + EmptyStatement* NewEmptyStatement(int pos) {
|
| + return new(zone_) EmptyStatement(pos);
|
| }
|
|
|
| - Literal* NewLiteral(Handle<Object> handle) {
|
| - Literal* lit = new(zone_) Literal(isolate_, handle);
|
| + Literal* NewLiteral(Handle<Object> handle, int pos) {
|
| + Literal* lit = new(zone_) Literal(isolate_, handle, pos);
|
| VISIT_AND_RETURN(Literal, lit)
|
| }
|
|
|
| - Literal* NewNumberLiteral(double number) {
|
| - return NewLiteral(isolate_->factory()->NewNumber(number, TENURED));
|
| + Literal* NewNumberLiteral(double number, int pos) {
|
| + return NewLiteral(isolate_->factory()->NewNumber(number, TENURED), pos);
|
| }
|
|
|
| ObjectLiteral* NewObjectLiteral(
|
| @@ -3071,26 +3079,29 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| bool fast_elements,
|
| int depth,
|
| bool may_store_doubles,
|
| - bool has_function) {
|
| + bool has_function,
|
| + int pos) {
|
| ObjectLiteral* lit = new(zone_) ObjectLiteral(
|
| isolate_, constant_properties, properties, literal_index,
|
| - is_simple, fast_elements, depth, may_store_doubles, has_function);
|
| + is_simple, fast_elements, depth, may_store_doubles, has_function, pos);
|
| VISIT_AND_RETURN(ObjectLiteral, lit)
|
| }
|
|
|
| ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter,
|
| - FunctionLiteral* value) {
|
| + FunctionLiteral* value,
|
| + int pos) {
|
| ObjectLiteral::Property* prop =
|
| new(zone_) ObjectLiteral::Property(is_getter, value);
|
| - prop->set_key(NewLiteral(value->name()));
|
| + prop->set_key(NewLiteral(value->name(), pos));
|
| return prop; // Not an AST node, will not be visited.
|
| }
|
|
|
| RegExpLiteral* NewRegExpLiteral(Handle<String> pattern,
|
| Handle<String> flags,
|
| - int literal_index) {
|
| + int literal_index,
|
| + int pos) {
|
| RegExpLiteral* lit =
|
| - new(zone_) RegExpLiteral(isolate_, pattern, flags, literal_index);
|
| + new(zone_) RegExpLiteral(isolate_, pattern, flags, literal_index, pos);
|
| VISIT_AND_RETURN(RegExpLiteral, lit);
|
| }
|
|
|
| @@ -3098,14 +3109,17 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| ZoneList<Expression*>* values,
|
| int literal_index,
|
| bool is_simple,
|
| - int depth) {
|
| + int depth,
|
| + int pos) {
|
| ArrayLiteral* lit = new(zone_) ArrayLiteral(
|
| - isolate_, constant_elements, values, literal_index, is_simple, depth);
|
| + isolate_, constant_elements, values, literal_index, is_simple,
|
| + depth, pos);
|
| VISIT_AND_RETURN(ArrayLiteral, lit)
|
| }
|
|
|
| - VariableProxy* NewVariableProxy(Variable* var) {
|
| - VariableProxy* proxy = new(zone_) VariableProxy(isolate_, var);
|
| + VariableProxy* NewVariableProxy(Variable* var,
|
| + int pos = RelocInfo::kNoPosition) {
|
| + VariableProxy* proxy = new(zone_) VariableProxy(isolate_, var, pos);
|
| VISIT_AND_RETURN(VariableProxy, proxy)
|
| }
|
|
|
| @@ -3139,9 +3153,10 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
|
|
| CallRuntime* NewCallRuntime(Handle<String> name,
|
| const Runtime::Function* function,
|
| - ZoneList<Expression*>* arguments) {
|
| + ZoneList<Expression*>* arguments,
|
| + int pos) {
|
| CallRuntime* call =
|
| - new(zone_) CallRuntime(isolate_, name, function, arguments);
|
| + new(zone_) CallRuntime(isolate_, name, function, arguments, pos);
|
| VISIT_AND_RETURN(CallRuntime, call)
|
| }
|
|
|
| @@ -3184,10 +3199,11 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| Expression* then_expression,
|
| Expression* else_expression,
|
| int then_expression_position,
|
| - int else_expression_position) {
|
| + int else_expression_position,
|
| + int position) {
|
| Conditional* cond = new(zone_) Conditional(
|
| isolate_, condition, then_expression, else_expression,
|
| - then_expression_position, else_expression_position);
|
| + then_expression_position, else_expression_position, position);
|
| VISIT_AND_RETURN(Conditional, cond)
|
| }
|
|
|
| @@ -3227,12 +3243,13 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| FunctionLiteral::FunctionType function_type,
|
| FunctionLiteral::IsFunctionFlag is_function,
|
| FunctionLiteral::IsParenthesizedFlag is_parenthesized,
|
| - FunctionLiteral::IsGeneratorFlag is_generator) {
|
| + FunctionLiteral::IsGeneratorFlag is_generator,
|
| + int position) {
|
| FunctionLiteral* lit = new(zone_) FunctionLiteral(
|
| isolate_, name, scope, body,
|
| materialized_literal_count, expected_property_count, handler_count,
|
| parameter_count, function_type, has_duplicate_parameters, is_function,
|
| - is_parenthesized, is_generator);
|
| + is_parenthesized, is_generator, position);
|
| // Top-level literal doesn't count for the AST's properties.
|
| if (is_function == FunctionLiteral::kIsFunction) {
|
| visitor_.VisitFunctionLiteral(lit);
|
| @@ -3241,14 +3258,15 @@ class AstNodeFactory V8_FINAL BASE_EMBEDDED {
|
| }
|
|
|
| SharedFunctionInfoLiteral* NewSharedFunctionInfoLiteral(
|
| - Handle<SharedFunctionInfo> shared_function_info) {
|
| + Handle<SharedFunctionInfo> shared_function_info, int pos) {
|
| SharedFunctionInfoLiteral* lit =
|
| - new(zone_) SharedFunctionInfoLiteral(isolate_, shared_function_info);
|
| + new(zone_) SharedFunctionInfoLiteral(
|
| + isolate_, shared_function_info, pos);
|
| VISIT_AND_RETURN(SharedFunctionInfoLiteral, lit)
|
| }
|
|
|
| - ThisFunction* NewThisFunction() {
|
| - ThisFunction* fun = new(zone_) ThisFunction(isolate_);
|
| + ThisFunction* NewThisFunction(int pos) {
|
| + ThisFunction* fun = new(zone_) ThisFunction(isolate_, pos);
|
| VISIT_AND_RETURN(ThisFunction, fun)
|
| }
|
|
|
|
|