diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-11-26 16:44:00 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-11-26 16:44:00 -0800 |
commit | 920974131a81ace3c026514af7aa71f89328740f (patch) | |
tree | 8009f268282b23cddb34d3fab4ee5593fc648559 /src | |
parent | 1288b402e48809e5addba02b8321ff77bdd25028 (diff) | |
parent | aefb4b1d6b8a5e5bdc8afba5f43eceebbaa39280 (diff) |
Merge pull request #1864 from ngld/llvm-used
Implemented #1573. (@llvm.used)
Diffstat (limited to 'src')
-rw-r--r-- | src/intertyper.js | 21 | ||||
-rw-r--r-- | src/modules.js | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/intertyper.js b/src/intertyper.js index 940c677f..6d0aa751 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -524,6 +524,26 @@ function intertyper(lines, sidePass, baseLineNums) { } }); } + } else if (ident == '_llvm_used') { + var chunk = item.tokens[1].tokens; + var funcs = []; + var part = []; + + for (var i = 0; i < chunk.length; i++) { + if (chunk[i].text == ',') { + var call = parseLLVMFunctionCall(part); + EXPORTED_FUNCTIONS[call.ident] = 0; + part = []; + } else { + part.push(chunk[i]); + } + } + if (part.length > 0) { + var call = parseLLVMFunctionCall(part); + EXPORTED_FUNCTIONS[call.ident] = 0; + } + + ret.value = { intertype: 'value', ident: '0', value: '0', type: ret.type }; } else if (!external) { if (item.tokens[1] && item.tokens[1].text != ';') { if (item.tokens[1].text == 'c') { @@ -538,6 +558,7 @@ function intertyper(lines, sidePass, baseLineNums) { ret.value = { intertype: 'value', ident: '0', value: '0', type: ret.type }; } } + return ret; } } diff --git a/src/modules.js b/src/modules.js index 79f494c0..29fca664 100644 --- a/src/modules.js +++ b/src/modules.js @@ -500,6 +500,7 @@ var PassManager = { for (var i in data.Functions) { Functions[i] = data.Functions[i]; } + EXPORTED_FUNCTIONS = data.EXPORTED_FUNCTIONS; /* print('\n//LOADED_DATA:' + phase + ':' + JSON.stringify({ Types: Types, |