Remove builtin.ParseFuncs "generic" argument
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index b7d6e21..ff786eb 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -461,12 +461,11 @@
if len(builtInInterfaceMethods) != 0 {
return nil
}
- return builtin.ParseFuncs(&builtInTokenMap, builtin.InterfaceFuncs, false,
- func(f *a.Func) error {
- qid := f.Receiver()
- builtInInterfaceMethods[qid] = append(builtInInterfaceMethods[qid], f)
- return nil
- })
+ return builtin.ParseFuncs(&builtInTokenMap, builtin.InterfaceFuncs, func(f *a.Func) error {
+ qid := f.Receiver()
+ builtInInterfaceMethods[qid] = append(builtInInterfaceMethods[qid], f)
+ return nil
+ })
}
type gen struct {
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index 773a60d..888bf2d 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -17,6 +17,7 @@
import (
"fmt"
+ "strings"
"github.com/google/wuffs/lang/parse"
@@ -370,23 +371,29 @@
)
var SliceFuncs = []string{
- "T1.copy_from_slice!(s: T1) u64",
- "T1.length() u64",
- "T1.prefix(up_to: u64) T1",
- "T1.suffix(up_to: u64) T1",
+ "GENERIC T1.copy_from_slice!(s: T1) u64",
+ "GENERIC T1.length() u64",
+ "GENERIC T1.prefix(up_to: u64) T1",
+ "GENERIC T1.suffix(up_to: u64) T1",
}
var TableFuncs = []string{
- "T2.height() u64",
- "T2.stride() u64",
- "T2.width() u64",
+ "GENERIC T2.height() u64",
+ "GENERIC T2.stride() u64",
+ "GENERIC T2.width() u64",
- "T2.row(y: u32) T1",
+ "GENERIC T2.row(y: u32) T1",
}
-func ParseFuncs(tm *t.Map, ss []string, generic bool, callback func(*a.Func) error) error {
+func ParseFuncs(tm *t.Map, ss []string, callback func(*a.Func) error) error {
+ const GENERIC = "GENERIC "
buf := []byte(nil)
for _, s := range ss {
+ generic := strings.HasPrefix(s, GENERIC)
+ if generic {
+ s = s[len(GENERIC):]
+ }
+
buf = buf[:0]
buf = append(buf, "pub func "...)
buf = append(buf, s...)
diff --git a/lang/check/check.go b/lang/check/check.go
index 445879e..04e014d 100644
--- a/lang/check/check.go
+++ b/lang/check/check.go
@@ -104,16 +104,16 @@
unseenInterfaceImpls: map[t.QQID]*a.Func{},
}
- if err := c.parseBuiltInFuncs(nil, builtin.Funcs, false); err != nil {
+ if err := c.parseBuiltInFuncs(nil, builtin.Funcs); err != nil {
return nil, err
}
- if err := c.parseBuiltInFuncs(c.builtInSliceFuncs, builtin.SliceFuncs, true); err != nil {
+ if err := c.parseBuiltInFuncs(c.builtInSliceFuncs, builtin.SliceFuncs); err != nil {
return nil, err
}
- if err := c.parseBuiltInFuncs(c.builtInTableFuncs, builtin.TableFuncs, true); err != nil {
+ if err := c.parseBuiltInFuncs(c.builtInTableFuncs, builtin.TableFuncs); err != nil {
return nil, err
}
- if err := c.parseBuiltInFuncs(c.builtInInterfaceFuncs, builtin.InterfaceFuncs, false); err != nil {
+ if err := c.parseBuiltInFuncs(c.builtInInterfaceFuncs, builtin.InterfaceFuncs); err != nil {
return nil, err
}
diff --git a/lang/check/resolve.go b/lang/check/resolve.go
index 8c8a371..3893ef8 100644
--- a/lang/check/resolve.go
+++ b/lang/check/resolve.go
@@ -110,8 +110,8 @@
t.IDDecodeFrameOptions: typeExprDecodeFrameOptions,
}
-func (c *Checker) parseBuiltInFuncs(m map[t.QQID]*a.Func, ss []string, generic bool) error {
- return builtin.ParseFuncs(c.tm, ss, generic, func(f *a.Func) error {
+func (c *Checker) parseBuiltInFuncs(m map[t.QQID]*a.Func, ss []string) error {
+ return builtin.ParseFuncs(c.tm, ss, func(f *a.Func) error {
if err := c.checkFuncSignature(f.AsNode()); err != nil {
return err
}