aboutsummaryrefslogtreecommitdiff
path: root/src/analyzer.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-05 18:06:27 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-07 14:23:23 -0800
commit94ca29f86bf44bd7b072113093625e079266ae93 (patch)
treed0fc93cb69a9b367c7faa02a95ed7b607e77b537 /src/analyzer.js
parent67f423ed8e38e76b11bac0347d4713e349d6b1b9 (diff)
properly legalize storing an entire structure literal
Diffstat (limited to 'src/analyzer.js')
-rw-r--r--src/analyzer.js7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index 83f4317a..cbede04e 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -151,7 +151,9 @@ function analyzer(data, sidePass) {
if (isNumber(value.ident)) {
return getLegalLiterals(value.ident, bits);
} else if (value.intertype == 'structvalue') {
- return getLegalStructuralParts(value);
+ return getLegalStructuralParts(value).map(function(part) {
+ return { ident: part.ident, bits: part.type.substr(1) };
+ });
} else if (value.ident == 'zeroinitializer') {
return getStructuralTypeParts(value.type).map(function(part) {
return { ident: 0, bits: 32 };
@@ -281,8 +283,7 @@ function analyzer(data, sidePass) {
case 'store': {
var toAdd = [];
bits = getBits(item.valueType);
- var elements;
- elements = getLegalVars(item.value.ident, bits);
+ var elements = getLegalParams([item.value], bits)[0];
var j = 0;
elements.forEach(function(element) {
var tempVar = '$st$' + i + '$' + j;