This adds ExprTopLevel and ExprSingleton and ensures that ExprBind is now monomorphic. This corrects a previous design bug where it was not monomorphic and would thus cause spawning of many more copies than necessary. In most cases this was only harmful to memory and performance, and not behaviour, since these functions were pure, and we didn't have a test for this. This also adds a bunch more tests. Most notably, the graph shape tests generally produce smaller graphs now. Lastly, a lambda cannot have two different types when used at two different call sites. It is rare that this would be used, and when it would make sense, there are easy workarounds to accomplish equivalent goals. This was mostly authored by Sam, James helped with some cleanup and debugging. Co-authored-by: James Shubin <james@shubin.ca>
50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
-- metadata.yaml --
|
|
#files: "files/" # these are some extra files we can use (is the default)
|
|
-- main.mcl --
|
|
import "golang/strings"
|
|
import "deploy"
|
|
import "second.mcl"
|
|
|
|
#$f1 = "/metadata.yaml" # works
|
|
#$f1 = "/main.mcl" # works
|
|
$f1 = "/files/file1"
|
|
|
|
$f2 = "/files/file2"
|
|
|
|
# the abspath method shouldn't be used often, it's here for testing...
|
|
if $f1 != deploy.abspath($f1) { # should be the same, since we're in the same dir
|
|
test "f1 error" {}
|
|
}
|
|
if $f2 != $second.f2 {
|
|
test "f2 error" {}
|
|
}
|
|
|
|
# the readfileabs method shouldn't be used often, it's here for testing...
|
|
$x1 = deploy.readfileabs($f1)
|
|
$x2 = deploy.readfileabs($f2)
|
|
|
|
if $x1 != deploy.readfile($f1) {
|
|
test "x1 error" {}
|
|
}
|
|
if $x2 != $second.x2 {
|
|
test "x2 error" {}
|
|
}
|
|
|
|
# hide the newlines from our output
|
|
test strings.trim_space($x1) {}
|
|
test strings.trim_space($x2) {}
|
|
-- second.mcl --
|
|
import "deploy"
|
|
|
|
# relative paths for us
|
|
$f = "/files/file2" # real file is here as well
|
|
$f2 = deploy.abspath($f)
|
|
$x2 = deploy.readfile($f)
|
|
-- files/file1 --
|
|
This is file1 in the files/ folder.
|
|
-- files/file2 --
|
|
This is file2 in the files/ folder.
|
|
-- OUTPUT --
|
|
Vertex: test[This is file1 in the files/ folder.]
|
|
Vertex: test[This is file2 in the files/ folder.]
|