aboutsummaryrefslogtreecommitdiff
path: root/src/parseTools.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-09-29 14:43:28 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-02 17:31:36 -0700
commit1a9b9af1c54afd76649715b1f1c8db358bbcdaeb (patch)
treecbeb1c630a6cc3a05797236363be78f414c5832d /src/parseTools.js
parentf2965d6c365ccd56d8a3ce935b6ab63fb72ca5ea (diff)
add explicit vars for illegal mathops and landingpad
Diffstat (limited to 'src/parseTools.js')
-rw-r--r--src/parseTools.js35
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
+ };
+ }
}