lang: funcs: Don't allow interpolation in printf format string
We'd like to pre-compute the interpolation if we can, so that we can run this code properly... For now, we can't so it's a compile time error... Hopefully we can remove this restriction in the future. The problem is the string must be a constant, or it would be possible to switch it from "%d %s" to "%s %d %d" or anything that changes the type signature.
This commit is contained in:
@@ -85,6 +85,13 @@ func (obj *PrintfFunc) Polymorphisms(partialType *types.Type, partialValues []ty
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: we'd like to pre-compute the interpolation if we can, so that
|
||||
// we can run this code properly... for now, we can't, so it's a compile
|
||||
// time error...
|
||||
if partialValues[0] == nil {
|
||||
return nil, fmt.Errorf("could not determine type from format string")
|
||||
}
|
||||
|
||||
format := partialValues[0].Str() // must not panic
|
||||
typList, err := parseFormatToTypeList(format)
|
||||
if err != nil {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
# err: err3: polymorphic signatures for func `fmt.printf` could not be found: could not determine type from format string
|
||||
10
lang/interpret_test/TestAstFunc2/printfinterpolate0/main.mcl
Normal file
10
lang/interpret_test/TestAstFunc2/printfinterpolate0/main.mcl
Normal file
@@ -0,0 +1,10 @@
|
||||
import "fmt"
|
||||
|
||||
$str1 = "big"
|
||||
$str2 = "world"
|
||||
|
||||
# FIXME: we'd like to pre-compute the interpolation if we can, so that we can
|
||||
# run this code properly... for now, we can't, so it's a compile time error...
|
||||
print "print1" {
|
||||
msg => fmt.printf("hello ${str1} %s", $str2),
|
||||
}
|
||||
Reference in New Issue
Block a user