MontysCoconut / moco

The Monty to LLVM compiler
http://www.informatik.uni-bremen.de/monty/
GNU General Public License v3.0
10 stars 5 forks source link

EmptyStackException when using Expressions without assigning their value to a variable #17

Closed cpfr closed 9 years ago

cpfr commented 9 years ago

I encountered a bug in the current master revision of the Monty compiler (although this also seems to be broken in earlier versions). The following Monty input program produces an EmptyStackException in the CodeGenerationVisitor:

class Person:
    + Int age():
        return 8

Int x := Person().age()

While the following Monty program works fine:

class Person:
    + Int age():
        return 8

Person p := Person()
Int x := p.age()

It seems like expressions which are not assigned to a variable are not correctly pushed to the stack. The corresponding stack trace looks like the following:

java.util.EmptyStackException
        at java.util.Stack.peek(Stack.java:102)
        at java.util.Stack.pop(Stack.java:84)
        at de.uni.bremen.monty.moco.visitor.CodeGenerationVisitor.visit(CodeGenerationVisitor.java:200)
        at de.uni.bremen.monty.moco.ast.statement.Assignment.visit(Assignment.java:84)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visitDoubleDispatched(BaseVisitor.java:72)
        at de.uni.bremen.monty.moco.visitor.CodeGenerationVisitor.visit(CodeGenerationVisitor.java:191)
        at de.uni.bremen.monty.moco.ast.Block.visit(Block.java:106)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visitDoubleDispatched(BaseVisitor.java:72)
        at de.uni.bremen.monty.moco.ast.declaration.ModuleDeclaration.visitChildren(ModuleDeclaration.java:99)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visit(BaseVisitor.java:128)
        at de.uni.bremen.monty.moco.ast.Package.visitChildren(Package.java:77)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visit(BaseVisitor.java:425)
        at de.uni.bremen.monty.moco.visitor.CodeGenerationVisitor.visit(CodeGenerationVisitor.java:179)
        at de.uni.bremen.monty.moco.ast.Package.visitChildren(Package.java:74)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visit(BaseVisitor.java:425)
        at de.uni.bremen.monty.moco.visitor.CodeGenerationVisitor.visit(CodeGenerationVisitor.java:174)
        at de.uni.bremen.monty.moco.ast.Package.visit(Package.java:68)
        at de.uni.bremen.monty.moco.visitor.BaseVisitor.visitDoubleDispatched(BaseVisitor.java:72)
        at de.uni.bremen.monty.moco.Main.visitVisitors(Main.java:127)
        at de.uni.bremen.monty.moco.Main.main(Main.java:246)
lummax commented 9 years ago

Confirmed.