Sfoglia il codice sorgente

LibJS/Bytecode: Ensure we do not generate bytecode for super expressions

Similar to AST mode, super expressions are handled elsewhere.
Timothy Flynn 2 anni fa
parent
commit
2f1d6c0b9a

+ 1 - 0
Userland/Libraries/LibJS/AST.h

@@ -1435,6 +1435,7 @@ public:
 
 
     virtual Completion execute(Interpreter&) const override;
     virtual Completion execute(Interpreter&) const override;
     virtual void dump(int indent) const override;
     virtual void dump(int indent) const override;
+    virtual Bytecode::CodeGenerationErrorOr<void> generate_bytecode(Bytecode::Generator&) const override;
 
 
     virtual bool is_super_expression() const override { return true; }
     virtual bool is_super_expression() const override { return true; }
 };
 };

+ 6 - 0
Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp

@@ -2348,6 +2348,12 @@ Bytecode::CodeGenerationErrorOr<void> SwitchStatement::generate_labelled_evaluat
     return {};
     return {};
 }
 }
 
 
+Bytecode::CodeGenerationErrorOr<void> SuperExpression::generate_bytecode(Bytecode::Generator&) const
+{
+    // The semantics for SuperExpression are handled in CallExpression and SuperCall.
+    VERIFY_NOT_REACHED();
+}
+
 Bytecode::CodeGenerationErrorOr<void> ClassDeclaration::generate_bytecode(Bytecode::Generator& generator) const
 Bytecode::CodeGenerationErrorOr<void> ClassDeclaration::generate_bytecode(Bytecode::Generator& generator) const
 {
 {
     auto accumulator_backup_reg = generator.allocate_register();
     auto accumulator_backup_reg = generator.allocate_register();