aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-09-27 18:21:38 -0700
committeralon@honor <none@none>2010-09-27 18:21:38 -0700
commit464af95722c2fb433d9cde57ca3cd8cca0cdad59 (patch)
tree2fe224208972ab34ae04b021c7aac9b196fbb69e /src
parent03c175f81ddb6aeac0295193baeddc12fc692ef8 (diff)
clean out parseBitcast
Diffstat (limited to 'src')
-rw-r--r--src/intertyper.js4
-rw-r--r--src/parseTools.js25
2 files changed, 9 insertions, 20 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 0d19b3b9..f8c5ea06 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -340,9 +340,7 @@ function intertyper(data) {
item.type = { text: removePointing(item.pointerType.text) };
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));
- var data = parseFunctionCall(segment);
+ var data = parseFunctionCall(item.tokens.slice(1, last));
item.intertype = 'fastgetelementptrload';
item.type = data.type;
item.params = data.params;
diff --git a/src/parseTools.js b/src/parseTools.js
index a2bb56ac..9a39c92d 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -241,10 +241,8 @@ function parseParamTokens(params) {
ident: '_' + absIndex,
});
}
- } else if (segment[1].text === 'getelementptr') {
+ } else if (segment[1].text in PARSABLE_FUNCTIONS) {
ret.push(parseFunctionCall(segment));
- } else if (segment[1].text === 'bitcast') {
- ret.push(parseBitcast(segment));
} else {
if (segment[2] && segment[2].text == 'to') { // part of bitcast params
segment = segment.slice(0, 2);
@@ -275,34 +273,27 @@ function cleanSegment(segment) {
return segment;
}
+PARSABLE_FUNCTIONS = searchable('getelementptr', 'bitcast');
+
// Parses a function call of form
// TYPE functionname MODIFIERS (...)
// e.g.
// i32* getelementptr inbounds (...)
function parseFunctionCall(segment) {
-//print("Parse functioncall: " + dump(segment));
segment = segment.slice(0);
segment = cleanSegment(segment);
+ // Remove additional modifiers
+ if (!segment[2] || !segment[2].item) {
+ segment.splice(2, 1);
+ }
assertTrue(['inreg', 'byval'].indexOf(segment[1].text) == -1);
+ assert(segment[1].text in PARSABLE_FUNCTIONS);
var ret = {
intertype: segment[1].text,
type: segment[0],
- params: parseParamTokens(segment[3].item[0].tokens),
- };
- ret.ident = toNiceIdent(ret.params[0].ident);
- return ret;
-}
-
-// TODO: use this
-function parseBitcast(segment) {
- //print('zz parseBC pre: ' + dump(segment));
- var ret = {
- intertype: 'bitcast',
- type: segment[0],
params: parseParamTokens(segment[2].item[0].tokens),
};
ret.ident = toNiceIdent(ret.params[0].ident);
-//print('zz parseBC: ' + dump(ret));
return ret;
}