Merge pull request #8250 from wdimac/fix/loop-protect-when-label-offset

Stop inject from mangling label when offset from loop
This commit is contained in:
Logan Tegman
2016-05-31 21:20:31 -07:00
2 changed files with 20 additions and 2 deletions

View File

@ -130,6 +130,7 @@ if (typeof DEBUG === 'undefined') { DEBUG = true; }
var ignore = {}; var ignore = {};
var pushonly = {}; var pushonly = {};
var labelPostion = null; var labelPostion = null;
var labelIndex = -1;
function insertReset(lineNum, line, matchPosition) { function insertReset(lineNum, line, matchPosition) {
// recompile the line with the reset **just** before the actual loop // recompile the line with the reset **just** before the actual loop
@ -179,6 +180,7 @@ if (typeof DEBUG === 'undefined') { DEBUG = true; }
if (directlyBeforeLoop(index, lineNum, lines)) { if (directlyBeforeLoop(index, lineNum, lines)) {
DEBUG && debug('- found a label: "' + labelMatch[0] + '"'); // jshint ignore:line DEBUG && debug('- found a label: "' + labelMatch[0] + '"'); // jshint ignore:line
labelPostion = lineNum; labelPostion = lineNum;
labelIndex = index;
} else { } else {
DEBUG && debug('- ignored "label", false positive'); // jshint ignore:line DEBUG && debug('- ignored "label", false positive'); // jshint ignore:line
} }
@ -309,10 +311,11 @@ if (typeof DEBUG === 'undefined') { DEBUG = true; }
DEBUG && debug('- reset inserted above matched label on line ' + labelPostion); // jshint ignore:line DEBUG && debug('- reset inserted above matched label on line ' + labelPostion); // jshint ignore:line
if (recompiled[labelPostion] === undefined) { if (recompiled[labelPostion] === undefined) {
labelPostion--; labelPostion--;
matchPosition = 0; labelIndex = 0;
} }
recompiled[labelPostion] = insertReset(printLineNumber, recompiled[labelPostion], matchPosition); recompiled[labelPostion] = insertReset(printLineNumber, recompiled[labelPostion], labelIndex);
labelPostion = null; labelPostion = null;
labelIndex = -1;
} }
} }

View File

@ -0,0 +1,15 @@
'use strict';
let loopProtect = require('../../../public/js/lib/loop-protect/loop-protect');
let test = require('tape');
test('LoopProtect injection', function(t) {
t.plan(1);
// Label indented 2 spaces - loop indented three spaces
t.true(
loopProtect(' loop1:\n while(true) {\n\n}').indexOf('loop1') > 0,
'Should keep loop label intact if not lined up with loop.'
);
});