diff options
Diffstat (limited to 'project/QBarInterpreter/src/com/modulus/qbar/lang/IfThenElseFunction.java')
| -rw-r--r-- | project/QBarInterpreter/src/com/modulus/qbar/lang/IfThenElseFunction.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/project/QBarInterpreter/src/com/modulus/qbar/lang/IfThenElseFunction.java b/project/QBarInterpreter/src/com/modulus/qbar/lang/IfThenElseFunction.java new file mode 100644 index 0000000..8efbc5e --- /dev/null +++ b/project/QBarInterpreter/src/com/modulus/qbar/lang/IfThenElseFunction.java @@ -0,0 +1,41 @@ +package com.modulus.qbar.lang; + +import com.modulus.common.collections.Stack; +import com.modulus.qbar.core.QBFunction; +import com.modulus.qbar.core.QBObject; +import com.modulus.qbar.core.interpreter.QBInterpreter; +import com.modulus.qbar.core.parser.ByteOperation; +import com.modulus.qbar.core.primitive.QBPrimitive; + +public class IfThenElseFunction extends QBFunction { + /** + * + */ + private static final long serialVersionUID = 6694512700264765780L; + private ByteOperation[] ifPart, thenPart, elsePart; + + + public IfThenElseFunction(ByteOperation[] ifPart, + ByteOperation[] thenPart, ByteOperation[] elsePart) { + super(0); + this.ifPart = ifPart; + this.thenPart = thenPart; + this.elsePart = elsePart; + } + + + @Override + public QBObject execute(QBObject[] args) { + Stack<QBObject> stack = QBInterpreter.instance().getStack(); + this.exec(ifPart, stack); + + if(returnedValue instanceof QBPrimitive && ((QBPrimitive) returnedValue).intValue() != 0){ + this.exec(thenPart, stack); + return returnedValue; + } else{ + this.exec(elsePart, stack); + return returnedValue; + } + } + +} |