bugfixes for the new C++ patterns

This commit is contained in:
Araq 2015-01-21 15:42:05 +01:00
commit e2147c9f0d

View file

@ -302,10 +302,11 @@ proc genPatternCall(p: BProc; ri: PNode; pat: string; typ: PType): PRope =
while i < pat.len: while i < pat.len:
case pat[i] case pat[i]
of '@': of '@':
result.app genOtherArg(p, ri, j, typ) if j < ri.len:
for k in j+1 .. < ri.len: result.app genOtherArg(p, ri, j, typ)
result.app(~", ") for k in j+1 .. < ri.len:
result.app genOtherArg(p, ri, k, typ) result.app(~", ")
result.app genOtherArg(p, ri, k, typ)
inc i inc i
of '#': of '#':
if pat[i+1] in {'+', '@'}: if pat[i+1] in {'+', '@'}:
@ -448,8 +449,7 @@ proc genNamedParamCall(p: BProc, ri: PNode, d: var TLoc) =
proc genCall(p: BProc, e: PNode, d: var TLoc) = proc genCall(p: BProc, e: PNode, d: var TLoc) =
if e.sons[0].typ.callConv == ccClosure: if e.sons[0].typ.callConv == ccClosure:
genClosureCall(p, nil, e, d) genClosureCall(p, nil, e, d)
elif e.sons[0].kind == nkSym and sfInfixCall in e.sons[0].sym.flags and elif e.sons[0].kind == nkSym and sfInfixCall in e.sons[0].sym.flags:
e.len >= 2:
genInfixCall(p, nil, e, d) genInfixCall(p, nil, e, d)
elif e.sons[0].kind == nkSym and sfNamedParamCall in e.sons[0].sym.flags: elif e.sons[0].kind == nkSym and sfNamedParamCall in e.sons[0].sym.flags:
genNamedParamCall(p, e, d) genNamedParamCall(p, e, d)
@ -462,8 +462,7 @@ proc genCall(p: BProc, e: PNode, d: var TLoc) =
proc genAsgnCall(p: BProc, le, ri: PNode, d: var TLoc) = proc genAsgnCall(p: BProc, le, ri: PNode, d: var TLoc) =
if ri.sons[0].typ.callConv == ccClosure: if ri.sons[0].typ.callConv == ccClosure:
genClosureCall(p, le, ri, d) genClosureCall(p, le, ri, d)
elif ri.sons[0].kind == nkSym and sfInfixCall in ri.sons[0].sym.flags and elif ri.sons[0].kind == nkSym and sfInfixCall in ri.sons[0].sym.flags:
ri.len >= 2:
genInfixCall(p, le, ri, d) genInfixCall(p, le, ri, d)
elif ri.sons[0].kind == nkSym and sfNamedParamCall in ri.sons[0].sym.flags: elif ri.sons[0].kind == nkSym and sfNamedParamCall in ri.sons[0].sym.flags:
genNamedParamCall(p, ri, d) genNamedParamCall(p, ri, d)