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
 		}