Skip to content

Commit

Permalink
document compiler procs regarding & (#20257)
Browse files Browse the repository at this point in the history
  • Loading branch information
ringabout authored Aug 22, 2022
1 parent fdb781c commit 8fc19b9
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/ccgexprs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1197,7 +1197,7 @@ proc strLoc(p: BProc; d: TLoc): Rope =

proc genStrConcat(p: BProc, e: PNode, d: var TLoc) =
# <Nim code>
# s = 'Hello ' & name & ', how do you feel?' & 'z'
# s = "Hello " & name & ", how do you feel?" & 'z'
#
# <generated C code>
# {
Expand Down Expand Up @@ -1240,7 +1240,7 @@ proc genStrConcat(p: BProc, e: PNode, d: var TLoc) =

proc genStrAppend(p: BProc, e: PNode, d: var TLoc) =
# <Nim code>
# s &= 'Hello ' & name & ', how do you feel?' & 'z'
# s &= "Hello " & name & ", how do you feel?" & 'z'
# // BUG: what if s is on the left side too?
# <generated C code>
# {
Expand Down
1 change: 1 addition & 0 deletions compiler/hlo.nim
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#

# This include implements the high level optimization pass.
# included from sem.nim

when defined(nimPreviewSlimSystem):
import std/assertions
Expand Down
5 changes: 5 additions & 0 deletions compiler/transf.nim
Original file line number Diff line number Diff line change
Expand Up @@ -806,6 +806,8 @@ proc getMergeOp(n: PNode): PSym =
else: discard

proc flattenTreeAux(d, a: PNode, op: PSym) =
## Optimizes away the `&` calls in the children nodes and
## lifts the leaf nodes to the same level as `op2`.
let op2 = getMergeOp(a)
if op2 != nil and
(op2.id == op.id or op.magic != mNone and op2.magic == op.magic):
Expand Down Expand Up @@ -898,6 +900,9 @@ proc transformExceptBranch(c: PTransf, n: PNode): PNode =
result = transformSons(c, n)

proc commonOptimizations*(g: ModuleGraph; idgen: IdGenerator; c: PSym, n: PNode): PNode =
## Merges adjacent constant expressions of the children of the `&` call into
## a single constant expression. It also inlines constant expressions which are not
## complex.
result = n
for i in 0..<n.safeLen:
result[i] = commonOptimizations(g, idgen, c, n[i])
Expand Down

0 comments on commit 8fc19b9

Please sign in to comment.