diff options
author | alon@honor <none@none> | 2010-09-27 18:21:38 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-09-27 18:21:38 -0700 |
commit | 464af95722c2fb433d9cde57ca3cd8cca0cdad59 (patch) | |
tree | 2fe224208972ab34ae04b021c7aac9b196fbb69e /src | |
parent | 03c175f81ddb6aeac0295193baeddc12fc692ef8 (diff) |
clean out parseBitcast
Diffstat (limited to 'src')
-rw-r--r-- | src/intertyper.js | 4 | ||||
-rw-r--r-- | src/parseTools.js | 25 |
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; } |