Revert "aligned up some ifelses using leading `then`"
This reverts commit b84063bc3f
.
This commit is contained in:
parent
ecd4722b7c
commit
7170536021
12
lib/nodes.js
12
lib/nodes.js
|
@ -467,7 +467,7 @@
|
||||||
this.soak = _arg2;
|
this.soak = _arg2;
|
||||||
this.args = _arg;
|
this.args = _arg;
|
||||||
Call.__super__.constructor.call(this);
|
Call.__super__.constructor.call(this);
|
||||||
this["new"] = '';
|
this.isNew = false;
|
||||||
this.isSuper = variable === 'super';
|
this.isSuper = variable === 'super';
|
||||||
this.variable = this.isSuper ? null : variable;
|
this.variable = this.isSuper ? null : variable;
|
||||||
this.args || (this.args = []);
|
this.args || (this.args = []);
|
||||||
|
@ -478,7 +478,7 @@
|
||||||
__extends(Call, Base);
|
__extends(Call, Base);
|
||||||
Call.prototype.children = ['variable', 'args'];
|
Call.prototype.children = ['variable', 'args'];
|
||||||
Call.prototype.newInstance = function() {
|
Call.prototype.newInstance = function() {
|
||||||
this["new"] = 'new ';
|
this.isNew = true;
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
Call.prototype.superReference = function(o) {
|
Call.prototype.superReference = function(o) {
|
||||||
|
@ -506,7 +506,7 @@
|
||||||
rite = new Value(left);
|
rite = new Value(left);
|
||||||
}
|
}
|
||||||
rite = new Call(rite, this.args);
|
rite = new Call(rite, this.args);
|
||||||
rite["new"] = this["new"];
|
rite.isNew = this.isNew;
|
||||||
left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
|
left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
|
||||||
return new If(left, new Value(rite), {
|
return new If(left, new Value(rite), {
|
||||||
soak: true
|
soak: true
|
||||||
|
@ -563,7 +563,7 @@
|
||||||
}
|
}
|
||||||
return _result;
|
return _result;
|
||||||
}).call(this)).join(', ');
|
}).call(this)).join(', ');
|
||||||
return this.isSuper ? this.compileSuper(args, o) : this["new"] + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
|
return this.isSuper ? this.compileSuper(args, o) : (this.isNew ? 'new ' : '') + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
|
||||||
};
|
};
|
||||||
Call.prototype.compileSuper = function(args, o) {
|
Call.prototype.compileSuper = function(args, o) {
|
||||||
return "" + (this.superReference(o)) + ".call(this" + (args.length ? ', ' : '') + args + ")";
|
return "" + (this.superReference(o)) + ".call(this" + (args.length ? ', ' : '') + args + ")";
|
||||||
|
@ -574,7 +574,7 @@
|
||||||
if (this.isSuper) {
|
if (this.isSuper) {
|
||||||
return "" + (this.superReference(o)) + ".apply(this, " + splatargs + ")";
|
return "" + (this.superReference(o)) + ".apply(this, " + splatargs + ")";
|
||||||
}
|
}
|
||||||
if (!this["new"]) {
|
if (!this.isNew) {
|
||||||
base = new Value(this.variable);
|
base = new Value(this.variable);
|
||||||
if ((name = base.properties.pop()) && base.isComplex()) {
|
if ((name = base.properties.pop()) && base.isComplex()) {
|
||||||
ref = o.scope.freeVariable('this');
|
ref = o.scope.freeVariable('this');
|
||||||
|
@ -949,7 +949,7 @@
|
||||||
if (obj.base instanceof Parens) {
|
if (obj.base instanceof Parens) {
|
||||||
_ref4 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref4[0], idx = _ref4[1];
|
_ref4 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref4[0], idx = _ref4[1];
|
||||||
} else {
|
} else {
|
||||||
idx = isObject ? (obj.tags["this"] ? obj.properties[0].name : obj) : new Literal(0);
|
idx = isObject ? obj.tags["this"] ? obj.properties[0].name : obj : new Literal(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
acc = IDENTIFIER.test(idx.unwrap().value || 0);
|
acc = IDENTIFIER.test(idx.unwrap().value || 0);
|
||||||
|
|
|
@ -143,8 +143,9 @@ exports.Lexer = class Lexer
|
||||||
when '"'
|
when '"'
|
||||||
return 0 unless string = @balancedString @chunk, [['"', '"'], ['#{', '}']]
|
return 0 unless string = @balancedString @chunk, [['"', '"'], ['#{', '}']]
|
||||||
if 0 < string.indexOf '#{', 1
|
if 0 < string.indexOf '#{', 1
|
||||||
then @interpolateString string.slice 1, -1
|
@interpolateString string.slice 1, -1
|
||||||
else @token 'STRING', @escapeLines string
|
else
|
||||||
|
@token 'STRING', @escapeLines string
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
@line += count string, '\n'
|
@line += count string, '\n'
|
||||||
|
@ -158,8 +159,9 @@ exports.Lexer = class Lexer
|
||||||
quote = heredoc.charAt 0
|
quote = heredoc.charAt 0
|
||||||
doc = @sanitizeHeredoc match[2], {quote, indent: null}
|
doc = @sanitizeHeredoc match[2], {quote, indent: null}
|
||||||
if quote is '"' and 0 <= doc.indexOf '#{'
|
if quote is '"' and 0 <= doc.indexOf '#{'
|
||||||
then @interpolateString doc, heredoc: yes
|
@interpolateString doc, heredoc: yes
|
||||||
else @token 'STRING', @makeString doc, quote, yes
|
else
|
||||||
|
@token 'STRING', @makeString doc, quote, yes
|
||||||
@line += count heredoc, '\n'
|
@line += count heredoc, '\n'
|
||||||
heredoc.length
|
heredoc.length
|
||||||
|
|
||||||
|
@ -444,8 +446,9 @@ exports.Lexer = class Lexer
|
||||||
for [tag, value], i in tokens
|
for [tag, value], i in tokens
|
||||||
@token '+', '+' if i
|
@token '+', '+' if i
|
||||||
if tag is 'TOKENS'
|
if tag is 'TOKENS'
|
||||||
then @tokens.push value...
|
@tokens.push value...
|
||||||
else @token 'STRING', @makeString value, '"', heredoc
|
else
|
||||||
|
@token 'STRING', @makeString value, '"', heredoc
|
||||||
@token ')', ')' if interpolated
|
@token ')', ')' if interpolated
|
||||||
tokens
|
tokens
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,9 @@ exports.Base = class Base
|
||||||
node = @unfoldSoak(o) or this
|
node = @unfoldSoak(o) or this
|
||||||
node.tab = o.indent
|
node.tab = o.indent
|
||||||
if o.level is LEVEL_TOP or node.isPureStatement() or not node.isStatement(o)
|
if o.level is LEVEL_TOP or node.isPureStatement() or not node.isStatement(o)
|
||||||
then node.compileNode o
|
node.compileNode o
|
||||||
else node.compileClosure o
|
else
|
||||||
|
node.compileClosure o
|
||||||
|
|
||||||
# Statements converted into expressions via closure-wrapping share a scope
|
# Statements converted into expressions via closure-wrapping share a scope
|
||||||
# object with their parent closure, to preserve the expected lexical scope.
|
# object with their parent closure, to preserve the expected lexical scope.
|
||||||
|
@ -101,7 +102,7 @@ exports.Base = class Base
|
||||||
containsPureStatement: ->
|
containsPureStatement: ->
|
||||||
@isPureStatement() or @contains (node, func) ->
|
@isPureStatement() or @contains (node, func) ->
|
||||||
func(node) or if node instanceof While or node instanceof For
|
func(node) or if node instanceof While or node instanceof For
|
||||||
then (node) -> node instanceof Return
|
(node) -> node instanceof Return
|
||||||
else func
|
else func
|
||||||
, (node) -> node.isPureStatement()
|
, (node) -> node.isPureStatement()
|
||||||
|
|
||||||
|
@ -407,14 +408,14 @@ exports.Call = class Call extends Base
|
||||||
|
|
||||||
constructor: (variable, @args, @soak) ->
|
constructor: (variable, @args, @soak) ->
|
||||||
super()
|
super()
|
||||||
@new = ''
|
@isNew = false
|
||||||
@isSuper = variable is 'super'
|
@isSuper = variable is 'super'
|
||||||
@variable = if @isSuper then null else variable
|
@variable = if @isSuper then null else variable
|
||||||
@args or= []
|
@args or= []
|
||||||
|
|
||||||
# Tag this invocation as creating a new instance.
|
# Tag this invocation as creating a new instance.
|
||||||
newInstance: ->
|
newInstance: ->
|
||||||
@new = 'new '
|
@isNew = true
|
||||||
this
|
this
|
||||||
|
|
||||||
# Grab the reference to the superclass' implementation of the current method.
|
# Grab the reference to the superclass' implementation of the current method.
|
||||||
|
@ -424,8 +425,9 @@ exports.Call = class Call extends Base
|
||||||
{name} = method
|
{name} = method
|
||||||
throw SyntaxError 'cannot call super on an anonymous function.' unless name
|
throw SyntaxError 'cannot call super on an anonymous function.' unless name
|
||||||
if method.klass
|
if method.klass
|
||||||
then "#{method.klass}.__super__.#{name}"
|
"#{method.klass}.__super__.#{name}"
|
||||||
else "#{name}.__super__.constructor"
|
else
|
||||||
|
"#{name}.__super__.constructor"
|
||||||
|
|
||||||
# Soaked chained invocations unfold into if/else ternary structures.
|
# Soaked chained invocations unfold into if/else ternary structures.
|
||||||
unfoldSoak: (o) ->
|
unfoldSoak: (o) ->
|
||||||
|
@ -437,7 +439,7 @@ exports.Call = class Call extends Base
|
||||||
left = new Literal @superReference o
|
left = new Literal @superReference o
|
||||||
rite = new Value left
|
rite = new Value left
|
||||||
rite = new Call rite, @args
|
rite = new Call rite, @args
|
||||||
rite.new = @new
|
rite.isNew = @isNew
|
||||||
left = new Literal "typeof #{ left.compile o } === \"function\""
|
left = new Literal "typeof #{ left.compile o } === \"function\""
|
||||||
return new If left, new Value(rite), soak: yes
|
return new If left, new Value(rite), soak: yes
|
||||||
call = this
|
call = this
|
||||||
|
@ -453,19 +455,22 @@ exports.Call = class Call extends Base
|
||||||
for call in list.reverse()
|
for call in list.reverse()
|
||||||
if ifn
|
if ifn
|
||||||
if call.variable instanceof Call
|
if call.variable instanceof Call
|
||||||
then call.variable = ifn
|
call.variable = ifn
|
||||||
else call.variable.base = ifn
|
else
|
||||||
|
call.variable.base = ifn
|
||||||
ifn = If.unfoldSoak o, call, 'variable'
|
ifn = If.unfoldSoak o, call, 'variable'
|
||||||
ifn
|
ifn
|
||||||
|
|
||||||
# Compile a vanilla function call.
|
# Compile a vanilla function call.
|
||||||
compileNode: (o) ->
|
compileNode: (o) ->
|
||||||
@variable?.tags.front = @tags.front
|
@variable?.tags.front = @tags.front
|
||||||
return @compileSplat o for arg in @args when arg instanceof Splat
|
for arg in @args when arg instanceof Splat
|
||||||
|
return @compileSplat o
|
||||||
args = (arg.compile o, LEVEL_LIST for arg in @args).join ', '
|
args = (arg.compile o, LEVEL_LIST for arg in @args).join ', '
|
||||||
if @isSuper
|
if @isSuper
|
||||||
then @compileSuper args, o
|
@compileSuper args, o
|
||||||
else @new + @variable.compile(o, LEVEL_ACCESS) + "(#{args})"
|
else
|
||||||
|
(if @isNew then 'new ' else '') + @variable.compile(o, LEVEL_ACCESS) + "(#{args})"
|
||||||
|
|
||||||
# `super()` is converted into a call against the superclass's implementation
|
# `super()` is converted into a call against the superclass's implementation
|
||||||
# of the current function.
|
# of the current function.
|
||||||
|
@ -479,7 +484,7 @@ exports.Call = class Call extends Base
|
||||||
compileSplat: (o) ->
|
compileSplat: (o) ->
|
||||||
splatargs = Splat.compileSplattedArray @args, o
|
splatargs = Splat.compileSplattedArray @args, o
|
||||||
return "#{ @superReference o }.apply(this, #{splatargs})" if @isSuper
|
return "#{ @superReference o }.apply(this, #{splatargs})" if @isSuper
|
||||||
unless @new
|
unless @isNew
|
||||||
base = new Value @variable
|
base = new Value @variable
|
||||||
if (name = base.properties.pop()) and base.isComplex()
|
if (name = base.properties.pop()) and base.isComplex()
|
||||||
ref = o.scope.freeVariable 'this'
|
ref = o.scope.freeVariable 'this'
|
||||||
|
@ -564,10 +569,11 @@ exports.Obj = class Obj extends Base
|
||||||
lastNoncom = last nonComments
|
lastNoncom = last nonComments
|
||||||
props = for prop, i in @properties
|
props = for prop, i in @properties
|
||||||
join = if i is @properties.length - 1
|
join = if i is @properties.length - 1
|
||||||
then ''
|
''
|
||||||
else if prop is lastNoncom or prop instanceof Comment
|
else if prop is lastNoncom or prop instanceof Comment
|
||||||
then '\n'
|
'\n'
|
||||||
else ',\n'
|
else
|
||||||
|
',\n'
|
||||||
indent = if prop instanceof Comment then '' else @idt 1
|
indent = if prop instanceof Comment then '' else @idt 1
|
||||||
if prop instanceof Value and prop.tags.this
|
if prop instanceof Value and prop.tags.this
|
||||||
prop = new Assign prop.properties[0].name, prop, 'object'
|
prop = new Assign prop.properties[0].name, prop, 'object'
|
||||||
|
@ -594,8 +600,9 @@ exports.Obj = class Obj extends Base
|
||||||
[key, val] = acc.cache o, LEVEL_LIST, ref
|
[key, val] = acc.cache o, LEVEL_LIST, ref
|
||||||
ref = val
|
ref = val
|
||||||
key = if acc instanceof Literal and IDENTIFIER.test key
|
key = if acc instanceof Literal and IDENTIFIER.test key
|
||||||
then '.' + key
|
'.' + key
|
||||||
else '[' + key + ']'
|
else
|
||||||
|
'[' + key + ']'
|
||||||
code += "#{obj}#{key} = #{val}, "
|
code += "#{obj}#{key} = #{val}, "
|
||||||
code += obj
|
code += obj
|
||||||
if o.level <= LEVEL_PAREN then code else "(#{code})"
|
if o.level <= LEVEL_PAREN then code else "(#{code})"
|
||||||
|
@ -623,10 +630,12 @@ exports.Arr = class Arr extends Base
|
||||||
for obj, i in @objects
|
for obj, i in @objects
|
||||||
code = obj.compile o, LEVEL_LIST
|
code = obj.compile o, LEVEL_LIST
|
||||||
objects.push (if obj instanceof Comment
|
objects.push (if obj instanceof Comment
|
||||||
then "\n#{code}\n#{o.indent}"
|
"\n#{code}\n#{o.indent}"
|
||||||
else if i is @objects.length - 1
|
else if i is @objects.length - 1
|
||||||
then code
|
code
|
||||||
else code + ', ')
|
else
|
||||||
|
code + ', '
|
||||||
|
)
|
||||||
objects = objects.join ''
|
objects = objects.join ''
|
||||||
if 0 < objects.indexOf '\n'
|
if 0 < objects.indexOf '\n'
|
||||||
"[\n#{o.indent}#{objects}\n#{@tab}]"
|
"[\n#{o.indent}#{objects}\n#{@tab}]"
|
||||||
|
@ -778,8 +787,9 @@ exports.Assign = class Assign extends Base
|
||||||
[obj, idx] = new Value(obj.unwrapAll()).cacheReference o
|
[obj, idx] = new Value(obj.unwrapAll()).cacheReference o
|
||||||
else
|
else
|
||||||
idx = if isObject
|
idx = if isObject
|
||||||
then (if obj.tags.this then obj.properties[0].name else obj)
|
if obj.tags.this then obj.properties[0].name else obj
|
||||||
else new Literal 0
|
else
|
||||||
|
new Literal 0
|
||||||
acc = IDENTIFIER.test idx.unwrap().value or 0
|
acc = IDENTIFIER.test idx.unwrap().value or 0
|
||||||
value = new Value value
|
value = new Value value
|
||||||
value.properties.push new (if acc then Accessor else Index) idx
|
value.properties.push new (if acc then Accessor else Index) idx
|
||||||
|
@ -800,8 +810,9 @@ exports.Assign = class Assign extends Base
|
||||||
else
|
else
|
||||||
# A shorthand `{a, b, @c} = val` pattern-match.
|
# A shorthand `{a, b, @c} = val` pattern-match.
|
||||||
if obj.base instanceof Parens
|
if obj.base instanceof Parens
|
||||||
then [obj, idx] = new Value(obj.unwrapAll()).cacheReference o
|
[obj, idx] = new Value(obj.unwrapAll()).cacheReference o
|
||||||
else idx = if obj.tags.this then obj.properties[0].name else obj
|
else
|
||||||
|
idx = if obj.tags.this then obj.properties[0].name else obj
|
||||||
if not splat and obj instanceof Splat
|
if not splat and obj instanceof Splat
|
||||||
val = new Literal obj.compileValue o, valVar, i, olength - i - 1
|
val = new Literal obj.compileValue o, valVar, i, olength - i - 1
|
||||||
splat = true
|
splat = true
|
||||||
|
@ -1070,8 +1081,9 @@ exports.Op = class Op extends Base
|
||||||
@operator = op
|
@operator = op
|
||||||
this
|
this
|
||||||
else if @second
|
else if @second
|
||||||
then new Parens(this).invert()
|
new Parens(this).invert()
|
||||||
else super()
|
else
|
||||||
|
super()
|
||||||
|
|
||||||
unfoldSoak: (o) ->
|
unfoldSoak: (o) ->
|
||||||
@operator in ['++', '--', 'delete'] and If.unfoldSoak o, this, 'first'
|
@operator in ['++', '--', 'delete'] and If.unfoldSoak o, this, 'first'
|
||||||
|
@ -1128,8 +1140,9 @@ exports.In = class In extends Base
|
||||||
|
|
||||||
compileNode: (o) ->
|
compileNode: (o) ->
|
||||||
if @array instanceof Value and @array.isArray()
|
if @array instanceof Value and @array.isArray()
|
||||||
then @compileOrTest o
|
@compileOrTest o
|
||||||
else @compileLoopTest o
|
else
|
||||||
|
@compileLoopTest o
|
||||||
|
|
||||||
compileOrTest: (o) ->
|
compileOrTest: (o) ->
|
||||||
[sub, ref] = @object.cache o, LEVEL_OP
|
[sub, ref] = @object.cache o, LEVEL_OP
|
||||||
|
@ -1211,8 +1224,9 @@ exports.Existence = class Existence extends Base
|
||||||
compileNode: (o) ->
|
compileNode: (o) ->
|
||||||
code = @expression.compile o
|
code = @expression.compile o
|
||||||
code = if IDENTIFIER.test(code) and not o.scope.check code
|
code = if IDENTIFIER.test(code) and not o.scope.check code
|
||||||
then "typeof #{code} !== \"undefined\" && #{code} !== null"
|
"typeof #{code} !== \"undefined\" && #{code} !== null"
|
||||||
else "#{code} != null"
|
else
|
||||||
|
"#{code} != null"
|
||||||
if o.level <= LEVEL_COND then code else "(#{code})"
|
if o.level <= LEVEL_COND then code else "(#{code})"
|
||||||
|
|
||||||
#### Parens
|
#### Parens
|
||||||
|
@ -1294,12 +1308,14 @@ exports.For = class For extends Base
|
||||||
vars = ivar + ' = ' + @from.compile o
|
vars = ivar + ' = ' + @from.compile o
|
||||||
vars += ', ' + tail if tail isnt tvar
|
vars += ', ' + tail if tail isnt tvar
|
||||||
cond = if +pvar
|
cond = if +pvar
|
||||||
then "#{ivar} #{ if pvar < 0 then '>' else '<' }= #{tvar}"
|
"#{ivar} #{ if pvar < 0 then '>' else '<' }= #{tvar}"
|
||||||
else "#{pvar} < 0 ? #{ivar} >= #{tvar} : #{ivar} <= #{tvar}"
|
else
|
||||||
|
"#{pvar} < 0 ? #{ivar} >= #{tvar} : #{ivar} <= #{tvar}"
|
||||||
else
|
else
|
||||||
if name or @object and not @raw
|
if name or @object and not @raw
|
||||||
then [sourcePart, svar] = @source.compileLoopReference o, 'ref'
|
[sourcePart, svar] = @source.compileLoopReference o, 'ref'
|
||||||
else sourcePart = svar = @source.compile o, LEVEL_PAREN
|
else
|
||||||
|
sourcePart = svar = @source.compile o, LEVEL_PAREN
|
||||||
namePart = if @pattern
|
namePart = if @pattern
|
||||||
new Assign(@name, new Literal "#{svar}[#{ivar}]").compile o, LEVEL_TOP
|
new Assign(@name, new Literal "#{svar}[#{ivar}]").compile o, LEVEL_TOP
|
||||||
else if name
|
else if name
|
||||||
|
@ -1431,8 +1447,9 @@ exports.If = class If extends Base
|
||||||
ifPart = @tab + ifPart unless child
|
ifPart = @tab + ifPart unless child
|
||||||
return ifPart unless @elseBody
|
return ifPart unless @elseBody
|
||||||
ifPart + ' else ' + if @isChain
|
ifPart + ' else ' + if @isChain
|
||||||
then @elseBodyNode().compile merge o, indent: @tab, chainChild: true
|
@elseBodyNode().compile merge o, indent: @tab, chainChild: true
|
||||||
else "{\n#{ @elseBody.compile o, LEVEL_TOP }\n#{@tab}}"
|
else
|
||||||
|
"{\n#{ @elseBody.compile o, LEVEL_TOP }\n#{@tab}}"
|
||||||
|
|
||||||
# Compile the If as a conditional operator.
|
# Compile the If as a conditional operator.
|
||||||
compileExpression: (o) ->
|
compileExpression: (o) ->
|
||||||
|
|
|
@ -64,8 +64,9 @@ class exports.Rewriter
|
||||||
if after?[0] is 'INDENT'
|
if after?[0] is 'INDENT'
|
||||||
tokens.splice i + 2, 1
|
tokens.splice i + 2, 1
|
||||||
if before?[0] is 'OUTDENT' and post?[0] is 'TERMINATOR'
|
if before?[0] is 'OUTDENT' and post?[0] is 'TERMINATOR'
|
||||||
then tokens.splice i - 2, 1
|
tokens.splice i - 2, 1
|
||||||
else tokens.splice i, 0, after
|
else
|
||||||
|
tokens.splice i, 0, after
|
||||||
else if prev and prev[0] not in ['TERMINATOR', 'INDENT', 'OUTDENT']
|
else if prev and prev[0] not in ['TERMINATOR', 'INDENT', 'OUTDENT']
|
||||||
if post?[0] is 'TERMINATOR' and after?[0] is 'OUTDENT'
|
if post?[0] is 'TERMINATOR' and after?[0] is 'OUTDENT'
|
||||||
tokens.splice i + 2, 0, tokens.splice(i, 2)...
|
tokens.splice i + 2, 0, tokens.splice(i, 2)...
|
||||||
|
@ -139,10 +140,11 @@ class exports.Rewriter
|
||||||
stack[stack.length - 1]?[0] isnt '{')
|
stack[stack.length - 1]?[0] isnt '{')
|
||||||
stack.push ['{']
|
stack.push ['{']
|
||||||
idx = if ago1 is ')'
|
idx = if ago1 is ')'
|
||||||
then start[1]
|
start[1]
|
||||||
else if ago2 is '@'
|
else if ago2 is '@'
|
||||||
then i - 2
|
i - 2
|
||||||
else i - 1
|
else
|
||||||
|
i - 1
|
||||||
idx -= 2 if @tag(idx - 2) is 'HERECOMMENT'
|
idx -= 2 if @tag(idx - 2) is 'HERECOMMENT'
|
||||||
tok = ['{', '{', token[2]]
|
tok = ['{', '{', token[2]]
|
||||||
tok.generated = yes
|
tok.generated = yes
|
||||||
|
|
Loading…
Reference in New Issue