| Index: src/interpreter/bytecode-array-builder.h
|
| diff --git a/src/interpreter/bytecode-array-builder.h b/src/interpreter/bytecode-array-builder.h
|
| index 8ff0023093ea6f027d7c51d4b0b7ec85610a9699..b54365a68899be19c648c5ba7c73e063cfde2ce1 100644
|
| --- a/src/interpreter/bytecode-array-builder.h
|
| +++ b/src/interpreter/bytecode-array-builder.h
|
| @@ -309,9 +309,24 @@ class BytecodeArrayBuilder final : public ZoneObject {
|
|
|
| void InitializeReturnPosition(FunctionLiteral* literal);
|
|
|
| - void SetStatementPosition(Statement* stmt);
|
| - void SetExpressionPosition(Expression* expr);
|
| - void SetExpressionAsStatementPosition(Expression* expr);
|
| + void SetStatementPosition(Statement* stmt) {
|
| + if (stmt->position() == kNoSourcePosition) return;
|
| + latest_source_info_.MakeStatementPosition(stmt->position());
|
| + }
|
| +
|
| + void SetExpressionPosition(Expression* expr) {
|
| + if (expr->position() == kNoSourcePosition) return;
|
| + if (!latest_source_info_.is_statement()) {
|
| + // Ensure the current expression position is overwritten with the
|
| + // latest value.
|
| + latest_source_info_.MakeExpressionPosition(expr->position());
|
| + }
|
| + }
|
| +
|
| + void SetExpressionAsStatementPosition(Expression* expr) {
|
| + if (expr->position() == kNoSourcePosition) return;
|
| + latest_source_info_.MakeStatementPosition(expr->position());
|
| + }
|
|
|
| // Accessors
|
| TemporaryRegisterAllocator* temporary_register_allocator() {
|
| @@ -345,36 +360,23 @@ class BytecodeArrayBuilder final : public ZoneObject {
|
| private:
|
| friend class BytecodeRegisterAllocator;
|
|
|
| - static Bytecode BytecodeForBinaryOperation(Token::Value op);
|
| - static Bytecode BytecodeForCountOperation(Token::Value op);
|
| - static Bytecode BytecodeForCompareOperation(Token::Value op);
|
| - static Bytecode BytecodeForStoreNamedProperty(LanguageMode language_mode);
|
| - static Bytecode BytecodeForStoreKeyedProperty(LanguageMode language_mode);
|
| - static Bytecode BytecodeForLoadGlobal(TypeofMode typeof_mode);
|
| - static Bytecode BytecodeForStoreGlobal(LanguageMode language_mode);
|
| - static Bytecode BytecodeForStoreLookupSlot(LanguageMode language_mode);
|
| - static Bytecode BytecodeForCreateArguments(CreateArgumentsType type);
|
| - static Bytecode BytecodeForDelete(LanguageMode language_mode);
|
| - static Bytecode BytecodeForCall(TailCallMode tail_call_mode);
|
| -
|
| - void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1,
|
| - uint32_t operand2, uint32_t operand3);
|
| - void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1,
|
| - uint32_t operand2);
|
| - void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1);
|
| - void Output(Bytecode bytecode, uint32_t operand0);
|
| - void Output(Bytecode bytecode);
|
| -
|
| - BytecodeArrayBuilder& OutputJump(BytecodeNode* node, BytecodeLabel* label);
|
| + INLINE(void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1,
|
| + uint32_t operand2, uint32_t operand3));
|
| + INLINE(void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1,
|
| + uint32_t operand2));
|
| + INLINE(void Output(Bytecode bytecode, uint32_t operand0, uint32_t operand1));
|
| + INLINE(void Output(Bytecode bytecode, uint32_t operand0));
|
| + INLINE(void Output(Bytecode bytecode));
|
| +
|
| + INLINE(void OutputJump(Bytecode bytecode, BytecodeLabel* label));
|
| + INLINE(void OutputJump(Bytecode bytecode, uint32_t operand0,
|
| + BytecodeLabel* label));
|
|
|
| bool RegisterIsValid(Register reg) const;
|
| bool OperandsAreValid(Bytecode bytecode, int operand_count,
|
| uint32_t operand0 = 0, uint32_t operand1 = 0,
|
| uint32_t operand2 = 0, uint32_t operand3 = 0) const;
|
|
|
| - // Attach latest source position to |node|.
|
| - void AttachSourceInfo(BytecodeNode* node);
|
| -
|
| // Set position for return.
|
| void SetReturnPosition();
|
|
|
|
|