@Test public void shouldDuplicateResultOnStackWhenSimpleExpressionResultIsToBeDuplicatedOnStack() { SimpleExpression simpleExpression = mock(SimpleExpression.class); when(simpleExpression.isResultDuplicatedOnStack()).thenReturn(true); when(simpleExpression.isResultLeftOnStack()).thenReturn(false); analyser.visitEnd(simpleExpression); verify(writer).pushDuplicate(); }
@Test public void shouldPopResultFromStackWhenSimpleExpressionResultIsNotToBeLeftOnStack() { SimpleExpression simpleExpression = mock(SimpleExpression.class); when(simpleExpression.isResultLeftOnStack()).thenReturn(false); when(simpleExpression.isResultDuplicatedOnStack()).thenReturn(false); analyser.visitEnd(simpleExpression); verify(writer).pop(); }
public String ToString() { StringBuilder str = new StringBuilder(); str.append('('); str.append(e1.toString()); str.append(' '); switch (op) { case AND: str.append("&&"); break; case OR: str.append("||"); break; case EQBOOL: str.append("=="); break; case LT: str.append('<'); break; case GT: str.append('>'); break; case LEQ: str.append("<="); break; case GEQ: str.append(">="); break; case PLUS: str.append('+'); break; case MINUS: str.append('-'); break; case TIMES: str.append('*'); break; case DIV: str.append('/'); break; default: return ""; } str.append(' '); str.append(e2.toString()); str.append(')'); return str.toString(); }
public ObjectType getExpressionType() { ObjectType e1Type = e1.getExpressionType(), e2Type = e2.getExpressionType(); switch (op) { case EQBOOL: if (e1Type.equals(e2Type)) { return ObjectType.booleanType; } break; case AND: case OR: if (e1Type.equals(ObjectType.booleanType) && e2Type.equals(ObjectType.booleanType)) { return ObjectType.booleanType; } break; case LT: case GT: case LEQ: case GEQ: if (e1Type.equals(ObjectType.intType) && e2Type.equals(ObjectType.intType)) { return ObjectType.booleanType; } break; case PLUS: if (e1Type.equals(ObjectType.stringType) || e2Type.equals(ObjectType.stringType)) { return ObjectType.stringType; } else if (e1Type.equals(ObjectType.intType) && e2Type.equals(ObjectType.intType)) { return ObjectType.intType; } //erreur break; //return ObjectType.intType; case MINUS: case TIMES: case DIV: if (e1Type.equals(ObjectType.intType) && e2Type.equals(ObjectType.intType)) { return ObjectType.intType; } //erreur break; //return ObjectType.intType; default: return ObjectType.undefinedType; } return ObjectType.undefinedType; }