62 lines
2.6 KiB
Plaintext
62 lines
2.6 KiB
Plaintext
-- main.mcl --
|
|
# this can return changing functions, and could be optimized, too
|
|
func funcgen($b) {
|
|
if $b {
|
|
func() {
|
|
"hello"
|
|
}
|
|
} else {
|
|
func() {
|
|
"world"
|
|
}
|
|
}
|
|
}
|
|
|
|
$fn1 = funcgen(true)
|
|
$fn2 = funcgen(false)
|
|
|
|
$out1 = $fn1()
|
|
$out2 = $fn2()
|
|
|
|
test $out1 {}
|
|
test $out2 {}
|
|
-- OUTPUT --
|
|
Edge: bool(false) -> call:funcgen(bool(false)) # b
|
|
Edge: bool(false) -> var(b) # var:b
|
|
Edge: bool(true) -> call:funcgen(bool(true)) # b
|
|
Edge: bool(true) -> var(b) # var:b
|
|
Edge: call:fn1() -> var(out1) # var:out1
|
|
Edge: call:fn2() -> var(out2) # var:out2
|
|
Edge: call:funcgen(bool(false)) -> call:fn2() # call:fn2
|
|
Edge: call:funcgen(bool(true)) -> call:fn1() # call:fn1
|
|
Edge: func() { str("hello") } -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # a
|
|
Edge: func() { str("hello") } -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # a
|
|
Edge: func() { str("world") } -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # b
|
|
Edge: func() { str("world") } -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # b
|
|
Edge: func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } } -> call:funcgen(bool(false)) # call:funcgen
|
|
Edge: func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } } -> call:funcgen(bool(true)) # call:funcgen
|
|
Edge: if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } -> func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } } # body
|
|
Edge: if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } -> func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } } # body
|
|
Edge: str("hello") -> func() { str("hello") } # body
|
|
Edge: str("world") -> func() { str("world") } # body
|
|
Edge: var(b) -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # c
|
|
Edge: var(b) -> if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } # c
|
|
Vertex: bool(false)
|
|
Vertex: bool(true)
|
|
Vertex: call:fn1()
|
|
Vertex: call:fn2()
|
|
Vertex: call:funcgen(bool(false))
|
|
Vertex: call:funcgen(bool(true))
|
|
Vertex: func() { str("hello") }
|
|
Vertex: func() { str("world") }
|
|
Vertex: func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } }
|
|
Vertex: func(b) { if( var(b) ) { func() { str("hello") } } else { func() { str("world") } } }
|
|
Vertex: if( var(b) ) { func() { str("hello") } } else { func() { str("world") } }
|
|
Vertex: if( var(b) ) { func() { str("hello") } } else { func() { str("world") } }
|
|
Vertex: str("hello")
|
|
Vertex: str("world")
|
|
Vertex: var(b)
|
|
Vertex: var(b)
|
|
Vertex: var(out1)
|
|
Vertex: var(out2)
|