aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/intertyper.js39
-rw-r--r--src/parseTools.js6
2 files changed, 28 insertions, 17 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 59eb5b55..ca2ad481 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -8,30 +8,41 @@ function intertyper(data) {
substrate = new Substrate('Intertyper');
+ var IGNORE_FUNCTIONS = false; // Debugging
+
// Line splitter.
substrate.addZyme('LineSplitter', {
processItem: function(item) {
var lines = item.llvmText.split('\n');
var ret = [];
var inContinual = false;
+ var inFunction = false;
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
- if (inContinual || new RegExp(/^\ +to.*/g).test(line)) {
- // to after invoke
- ret.slice(-1)[0].lineText += line;
- if (new RegExp(/^\ +\]/g).test(line)) { // end of llvm switch
- inContinual = false;
- }
- } else {
- ret.push({
- lineText: line,
- lineNum: i + 1,
- });
- if (new RegExp(/^\ +switch\ .*/g).test(line)) {
- // beginning of llvm switch
- inContinual = true;
+ if (/^define .*/.test(line)) {
+ inFunction = true;
+ }
+ if (!(IGNORE_FUNCTIONS && inFunction)) {
+ if (inContinual || new RegExp(/^\ +to.*/g).test(line)) {
+ // to after invoke
+ ret.slice(-1)[0].lineText += line;
+ if (new RegExp(/^\ +\]/g).test(line)) { // end of llvm switch
+ inContinual = false;
+ }
+ } else {
+ ret.push({
+ lineText: line,
+ lineNum: i + 1,
+ });
+ if (new RegExp(/^\ +switch\ .*/g).test(line)) {
+ // beginning of llvm switch
+ inContinual = true;
+ }
}
}
+ if (/^}.*/.test(line)) {
+ inFunction = false;
+ }
}
this.forwardItems(ret.filter(function(item) { return item.lineText; }), 'Tokenizer');
},
diff --git a/src/parseTools.js b/src/parseTools.js
index 668eb56b..542f97dd 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -92,12 +92,12 @@ function isFunctionDef(token) {
var nonPointing = removeAllPointing(text);
if (nonPointing[0] != '(' || nonPointing.substr(-1) != ')')
return false;
- if (nonPointing in set('()', '(...)')) return true;
+ if (nonPointing === '()') return true;
if (!token.item) return false;
var fail = false;
splitTokenList(token.item.tokens).forEach(function(segment) {
- var subtoken = segment[0];
- fail = fail || !isType(subtoken.text) || segment.length > 1;
+ var subtext = segment[0].text;
+ fail = fail || segment.length > 1 || !(isType(subtext) || subtext == '...');
});
return !fail;
}