aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-10-23 11:24:35 -0700
committeralon@honor <none@none>2010-10-23 11:24:35 -0700
commitbdf551e4e041814bab99f0f774684fb3c5bd812f (patch)
tree5a556136aaec037ffa07387f56b2c2ea9ac8f51f /src
parent3e7515aa768ada28f640c172a7c355146e75004d (diff)
optimize out unneeded item[0]
Diffstat (limited to 'src')
-rw-r--r--src/analyzer.js2
-rw-r--r--src/intertyper.js28
-rw-r--r--src/jsifier.js12
-rw-r--r--src/parseTools.js6
-rw-r--r--src/utility.js7
5 files changed, 28 insertions, 27 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index 91b1b884..2ee43d6c 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -215,7 +215,7 @@ function analyzer(data) {
ident: item.ident,
type: item.value.type,
origin: item.value.intertype,
- uses: parseInt(item.value.tokens.slice(-1)[0].item[0].tokens[0].text.split('=')[1]),
+ uses: parseInt(item.value.tokens.slice(-1)[0].item.tokens[0].text.split('=')[1]),
};
}
});
diff --git a/src/intertyper.js b/src/intertyper.js
index 6dba5db9..f5302829 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -49,7 +49,7 @@ function intertyper(data) {
var quotes = 0;
var lastToken = null;
var i = 0;
- var CHUNKSIZE = 50; // How much forward to peek forward. Too much means too many string segments copied
+ var CHUNKSIZE = 64; // How much forward to peek forward. Too much means too many string segments copied
// Note: '{' is not an encloser, as its use in functions is split over many lines
var enclosers = {
'[': 0,
@@ -150,7 +150,7 @@ function intertyper(data) {
lineNum: item.lineNum,
};
if (inner) {
- return [item];
+ return item;
} else {
this.forwardItem(item, 'Triager');
}
@@ -243,7 +243,7 @@ function intertyper(data) {
fields = [item.tokens[3].text];
} else if (item.tokens[3].text != 'opaque') {
if (item.tokens[3].type == '<') { // type <{ i8 }> XXX - check spec
- item.tokens[3] = tokenizer.processItem({ lineText: '{ ' + item.tokens[3].item[0].tokens[0].text + ' }' }, true)[0].tokens[0];
+ item.tokens[3] = tokenizer.processItem({ lineText: '{ ' + item.tokens[3].item.tokens[0].text + ' }' }, true).tokens[0];
}
var subTokens = item.tokens[3].tokens;
subTokens.push({text:','});
@@ -276,14 +276,14 @@ function intertyper(data) {
if (ident == '@llvm.global_ctors') {
ret.ctors = [];
if (item.tokens[3].item) {
- var subTokens = item.tokens[3].item[0].tokens;
+ var subTokens = item.tokens[3].item.tokens;
splitTokenList(subTokens).forEach(function(segment) {
ret.ctors.push(segment[1].tokens.slice(-1)[0].text);
});
}
} else {
if (item.tokens[3].type == '<') { // type <{ i8 }> XXX - check spec
- item.tokens[3] = item.tokens[3].item[0].tokens;
+ item.tokens[3] = item.tokens[3].item.tokens;
}
if (item.tokens[3].text == 'c')
@@ -367,8 +367,8 @@ function intertyper(data) {
} else {
item.intertype = 'load';
if (item.tokens[2].text == 'bitcast') {
- item.pointer = item.tokens[3].item[0].tokens[1].text;
- item.originalType = item.tokens[3].item[0].tokens[0].text;
+ item.pointer = item.tokens[3].item.tokens[1].text;
+ item.originalType = item.tokens[3].item.tokens[0].text;
} else {
item.pointer = item.tokens[2].text;
}
@@ -404,9 +404,9 @@ function intertyper(data) {
var first = 0;
while (!isType(item.tokens[first].text)) first++;
var last = getTokenIndexByText(item.tokens, ';');
- var segment = [ item.tokens[first], { text: 'getelementptr' }, null, { item: [ {
+ var segment = [ item.tokens[first], { text: 'getelementptr' }, null, { item: {
tokens: item.tokens.slice(first, last)
- } ] } ];
+ } } ];
var data = parseLLVMFunctionCall(segment);
item.intertype = 'getelementptr';
item.type = data.type;
@@ -442,7 +442,7 @@ function intertyper(data) {
}
item.params = [];
} else {
- item.params = parseParamTokens(item.tokens[3].item[0].tokens);
+ item.params = parseParamTokens(item.tokens[3].item.tokens);
}
if (item.indent == 2) {
// standalone call - not in assign
@@ -466,7 +466,7 @@ function intertyper(data) {
cleanOutTokens(['alignstack', 'alwaysinline', 'inlinehint', 'naked', 'noimplicitfloat', 'noinline', 'alwaysinline attribute.', 'noredzone', 'noreturn', 'nounwind', 'optsize', 'readnone', 'readonly', 'ssp', 'sspreq'], item.tokens, 4);
item.type = item.tokens[1].text;
item.ident = item.tokens[2].text;
- item.params = parseParamTokens(item.tokens[3].item[0].tokens);
+ item.params = parseParamTokens(item.tokens[3].item.tokens);
item.toLabel = toNiceIdent(item.tokens[6].text);
item.unwindLabel = toNiceIdent(item.tokens[9].text);
if (item.indent == 2) {
@@ -498,8 +498,8 @@ function intertyper(data) {
var last = getTokenIndexByText(item.tokens, ';');
item.params = splitTokenList(item.tokens.slice(2, last)).map(function(segment) {
return {
- label: toNiceIdent(segment[0].item[0].tokens[2].text),
- value: toNiceIdent(segment[0].item[0].tokens[0].text),
+ label: toNiceIdent(segment[0].item.tokens[2].text),
+ value: toNiceIdent(segment[0].item.tokens[0].text),
};
});
this.forwardItem(item, 'Reintegrator');
@@ -583,7 +583,7 @@ function intertyper(data) {
processItem: function(item) {
function parseSwitchLabels(item) {
var ret = [];
- var tokens = item.item[0].tokens;
+ var tokens = item.item.tokens;
while (tokens.length > 0) {
ret.push({
value: tokens[1].text,
diff --git a/src/jsifier.js b/src/jsifier.js
index 54ab8564..82330a16 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -137,12 +137,12 @@ function JSify(data) {
} else if (segment[1].text == 'zeroinitializer') {
return JSON.stringify(makeEmptyStruct(segment[0].text));
} else if (segment[1].text in searchable('bitcast', 'inttoptr', 'ptrtoint')) { // TODO: Use parse/finalizeLLVMFunctionCall
- var type = segment[2].item[0].tokens.slice(-1)[0].text; // TODO: Use this?
- return handleSegment(segment[2].item[0].tokens.slice(0, -2));
+ var type = segment[2].item.tokens.slice(-1)[0].text; // TODO: Use this?
+ return handleSegment(segment[2].item.tokens.slice(0, -2));
} else if (segment[1].text in PARSABLE_LLVM_FUNCTIONS) {
return finalizeLLVMFunctionCall(parseLLVMFunctionCall(segment));
} else if (segment[1].text == 'add') {
- var subSegments = splitTokenList(segment[2].item[0].tokens);
+ var subSegments = splitTokenList(segment[2].item.tokens);
return '(' + handleSegment(subSegments[0]) + ' + ' + handleSegment(subSegments[1]) + ')';
} else if (segment[1].type == '{') {
// struct
@@ -150,7 +150,7 @@ function JSify(data) {
return '[' + alignStruct(handleSegments(segment[1].tokens), type).join(', ') + ']';
} else if (segment[1].type == '[') {
var type = segment[0].text;
- return '[' + alignStruct(handleSegments(segment[1].item[0].tokens), type).join(', ') + ']';
+ return '[' + alignStruct(handleSegments(segment[1].item.tokens), type).join(', ') + ']';
} else if (segment.length == 2) {
return parseNumerical(toNiceIdent(segment[1].text));
} else {
@@ -161,7 +161,7 @@ function JSify(data) {
}
if (value.item) {
// list of items
- return makePointer('[ ' + alignStruct(handleSegments(value.item[0].tokens), type).join(', ') + ' ]', null, 'ALLOC_STATIC', type);
+ return makePointer('[ ' + alignStruct(handleSegments(value.item.tokens), type).join(', ') + ' ]', null, 'ALLOC_STATIC', type);
} else if (value.type == '{') {
// struct
return makePointer('[ ' + alignStruct(handleSegments(value.tokens), type).join(', ') + ' ]', null, 'ALLOC_STATIC', type);
@@ -260,7 +260,7 @@ function JSify(data) {
// We have this function all reconstructed, go and finalize it's JS!
var hasVarArgs = false;
- var params = parseParamTokens(func.params.item[0].tokens).map(function(param) {
+ var params = parseParamTokens(func.params.item.tokens).map(function(param) {
if (param.intertype == 'varargs') {
hasVarArgs = true;
return null;
diff --git a/src/parseTools.js b/src/parseTools.js
index 7e941ef5..c587a89d 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -102,7 +102,7 @@ function isFunctionDef(token) {
if (nonPointing in set('()', '(...)')) return true;
if (!token.item) return false;
var fail = false;
- splitTokenList(token.item[0].tokens).forEach(function(segment) {
+ splitTokenList(token.item.tokens).forEach(function(segment) {
var subtoken = segment[0];
fail = fail || !isType(subtoken.text) || segment.length > 1;
});
@@ -114,7 +114,7 @@ function isFunctionType(type) {
if (parts.length != 2) return false;
if (pointingLevels(type) !== 1) return false;
var text = removeAllPointing(parts[1]);
- var ret = isType(parts[0]) && isFunctionDef({ text: text, item: [{tokens: [{text: text.substr(1, text.length-2)}]}] });
+ var ret = isType(parts[0]) && isFunctionDef({ text: text, item: {tokens: [{text: text.substr(1, text.length-2)}]} });
return ret;
}
@@ -336,7 +336,7 @@ function parseLLVMFunctionCall(segment) {
var ret = {
intertype: segment[1].text,
type: segment[0].text,
- params: parseParamTokens(segment[2].item[0].tokens),
+ params: parseParamTokens(segment[2].item.tokens),
};
ret.ident = toNiceIdent(ret.params[0].ident);
return ret;
diff --git a/src/utility.js b/src/utility.js
index c28077e8..3085fc61 100644
--- a/src/utility.js
+++ b/src/utility.js
@@ -1,15 +1,16 @@
// General JS utilities
function dump(item) {
+ var CHUNK = 500;
function lineify(text) {
var ret = '';
while (text.length > 0) {
- if (text.length < 80) {
+ if (text.length < CHUNK) {
ret += text;
return ret;
}
- var subText = text.substring(60, 80);
- var index = 61+Math.max(subText.indexOf(','), subText.indexOf(']'), subText.indexOf('}'), 21);
+ var subText = text.substring(CHUNK-20, CHUNK);
+ var index = CHUNK-19+Math.max(subText.indexOf(','), subText.indexOf(']'), subText.indexOf('}'), 21);
ret += text.substr(0,index) + '\n';
text = '// ' + text.substr(index);
}