break;
case '~': // twiddle
push(new TwiddleOperator(expressionUnBoxedTypeId, fCounter));
break;
case '!': // not
push(new NotOperator(expressionUnBoxedTypeId, fCounter));
break;
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_prefix_operator____16
+ opToken);
return false;
}
unBoxing(typeBinding);
operand.accept(this);
storeInstruction(); // un-boxing
} else {
// plus plus and minus minus operators
push(new AssignmentOperator(Instruction.T_Object,
Instruction.T_Object, fCounter));
operand.accept(this);
boxing(typeBinding, null);
switch (char1) {
case '+':
push(new PlusOperator(expressionUnBoxedTypeId,
expressionUnBoxedTypeId, expressionUnBoxedTypeId,
fCounter));
break;
case '-':
push(new MinusOperator(expressionUnBoxedTypeId,
expressionUnBoxedTypeId, expressionUnBoxedTypeId,
fCounter));
break;
default:
setHasError(true);
addErrorMessage(EvaluationEngineMessages.ASTInstructionCompiler_unrecognized_prefix_operator____16
+ opToken);
return false;
}
unBoxing(typeBinding);
push(new Dup());
storeInstruction(); // dupe
storeInstruction(); // un-boxing
push(new PushInt(1));
storeInstruction(); // push 1
storeInstruction(); // operator
storeInstruction(); // boxing
}
return false;
}
switch (char0) {
case '+': // plus plus or unary plus
switch (char1) {
case '\0': // unary plus
push(new UnaryPlusOperator(expressionTypeId, fCounter));
break;
case '+': // plus plus
push(new PrefixPlusPlusOperator(expressionTypeId, fCounter));
break;
default:
unrecognized = true;
break;
}
break;
case '-': // minus minus or unary minus
switch (char1) {
case '\0': // unary minus
push(new UnaryMinusOperator(expressionTypeId, fCounter));
break;
case '-': // minus minus
push(new PrefixMinusMinusOperator(expressionTypeId, fCounter));
break;
default:
unrecognized = true;
break;
}
break;
case '~': // twiddle
push(new TwiddleOperator(expressionTypeId, fCounter));
break;
case '!': // not
push(new NotOperator(expressionTypeId, fCounter));
break;
default:
unrecognized = true;
break;
}