Infer coroutine effects automatically

This commit is contained in:
pavel 2026-08-27 21:53:34 +02:00
commit 5b30e49486
15 changed files with 339 additions and 103 deletions

View file

@ -57,6 +57,7 @@ type FunctionType struct {
TypeParams []string
Params []Type
Result Type
Effects Effect
}
func (FunctionType) typeNode() {}
@ -200,7 +201,7 @@ func resolveTypeParameters(typ Type, params map[string]bool) Type {
for index, param := range value.Params {
resolved[index] = resolveTypeParameters(param, params)
}
return FunctionType{TypeParams: value.TypeParams, Params: resolved, Result: resolveTypeParameters(value.Result, params)}
return FunctionType{TypeParams: value.TypeParams, Params: resolved, Result: resolveTypeParameters(value.Result, params), Effects: value.Effects}
case GenericType:
args := make([]Type, len(value.Args))
for index, arg := range value.Args {
@ -248,7 +249,7 @@ func substituteType(typ Type, bindings map[string]Type) Type {
for index, param := range value.Params {
params[index] = substituteType(param, bindings)
}
return FunctionType{TypeParams: value.TypeParams, Params: params, Result: substituteType(value.Result, bindings)}
return FunctionType{TypeParams: value.TypeParams, Params: params, Result: substituteType(value.Result, bindings), Effects: value.Effects}
default:
return typ
}