lang: funcs: Rename T2 to T3 for future consistency

This makes things more symmetrical with the maplookup function.
This commit is contained in:
James Shubin
2023-10-11 19:21:09 -04:00
parent 9e7b7fbb3a
commit ee1e07f3d7

View File

@@ -76,8 +76,8 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
var invariants []interfaces.Invariant var invariants []interfaces.Invariant
var invar interfaces.Invariant var invar interfaces.Invariant
// func(list T1, index int, default T2) T2 // func(list T1, index int, default T3) T3
// (list: []T2 => T2 aka T1 => T2) // (list: []T3 => T3 aka T1 => T3)
listName, err := obj.ArgGen(0) listName, err := obj.ArgGen(0)
if err != nil { if err != nil {
@@ -106,7 +106,7 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
} }
invariants = append(invariants, invar) invariants = append(invariants, invar)
// relationship between T1 and T2 // relationship between T1 and T3
invar = &interfaces.EqualityWrapListInvariant{ invar = &interfaces.EqualityWrapListInvariant{
Expr1: dummyList, Expr1: dummyList,
Expr2Val: dummyDefault, Expr2Val: dummyDefault,
@@ -185,7 +185,7 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
// If we figure out either of these types, we'll know // If we figure out either of these types, we'll know
// the full type... // the full type...
var t1 *types.Type // list type var t1 *types.Type // list type
var t2 *types.Type // list val type var t3 *types.Type // list val type
// validateArg0 checks: list T1 // validateArg0 checks: list T1
validateArg0 := func(typ *types.Type) error { validateArg0 := func(typ *types.Type) error {
@@ -206,13 +206,13 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
if err := typ.Cmp(t1); t1 != nil && err != nil { if err := typ.Cmp(t1); t1 != nil && err != nil {
return errwrap.Wrapf(err, "input type was inconsistent") return errwrap.Wrapf(err, "input type was inconsistent")
} }
if err := typ.Val.Cmp(t2); t2 != nil && err != nil { if err := typ.Val.Cmp(t3); t3 != nil && err != nil {
return errwrap.Wrapf(err, "input val type was inconsistent") return errwrap.Wrapf(err, "input val type was inconsistent")
} }
// learn! // learn!
t1 = typ t1 = typ
t2 = typ.Val t3 = typ.Val
return nil return nil
} }
@@ -227,13 +227,13 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
return nil return nil
} }
// validateArg2 checks: list val T2 // validateArg2 checks: list val T3
validateArg2 := func(typ *types.Type) error { validateArg2 := func(typ *types.Type) error {
if typ == nil { // unknown so far if typ == nil { // unknown so far
return nil return nil
} }
if err := typ.Cmp(t2); t2 != nil && err != nil { if err := typ.Cmp(t3); t3 != nil && err != nil {
return errwrap.Wrapf(err, "input val type was inconsistent") return errwrap.Wrapf(err, "input val type was inconsistent")
} }
if t1 != nil { if t1 != nil {
@@ -243,9 +243,9 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
} }
t := &types.Type{ // build t1 t := &types.Type{ // build t1
Kind: types.KindList, Kind: types.KindList,
Val: typ, // t2 Val: typ, // t3
} }
if t2 != nil { if t3 != nil {
if err := t.Cmp(t1); t1 != nil && err != nil { if err := t.Cmp(t1); t1 != nil && err != nil {
return errwrap.Wrapf(err, "input type was inconsistent") return errwrap.Wrapf(err, "input type was inconsistent")
} }
@@ -254,18 +254,18 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
// learn! // learn!
t1 = t t1 = t
t2 = typ t3 = typ
return nil return nil
} }
if typ, err := cfavInvar.Args[0].Type(); err == nil { // is it known? if typ, err := cfavInvar.Args[0].Type(); err == nil { // is it known?
// this sets t1 and t2 on success if it learned // this sets t1 and t3 on success if it learned
if err := validateArg0(typ); err != nil { if err := validateArg0(typ); err != nil {
return nil, errwrap.Wrapf(err, "first list arg type is inconsistent") return nil, errwrap.Wrapf(err, "first list arg type is inconsistent")
} }
} }
if typ, exists := solved[cfavInvar.Args[0]]; exists { // alternate way to lookup type if typ, exists := solved[cfavInvar.Args[0]]; exists { // alternate way to lookup type
// this sets t1 and t2 on success if it learned // this sets t1 and t3 on success if it learned
if err := validateArg0(typ); err != nil { if err := validateArg0(typ); err != nil {
return nil, errwrap.Wrapf(err, "first list arg type is inconsistent") return nil, errwrap.Wrapf(err, "first list arg type is inconsistent")
} }
@@ -285,13 +285,13 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
} }
if typ, err := cfavInvar.Args[2].Type(); err == nil { // is it known? if typ, err := cfavInvar.Args[2].Type(); err == nil { // is it known?
// this sets t1 and t2 on success if it learned // this sets t1 and t3 on success if it learned
if err := validateArg2(typ); err != nil { if err := validateArg2(typ); err != nil {
return nil, errwrap.Wrapf(err, "third default arg type is inconsistent") return nil, errwrap.Wrapf(err, "third default arg type is inconsistent")
} }
} }
if typ, exists := solved[cfavInvar.Args[2]]; exists { // alternate way to lookup type if typ, exists := solved[cfavInvar.Args[2]]; exists { // alternate way to lookup type
// this sets t1 and t2 on success if it learned // this sets t1 and t3 on success if it learned
if err := validateArg2(typ); err != nil { if err := validateArg2(typ); err != nil {
return nil, errwrap.Wrapf(err, "third default arg type is inconsistent") return nil, errwrap.Wrapf(err, "third default arg type is inconsistent")
} }
@@ -306,10 +306,10 @@ func (obj *ListLookupFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant,
} }
invariants = append(invariants, invar) invariants = append(invariants, invar)
} }
if t2 != nil { if t3 != nil {
invar := &interfaces.EqualsInvariant{ invar := &interfaces.EqualsInvariant{
Expr: dummyDefault, Expr: dummyDefault,
Type: t2, Type: t3,
} }
invariants = append(invariants, invar) invariants = append(invariants, invar)
} }