diff options
author | alon@honor <none@none> | 2010-10-23 11:24:35 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-10-23 11:24:35 -0700 |
commit | bdf551e4e041814bab99f0f774684fb3c5bd812f (patch) | |
tree | 5a556136aaec037ffa07387f56b2c2ea9ac8f51f | |
parent | 3e7515aa768ada28f640c172a7c355146e75004d (diff) |
optimize out unneeded item[0]
-rw-r--r-- | src/analyzer.js | 2 | ||||
-rw-r--r-- | src/intertyper.js | 28 | ||||
-rw-r--r-- | src/jsifier.js | 12 | ||||
-rw-r--r-- | src/parseTools.js | 6 | ||||
-rw-r--r-- | src/utility.js | 7 |
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); } |