aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-08-25 16:15:30 +0300
committermax99x <max99x@gmail.com>2011-08-25 16:25:16 +0300
commit0f9d296b52466fc5f3cfcd6004d3b49f07363100 (patch)
tree267c3f204f954f98ef246186259ebd1026cfca4f
parent58b8fa4ff05d62b3d9a6e793bb73118c23349897 (diff)
Fixed _formatString()/printf() for USE_TYPED_ARRAYS + test for it.
-rw-r--r--src/library.js7
-rw-r--r--tests/runner.py19
2 files changed, 25 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js
index c13e2ba0..200a66b0 100644
--- a/src/library.js
+++ b/src/library.js
@@ -2210,7 +2210,12 @@ LibraryManager.library = {
var getNextArg = function(type) {
// NOTE: Explicitly ignoring type safety. Otherwise this fails:
// int x = 4; printf("%c\n", (char)x);
- var ret = {{{ makeGetValue('varargs', 'argIndex', 'null', undefined, undefined, true) }}};
+ var ret;
+ if (type === 'float' || type === 'double') {
+ ret = {{{ makeGetValue('varargs', 'argIndex', 'double', undefined, undefined, true) }}};
+ } else {
+ ret = {{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}};
+ }
argIndex += Runtime.getNativeFieldSize(type);
return Number(ret);
};
diff --git a/tests/runner.py b/tests/runner.py
index e8cfba42..e51f8e86 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -2245,6 +2245,25 @@ if 'benchmark' not in sys.argv:
expected = open(path_from_root('tests', 'printf', 'output.txt'), 'r').read()
self.do_test(src, expected)
+ def test_printf_types(self):
+ src = r'''
+ #include <stdio.h>
+
+ int main() {
+ char c = '1';
+ short s = 2;
+ int i = 3;
+ long long l = 4;
+ float f = 5.5;
+ double d = 6.6;
+
+ printf("%c,%hd,%d,%lld,%.1f,%.1llf\n", c, s, i, l, f, d);
+
+ return 0;
+ }
+ '''
+ self.do_test(src, '1,2,3,4,5.5,6.6\n')
+
def test_vprintf(self):
src = r'''
#include <stdio.h>