lang: interfaces: Small fixups to make unification work for now

This is all hacks until it works. Sorry that I am not a type unification
expert. If you are, please send us some patches =D
This commit is contained in:
James Shubin
2021-05-11 00:50:38 -04:00
parent 9dc24860f3
commit 2bed668d31

View File

@@ -655,7 +655,10 @@ type GeneratorInvariant struct {
// Func is a generator function that takes the state of the world, and
// returns new invariants that should be added to this world view. The
// state of the world includes both the currently unsolved invariants,
// as well as the known solution map that has been solved so far.
// as well as the known solution map that has been solved so far. If
// this returns nil, we add the invariants it returned and we remove it
// from the list. If we error, it's because we don't have any new
// information to provide at this time...
Func func(invariants []Invariant, solved map[Expr]*types.Type) ([]Invariant, error)
}
@@ -672,10 +675,11 @@ func (obj *GeneratorInvariant) ExprList() []Expr {
// Matches returns whether an invariant matches the existing solution. If it is
// inconsistent, then it errors.
func (obj *GeneratorInvariant) Matches(solved map[Expr]*types.Type) (bool, error) {
// XXX: not implemented
// XXX: not implemented (don't panic though)
//return false, err // inconsistent!
//return false, nil // not matched yet
//return true, nil // matched!
return false, nil // not matched yet
// If we error, it's because we don't have any new information to
// provide at this time... If it's nil, it's because the invariants
@@ -683,17 +687,9 @@ func (obj *GeneratorInvariant) Matches(solved map[Expr]*types.Type) (bool, error
//invariants, err := obj.Func(?, solved)
//if err != nil {
//}
panic("not implemented")
}
// Possible returns an error if it is certain that it is NOT possible to get a
// solution with this invariant and the set of partials. In certain cases, it
// might not be able to determine that it's not possible, while simultaneously
// not being able to guarantee a possible solution either. In this situation, it
// should return nil, since this is used as a filtering mechanism, and the nil
// result of possible is preferred over eliminating a tricky, but possible one.
// This particular implementation is currently not implemented!
// Possible is currently not implemented!
func (obj *GeneratorInvariant) Possible(partials []Invariant) error {
// XXX: not implemented
return nil // safer to return nil than error
@@ -1019,8 +1015,11 @@ func (obj *CallFuncArgsValueInvariant) ExprList() []Expr {
// Matches returns whether an invariant matches the existing solution. If it is
// inconsistent, then it errors.
func (obj *CallFuncArgsValueInvariant) Matches(solved map[Expr]*types.Type) (bool, error) {
// XXX: not implemented
panic("not implemented")
// XXX: not implemented (don't panic though)
//return false, err // inconsistent!
//return false, nil // not matched yet
//return true, nil // matched!
return false, nil // not matched yet
}
// Possible returns an error if it is certain that it is NOT possible to get a