diff options
Diffstat (limited to 'src/jsifier.js')
-rw-r--r-- | src/jsifier.js | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index 7df0ba86..9a5d7121 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -516,11 +516,26 @@ function JSify(data) { dprint('phi', dump(item)); return '__lastLabel__ == ' + getLabelId(item.label1) + ' ? ' + toNiceIdent(item.value1) + ' : ' + toNiceIdent(item.value2); }); + + function makeUnSign(value, type) { + if (type in INT_TYPES) { + return 'unSign(' + value + ', ' + type.substr(1) + ')'; + } else { + return value; + } + } + makeFuncLineZyme('mathop', function(item) { with(item) { dprint('mathop', 'mathop: ' + dump(item)); ident = parseNumerical(ident); ident2 = parseNumerical(ident2); - switch (item.op) { + if (GUARD_SIGNS) { + if (op[0] == 'u' || (variant && variant[0] == 'u')) { + ident = makeUnSign(ident, type.text); + ident2 = makeUnSign(ident2, type.text); + } + } + switch (op) { case 'add': return ident + ' + ' + ident2; case 'sub': return ident + ' - ' + ident2; case 'sdiv': case 'udiv': return 'Math.floor(' + ident + ' / ' + ident2 + ')'; |