diff options
author | alon@honor <none@none> | 2010-09-02 20:05:14 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-09-02 20:05:14 -0700 |
commit | aa9ac51abcb31172b46df7f13a90e8a97b9abd91 (patch) | |
tree | 26bb9cd7e7572f5130489900fcce14ea5992070b | |
parent | e8c3ecd8cd3d85f9f50f32fad3e419166fe126f4 (diff) |
support for bitshifts +test
-rw-r--r-- | src/parser.js | 4 | ||||
-rw-r--r-- | tests/runner.py | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/parser.js b/src/parser.js index 7e8c8279..94d6cb86 100644 --- a/src/parser.js +++ b/src/parser.js @@ -702,7 +702,7 @@ function intertyper(data) { // mathops substrate.addZyme('Mathops', { selectItem: function(item) { return item.indent === -1 && item.tokens && item.tokens.length >= 3 && - ['add', 'sub', 'sdiv', 'mul', 'icmp', 'zext', 'urem', 'srem', 'fadd', 'fmul', 'fdiv', 'fcmp', 'uitofp', 'sitofp', 'fpext', 'fptoui', 'fptosi', 'trunc', 'sext', 'select'] + ['add', 'sub', 'sdiv', 'mul', 'icmp', 'zext', 'urem', 'srem', 'fadd', 'fmul', 'fdiv', 'fcmp', 'uitofp', 'sitofp', 'fpext', 'fptoui', 'fptosi', 'trunc', 'sext', 'select', 'shl', 'shr', 'ashl', 'ashr'] .indexOf(item.tokens[0].text) != -1 && !item.intertype }, processItem: function(item) { item.intertype = 'mathop'; @@ -2226,6 +2226,8 @@ function JSify(data) { case 'sdiv': case 'udiv': return 'Math.floor(' + ident + ' / ' + ident2 + ')'; case 'mul': return ident + ' * ' + ident2; case 'urem': case 'srem': return 'Math.floor(' + ident + ' % ' + ident2 + ')'; + case 'shl': case 'ashl': return ident + ' << ' + ident2; + case 'shr': case 'ashr': return ident + ' >> ' + ident2; case 'fadd': return ident + ' + ' + ident2; case 'fsub': return ident + ' - ' + ident2; case 'fdiv': return ident + ' / ' + ident2; diff --git a/tests/runner.py b/tests/runner.py index b27d9714..981f4136 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -164,11 +164,13 @@ class T(unittest.TestCase): int w = x*3+4; int k = w < 15 ? 99 : 101; int i = k > 100; // Should be an int, not a bool! - printf("*%d,%d,%d,%d,%d,%d*\\n", x, y, z, w, k,i); + int j = i << 6; + j >>= 1; + printf("*%d,%d,%d,%d,%d,%d,%d*\\n", x, y, z, w, k, i, j); return 0; } ''' - self.do_test(src, '*5,23,10,19,101,1*') + self.do_test(src, '*5,23,10,19,101,1,32*') def test_floatvars(self): src = ''' |