mca-compiler
Version:
Compiles MCA code to MCIL
44 lines (40 loc) • 1.46 kB
JavaScript
var errors = require('../errors');
var getAssignable = require('../getAssignable');
exports.type = "UnaryExpression";
exports.call = function(node, ctx, execute) {
if (node.prefix === '++' || node.prefix === '--' || node.postfix === '++' || node.postfix === '--') {
var assignable = getAssignable(node.center, ctx);
var castValue = ctx.castNumber(assignable.getValue());
if (node.prefix) {
switch (node.prefix) {
case '++':
result = castValue + 1;
assignable.setValue(result);
return result;
case '--':
result = castValue - 1;
assignable.setValue(result);
return result;
}
}
if (node.postfix) {
switch (node.postfix) {
case '++':
assignable.setValue(castValue + 1);
return castValue;
case '--':
assignable.setValue(castValue - 1);
return castValue;
}
}
}
if (node.prefix) {
var result = execute(node.center);
switch (node.prefix) {
case '+': return ctx.castNumber(result);
case '-': return -ctx.castNumber(result);
case '~': return ~ctx.castNumber(result);
case '!': return !ctx.castBoolean(result);
}
}
};