diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-03-19 10:00:57 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-03-19 10:00:57 -0700 |
commit | ee9393ae048547f8d0d8aef6c00a197fe00234b0 (patch) | |
tree | 0701020e2b3642ac8167dc89a0edafb657127130 /src | |
parent | cad92b918bed03be4b822c7579b0f5d1affb9401 (diff) |
support for llvm 2.9
Diffstat (limited to 'src')
-rw-r--r-- | src/intertyper.js | 2 | ||||
-rw-r--r-- | src/jsifier.js | 5 | ||||
-rw-r--r-- | src/library.js | 1 | ||||
-rw-r--r-- | src/modules.js | 12 |
4 files changed, 15 insertions, 5 deletions
diff --git a/src/intertyper.js b/src/intertyper.js index 806dd3ce..fe4eb929 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -693,7 +693,7 @@ function intertyper(data, parseFunctions, baseLineNum) { return [{ intertype: 'return', type: type, - value: item.tokens[2] ? parseLLVMSegment(item.tokens.slice(2)) : null, + value: (item.tokens[2] && type !== 'void') ? parseLLVMSegment(item.tokens.slice(2)) : null, lineNum: item.lineNum }]; } diff --git a/src/jsifier.js b/src/jsifier.js index 7a25983c..4bc20758 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -338,8 +338,10 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { addedLibraryItems[ident] = true; var snippet = Library[ident]; + var redirectedIdent = null; if (typeof snippet === 'string') { if (Library[snippet]) { + redirectedIdent = snippet; snippet = Library[snippet]; // redirection for aliases } } else if (typeof snippet === 'object') { @@ -369,6 +371,9 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { } var deps = Library[ident + '__deps']; + if (redirectedIdent) { + deps = (deps || []).concat(Library[redirectedIdent + '__deps']); + } return 'var _' + ident + '=' + snippet + (deps ? '\n' + deps.map(addFromLibrary).join('\n') : ''); } item.JS = addFromLibrary(shortident); diff --git a/src/library.js b/src/library.js index 81eb358a..b875e131 100644 --- a/src/library.js +++ b/src/library.js @@ -603,6 +603,7 @@ var Library = { llvm_memcpy_p0i8_p0i8_i32: 'memcpy', llvm_memcpy_p0i8_p0i8_i64: 'memcpy', + memmove__deps: ['memcpy'], memmove: function(dest, src, num, idunno) { // not optimized! if (num === 0) return; // will confuse malloc if 0 diff --git a/src/modules.js b/src/modules.js index 4d811b56..4d225057 100644 --- a/src/modules.js +++ b/src/modules.js @@ -5,7 +5,7 @@ var LLVM_STYLE = null; var LLVM = { LINKAGES: set('private', 'linker_private', 'linker_private_weak', 'linker_private_weak_def_auto', 'internal', 'available_externally', 'linkonce', 'common', 'weak', 'appending', 'extern_weak', 'linkonce_odr', - 'weak_odr', 'externally_visible', 'dllimport', 'dllexport'), + 'weak_odr', 'externally_visible', 'dllimport', 'dllexport', 'unnamed_addr'), PARAM_ATTR: set('noalias', 'signext', 'zeroext', 'inreg', 'byval', 'sret', 'nocapture', 'nest'), CALLING_CONVENTIONS: set('ccc', 'fastcc', 'coldcc', 'cc10') }; @@ -18,8 +18,8 @@ var Debugging = { var metadataToParentMetadata = {}; var metadataToFilename = {}; - var form1 = new RegExp(/^ .*, !dbg !(\d+)$/); - var form2 = new RegExp(/^ .*, !dbg !(\d+) +; \[#uses=\d+\]$/); + var form1 = new RegExp(/^ .*, !dbg !(\d+) +$/); + var form2 = new RegExp(/^ .*, !dbg !(\d+) +; .*$/); var form3 = new RegExp(/^!(\d+) = metadata !{i32 (\d+), i32 \d+, metadata !(\d+), .*}$/); var form3a = new RegExp(/^!(\d+) = metadata !{i32 \d+, metadata !\d+, i32 \d+, i32 \d+, metadata !(\d+), i32 \d+} ; \[ DW_TAG_lexical_block \]$/); var form3ab = new RegExp(/^!(\d+) = metadata !{i32 \d+, i32 \d+, metadata !(\d+), .*$/); @@ -30,7 +30,11 @@ var Debugging = { var form5 = new RegExp(/^!(\d+) = metadata !{.*$/); var form6 = new RegExp(/^ (tail )?call void \@llvm.dbg.\w+\(metadata .*$/); + var debugComment = new RegExp(/; +\[debug line = \d+:\d+\]/); + var ret = lines.map(function(line, i) { + line = line.replace(debugComment, ''); + if (form6.exec(line)) return ';'; var calc = form1.exec(line) || form2.exec(line); @@ -51,7 +55,7 @@ var Debugging = { } calc = form3b.exec(line); if (calc) { - metadataToFilename[calc[1]] = calc[3] + '/' + calc[2]; + metadataToFilename[calc[1]] = /* LLVM 2.8<= : calc[3] + '/' + */ calc[2]; return ';'; } calc = form3c.exec(line) || form4.exec(line) || form5.exec(line); |