aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-09-14 22:54:50 -0700
committeralon@honor <none@none>2010-09-14 22:54:50 -0700
commit7e3adf52f1c1a408ef21267ba96ebd3ed5d1bec0 (patch)
tree62cb5a2d412746854816663e7ca001ee795bb1e3
parente212f73dd985e270e8cf24d4fc88dcb9b9faa799 (diff)
load&bitcast combo support
-rw-r--r--src/parser.js13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/parser.js b/src/parser.js
index 6f737c43..f3ce9a68 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -679,10 +679,7 @@ function intertyper(data) {
processItem: function(item) {
item.pointerType = item.tokens[1];
item.type = { text: removePointing(item.pointerType.text) };
- if (item.tokens[2].text != 'getelementptr') {
- item.intertype = 'load';
- item.pointer = item.tokens[2];
- } else {
+ if (item.tokens[2].text == 'getelementptr') {
var last = getTokenIndexByText(item.tokens, ';');
var gepTokens = item.tokens.slice(1, last); // without 'load'
var segment = [ gepTokens[2], gepTokens[0], null ].concat(gepTokens.slice(3));
@@ -692,6 +689,14 @@ function intertyper(data) {
item.params = data.params;
item.pointer = { text: data.ident };
item.value = data.value;
+ } else {
+ item.intertype = 'load';
+ if (item.tokens[2].text == 'bitcast') {
+ item.pointer = item.tokens[3].item[0].tokens[1]; // XXX item without [0], also below
+ item.originalType = item.tokens[3].item[0].tokens[0];
+ } else {
+ item.pointer = item.tokens[2];
+ }
}
item.ident = item.pointer.text;
return [item];