| Index: src/interpreter/bytecode-generator.h
|
| diff --git a/src/interpreter/bytecode-generator.h b/src/interpreter/bytecode-generator.h
|
| index 9fd4da63da00502cfe2901fa60618593db51d342..bad50d288a6549d8ec2a6dedbf3e56fe2447ebf1 100644
|
| --- a/src/interpreter/bytecode-generator.h
|
| +++ b/src/interpreter/bytecode-generator.h
|
| @@ -42,6 +42,7 @@ class BytecodeGenerator final : public AstVisitor {
|
| class AccumulatorResultScope;
|
| class RegisterResultScope;
|
| class RegisterAllocationScope;
|
| + class SuperPropertyArguments;
|
|
|
| void MakeBytecodeBody();
|
|
|
| @@ -65,6 +66,20 @@ class BytecodeGenerator final : public AstVisitor {
|
| // Helper visitors which perform common operations.
|
| Register VisitArguments(ZoneList<Expression*>* arguments);
|
|
|
| + // Visit a keyed super property load. The optional
|
| + // |opt_receiver_out| register will have the receiver stored to it
|
| + // if it's a valid register. The loaded value is placed in the
|
| + // accumulator.
|
| + void VisitKeyedSuperPropertyLoad(Property* property,
|
| + Register opt_receiver_out);
|
| +
|
| + // Visit a named super property load. The optional
|
| + // |opt_receiver_out| register will have the receiver stored to it
|
| + // if it's a valid register. The loaded value is placed in the
|
| + // accumulator.
|
| + void VisitNamedSuperPropertyLoad(Property* property,
|
| + Register opt_receiver_out);
|
| +
|
| void VisitPropertyLoad(Register obj, Property* expr);
|
| void VisitPropertyLoadForAccumulator(Register obj, Property* expr);
|
|
|
| @@ -78,6 +93,20 @@ class BytecodeGenerator final : public AstVisitor {
|
| TypeofMode typeof_mode = NOT_INSIDE_TYPEOF);
|
| void VisitVariableAssignment(Variable* variable, Token::Value op,
|
| FeedbackVectorSlot slot);
|
| +
|
| + void PrepareNamedSuperPropertyArguments(
|
| + SuperPropertyReference* super_property, Handle<Name> name,
|
| + SuperPropertyArguments* super_property_args);
|
| + void PrepareKeyedSuperPropertyArguments(
|
| + SuperPropertyReference* super_property, Expression* key,
|
| + SuperPropertyArguments* super_property_args);
|
| + void BuildNamedSuperPropertyLoad(SuperPropertyArguments* super_property_args);
|
| + void BuildKeyedSuperPropertyLoad(SuperPropertyArguments* super_property_args);
|
| + void BuildNamedSuperPropertyStore(
|
| + SuperPropertyArguments* super_property_args);
|
| + void BuildKeyedSuperPropertyStore(
|
| + SuperPropertyArguments* super_property_args);
|
| +
|
| void BuildThrowIfHole(Handle<String> name);
|
| void BuildThrowIfNotHole(Handle<String> name);
|
| void BuildThrowReassignConstant(Handle<String> name);
|
| @@ -86,6 +115,7 @@ class BytecodeGenerator final : public AstVisitor {
|
|
|
| void VisitArgumentsObject(Variable* variable);
|
| void VisitRestArgumentsArray(Variable* rest);
|
| + void VisitCallSuper(Call* call);
|
| void VisitClassLiteralContents(ClassLiteral* expr);
|
| void VisitClassLiteralForRuntimeDefinition(ClassLiteral* expr);
|
| void VisitClassLiteralProperties(ClassLiteral* expr, Register literal,
|
| @@ -128,6 +158,10 @@ class BytecodeGenerator final : public AstVisitor {
|
| bool IsInsideTryCatch() const { return try_catch_nesting_level_ > 0; }
|
| bool IsInsideTryFinally() const { return try_finally_nesting_level_ > 0; }
|
|
|
| + // Initialize an array of temporary registers with consecutive registers.
|
| + template <size_t N>
|
| + void InitializeWithConsecutiveRegisters(Register (®isters)[N]);
|
| +
|
| inline void set_builder(BytecodeArrayBuilder* builder) { builder_ = builder; }
|
| inline BytecodeArrayBuilder* builder() const { return builder_; }
|
|
|
|
|