-- main.mcl --
import "fmt"

# this value should only be built once
$some_value1 = 42 # or something more complex like the output of a slow function...
class foo($num) {
	# we should have a different `$inside` value for each use of this class
	$inside = $some_value1 + $some_value2 + 4
	test [fmt.printf("test-%d-%d", $num, $inside)] {} # some resource
}
$some_value2 = 13 # check that non-ordering works too!

# We *don't* unnecessarily copy `4` on each include, because it's static!
include foo(1)
include foo(2)
include foo(3)
-- OUTPUT --
Edge: _operator -> _operator # a
Edge: _operator -> _operator # a
Edge: _operator -> _operator # a
Edge: _operator -> printf: func(format str, a int, b int) str # b
Edge: _operator -> printf: func(format str, a int, b int) str # b
Edge: _operator -> printf: func(format str, a int, b int) str # b
Edge: const: int(1) -> printf: func(format str, a int, b int) str # a
Edge: const: int(13) -> _operator # b
Edge: const: int(13) -> _operator # b
Edge: const: int(13) -> _operator # b
Edge: const: int(2) -> printf: func(format str, a int, b int) str # a
Edge: const: int(3) -> printf: func(format str, a int, b int) str # a
Edge: const: int(4) -> _operator # b
Edge: const: int(4) -> _operator # b
Edge: const: int(4) -> _operator # b
Edge: const: int(42) -> _operator # a
Edge: const: int(42) -> _operator # a
Edge: const: int(42) -> _operator # a
Edge: const: str("+") -> _operator # op
Edge: const: str("+") -> _operator # op
Edge: const: str("+") -> _operator # op
Edge: const: str("+") -> _operator # op
Edge: const: str("+") -> _operator # op
Edge: const: str("+") -> _operator # op
Edge: const: str("test-%d-%d") -> printf: func(format str, a int, b int) str # format
Edge: const: str("test-%d-%d") -> printf: func(format str, a int, b int) str # format
Edge: const: str("test-%d-%d") -> printf: func(format str, a int, b int) str # format
Edge: printf: func(format str, a int, b int) str -> composite: []str # 0
Edge: printf: func(format str, a int, b int) str -> composite: []str # 0
Edge: printf: func(format str, a int, b int) str -> composite: []str # 0
Vertex: _operator
Vertex: _operator
Vertex: _operator
Vertex: _operator
Vertex: _operator
Vertex: _operator
Vertex: composite: []str
Vertex: composite: []str
Vertex: composite: []str
Vertex: const: int(1)
Vertex: const: int(13)
Vertex: const: int(2)
Vertex: const: int(3)
Vertex: const: int(4)
Vertex: const: int(4)
Vertex: const: int(4)
Vertex: const: int(42)
Vertex: const: str("+")
Vertex: const: str("+")
Vertex: const: str("+")
Vertex: const: str("+")
Vertex: const: str("+")
Vertex: const: str("+")
Vertex: const: str("test-%d-%d")
Vertex: const: str("test-%d-%d")
Vertex: const: str("test-%d-%d")
Vertex: printf: func(format str, a int, b int) str
Vertex: printf: func(format str, a int, b int) str
Vertex: printf: func(format str, a int, b int) str
