in src/parser/WDL/hermes/wdl_parser.js [5684:5726]
function _next(ctx) {
var tokens = []
var mode = ctx.mode_stack[ctx.mode_stack.length - 1]
for (var i = 0; i < regex[mode].length; i++) {
var match = regex[mode][i].regex.exec(ctx.string);
if (match != null && match.index == 0) {
for (var j = 0; j < regex[mode][i].outputs.length; j++) {
var terminal = regex[mode][i].outputs[j].terminal;
var group = regex[mode][i].outputs[j].group;
var func = regex[mode][i].outputs[j].function;
var stack_push = regex[mode][i].outputs[j].stack_push;
var action = regex[mode][i].outputs[j].action;
if (stack_push !== undefined) {
ctx.mode_stack.push(stack_push)
} else if (action !== undefined) {
if (action == 'pop') {
ctx.mode_stack.pop()
}
} else {
func = (func == null) ? default_action : func;
var source_string = group != null ? match[group] : ""
// Ugh! JavaScript why you no have regex group indexes?!
var group_line = ctx.line
var group_col = ctx.col
try {
var mult_regex = new MultiRegExp(regex[mode][i].regex.source);
var mult_groups = mult_regex.exec(ctx.string)
if (group != null && group > 0) {
var lc = advance_line_col(match[0], mult_groups[group-1].index, ctx.line, ctx.col)
group_line = lc.line
group_col = lc.col
}
} catch(err) {}
// ^ Literally the worst thing ever
func(ctx, terminal, source_string, group_line, group_col)
}
}
advance_string(ctx, match[0])
return true
}
}
return false
}