diff options
author | Alon Zakai <azakai@mozilla.com> | 2010-12-04 23:07:54 -0800 |
---|---|---|
committer | Alon Zakai <azakai@mozilla.com> | 2010-12-04 23:07:54 -0800 |
commit | b65e0996fdb8aefd873c26fe18edd861e6a95f92 (patch) | |
tree | 6b4edaa62828db7961771ab3c772bc99a53bf2e6 | |
parent | e1caf733964f01be61839ac75c95993908104a7e (diff) |
library additions
-rw-r--r-- | src/analyzer.js | 2 | ||||
-rw-r--r-- | src/library.js | 52 |
2 files changed, 51 insertions, 3 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 9b29c72c..6dd781c2 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -244,7 +244,7 @@ function analyzer(data, givenTypes) { func.variables[item.ident] = { ident: item.ident, type: item.value.type, - origin: item.value.intertype, + origin: item.value.intertype, // XXX should say something in the case of fastgetelementptrload lineNum: item.lineNum, uses: parseInt(item.value.tokens.slice(-1)[0].item.tokens[0].text.split('=')[1]), }; diff --git a/src/library.js b/src/library.js index 3a673b45..4bc788d1 100644 --- a/src/library.js +++ b/src/library.js @@ -54,6 +54,11 @@ var Library = { return 0; }, + fwrite: function(ptr, size, count, stream) { + print('[fwrite] ' + Pointer_stringify(ptr).slice(0,count)); + return count; // or 0? + }, + fclose: function(stream) { return 0; }, @@ -64,10 +69,12 @@ var Library = { vsnprintf: function(dst, num, src, ptr) { var text = __formatString(-src, ptr); // |-|src tells formatstring to use C-style params (typically they are from varargs) - for (var i = 0; i < num; i++) { + var i; + for (i = 0; i < num; i++) { IHEAP[dst+i] = IHEAP[text+i]; if (IHEAP[dst+i] == 0) break; } + return i; // Actually, should return how many *would* have been written, if the |num| had not stopped us. }, fileno: function(file) { @@ -210,6 +217,21 @@ var Library = { IHEAP[pdest+len+i] = IHEAP[psrc+i]; i ++; } while (IHEAP[psrc+i-1] != 0); + return pdest; + }, + + strncat: function(pdest, psrc, num) { + var len = Pointer_stringify(pdest).length; // TODO: use strlen, but need dependencies system + var i = 0; + while(1) { + if ((IHEAP[pdest+len+i] = IHEAP[psrc+i]) == 0) break; + i ++; + if (i == num) { + IHEAP[pdest+len+i] = 0; + break; + } + } + return pdest; }, strtol: function(ptr) { @@ -234,6 +256,24 @@ var Library = { } }, + strncmp: function(px, py, n) { + var i = 0; + while (i < n) { + var x = IHEAP[px+i]; + var y = IHEAP[py+i]; + if (x == y && x == 0) return 0; + if (x == 0) return -1; + if (y == 0) return 1; + if (x == y) { + i ++; + continue; + } else { + return x > y ? 1 : -1; + } + } + return 0; + }, + memcmp: function(p1, p2, num) { for (var i = 0; i < num; i++) { var v1 = IHEAP[p1+i]; @@ -375,6 +415,10 @@ var Library = { throw 'Pure virtual function called!'; }, + llvm_flt_rounds: function() { + return -1; // 'indeterminable' for FLT_ROUNDS + }, + // iostream _ZNSt8ios_base4InitC1Ev: function() { @@ -455,6 +499,10 @@ var Library = { return ret; // previous break location }, + readlink: function(path, buf, bufsiz) { + return -1; + }, + // time.h time: function(ptr) { @@ -501,8 +549,8 @@ var Library = { // stat.h + __01stat64_: function() { return -1 }, __01fstat64_: function() { return -1 }, - }; load('library_sdl.js'); |