diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-09-29 14:43:28 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-10-02 17:31:36 -0700 |
commit | 1a9b9af1c54afd76649715b1f1c8db358bbcdaeb (patch) | |
tree | cbeb1c630a6cc3a05797236363be78f414c5832d /src/parseTools.js | |
parent | f2965d6c365ccd56d8a3ce935b6ab63fb72ca5ea (diff) |
add explicit vars for illegal mathops and landingpad
Diffstat (limited to 'src/parseTools.js')
-rw-r--r-- | src/parseTools.js | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index 8dd6dccf..863d6bba 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -2156,7 +2156,13 @@ function processMathop(item) { // If this is in legalization mode, steal the assign and assign into two vars if (legalizedI64s) { assert(item.assignTo); - var ret = 'var ' + item.assignTo + '$0=' + result[0] + ';var ' + item.assignTo + '$1=' + result[1] + ';'; + if (ASM_JS) { + var ret = item.assignTo + '$0=' + result[0] + ';' + item.assignTo + '$1=' + result[1] + ';'; + addVariable(item.assignTo + '$0', 'i32'); + addVariable(item.assignTo + '$1', 'i32'); + } else { + var ret = 'var ' + item.assignTo + '$0=' + result[0] + ';var ' + item.assignTo + '$1=' + result[1] + ';'; + } item.assignTo = null; return ret; } else { @@ -2561,16 +2567,21 @@ function deParen(text) { function addVariable(ident, type, funcData) { funcData = funcData || Framework.currItem.funcData; assert(type); - funcData.variables[ident] = { - ident: ident, - type: type, - origin: 'added', - lineNum: 0, - rawLinesIndex: 0, - hasValueTaken: false, - pointingLevels: 0, - uses: 0, - impl: VAR_EMULATED - }; + var old = funcData.variables[ident]; + if (old) { + assert(old.type === type); + } else { + funcData.variables[ident] = { + ident: ident, + type: type, + origin: 'added', + lineNum: 0, + rawLinesIndex: 0, + hasValueTaken: false, + pointingLevels: 0, + uses: 0, + impl: VAR_EMULATED + }; + } } |