aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/intertyper.js2
-rw-r--r--src/jsifier.js5
-rw-r--r--src/library.js1
-rw-r--r--src/modules.js12
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);