Skip to content

Commit 1c25b6e

Browse files
authored
improves renderer for [] etc. (#1200)
So that `s[0]` is rendered properly
1 parent c496f74 commit 1c25b6e

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

src/nimony/renderer.nim

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -578,11 +578,28 @@ proc gproc(g: var SrcGen, n: var Cursor) =
578578
else:
579579
discard
580580

581-
proc gcall(g: var SrcGen, n: var Cursor) =
582-
inc n
583-
gsub(g, n)
584-
put(g, tkParLe, "(")
581+
proc bracketKind(g: SrcGen, n: Cursor): BracketKind =
582+
if renderIds notin g.flags:
583+
if n.exprKind in {OchoiceX, CchoiceX}:
584+
var firstSon = n
585+
inc firstSon
586+
result = bracketKind(g, firstSon)
587+
elif n.kind == Symbol:
588+
var name = pool.syms[n.symId]
589+
extractBasename(name)
590+
591+
case name
592+
of "[]": result = bkBracket
593+
of "[]=": result = bkBracketAsgn
594+
of "{}": result = bkCurly
595+
of "{}=": result = bkCurlyAsgn
596+
else: result = bkNone
597+
else:
598+
result = bkNone
599+
else:
600+
result = bkNone
585601

602+
proc gcallComma(g: var SrcGen, n: var Cursor) =
586603
var afterFirst = false
587604

588605
while n.kind != ParRi:
@@ -592,8 +609,30 @@ proc gcall(g: var SrcGen, n: var Cursor) =
592609
afterFirst = true
593610
gsub(g, n)
594611

595-
put(g, tkParRi, ")")
596-
skipParRi(n)
612+
proc gcall(g: var SrcGen, n: var Cursor) =
613+
inc n
614+
case bracketKind(g, n)
615+
of bkBracket:
616+
skip n
617+
gsub(g, n)
618+
put(g, tkBracketLe, "[")
619+
gcallComma(g, n)
620+
put(g, tkBracketRi, "]")
621+
skipParRi(n)
622+
of bkCurly:
623+
skip n
624+
gsub(g, n)
625+
put(g, tkCurlyLe, "{")
626+
gcallComma(g, n)
627+
put(g, tkCurlyRi, "}")
628+
skipParRi(n)
629+
of bkNone, bkPar, bkBracketAsgn, bkCurlyAsgn:
630+
# TODO:
631+
gsub(g, n)
632+
put(g, tkParLe, "(")
633+
gcallComma(g, n)
634+
put(g, tkParRi, ")")
635+
skipParRi(n)
597636

598637
proc gcallsystem(g: var SrcGen, n: var Cursor; name: string) =
599638
inc n

tests/nimony/plugins/trenderer.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ renderTree:
1313
result = s
1414

1515
discard foo(2)
16+
17+
var s = @[1, 2, 3]
18+
echo s[0]

tests/nimony/plugins/trenderer.output

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ proc foo(x: int): int =
99
return result
1010

1111
discard foo(2)
12+
var s: seq = @([1, 2, 3])
13+
write stdout, s[0]
14+
write stdout, '\n'

0 commit comments

Comments
 (0)