fix pipe expression when start term is constant number

This commit is contained in:
Irmen de Jong 2022-06-12 16:59:28 +02:00
parent c6e92ecac4
commit dca092fd7c
2 changed files with 31 additions and 17 deletions

View File

@ -348,7 +348,8 @@ class ExpressionSimplifier(private val program: Program) : AstWalker() {
} else if(segments.size>1) { } else if(segments.size>1) {
// replace source+firstsegment by firstsegment(source) call as the new source // replace source+firstsegment by firstsegment(source) call as the new source
val firstSegment = segments.removeAt(0) as IFunctionCall val firstSegment = segments.removeAt(0) as IFunctionCall
val call = FunctionCallExpression(firstSegment.target, mutableListOf(pipe.source), pipe.position) val newArgs = listOf(pipe.source) + firstSegment.args
val call = FunctionCallExpression(firstSegment.target, newArgs.toMutableList(), pipe.position)
return listOf(IAstModification.ReplaceNode(pipe.source, call, pipe as Node)) return listOf(IAstModification.ReplaceNode(pipe.source, call, pipe as Node))
} }
} }

View File

@ -29,26 +29,39 @@ main {
; } ; }
sub func1(ubyte a1, ubyte a2) -> ubyte {
return a1+a2+42
}
sub func2(ubyte a1, ubyte a2) -> ubyte {
return 200-a1-a2
}
sub start() { sub start() {
; mcCarthy() ; mcCarthy()
; 9+10+42 = 61
; 200-61-2 = 137
ubyte result = 9 |> func1(10) |> func2(2)
txt.print_ub(result)
txt.nl()
; a "pixelshader": ; a "pixelshader":
sys.gfx_enable(0) ; enable lo res screen ; sys.gfx_enable(0) ; enable lo res screen
ubyte shifter ; ubyte shifter
;
repeat { ; repeat {
uword xx ; uword xx
uword yy = 0 ; uword yy = 0
repeat 240 { ; repeat 240 {
xx = 0 ; xx = 0
repeat 320 { ; repeat 320 {
sys.gfx_plot(xx, yy, xx*yy + shifter as ubyte) ; sys.gfx_plot(xx, yy, xx*yy + shifter as ubyte)
xx++ ; xx++
} ; }
yy++ ; yy++
} ; }
shifter+=4 ; shifter+=4
} ; }
} }
} }