Add expression functions with context boundaries
This commit is contained in:
parent
5085ae51aa
commit
773c34f3f4
18 changed files with 391 additions and 52 deletions
|
|
@ -65,7 +65,13 @@ func BuildPackageMetadata(program *Program, importPath string) (*PackageMetadata
|
|||
}
|
||||
for methodIndex := range class.Methods {
|
||||
method := &class.Methods[methodIndex]
|
||||
item.Methods = append(item.Methods, metadataFunction(method, semantic.FunctionEffects[class.Name+"."+method.Name]))
|
||||
result := Type(nil)
|
||||
if symbol := semantic.ClassInfo[class.Name].Method(method.Name); symbol != nil {
|
||||
if signature, ok := symbol.Type.(FunctionType); ok {
|
||||
result = signature.Result
|
||||
}
|
||||
}
|
||||
item.Methods = append(item.Methods, metadataFunction(method, semantic.FunctionEffects[class.Name+"."+method.Name], result))
|
||||
}
|
||||
metadata.Classes = append(metadata.Classes, item)
|
||||
}
|
||||
|
|
@ -78,13 +84,23 @@ func BuildPackageMetadata(program *Program, importPath string) (*PackageMetadata
|
|||
}
|
||||
for index := range program.Functions {
|
||||
function := &program.Functions[index]
|
||||
metadata.Functions = append(metadata.Functions, metadataFunction(function, semantic.FunctionEffects[function.Name]))
|
||||
result := Type(nil)
|
||||
if symbol, ok := semantic.Global.Lookup(function.Name); ok {
|
||||
if signature, ok := symbol.Type.(FunctionType); ok {
|
||||
result = signature.Result
|
||||
}
|
||||
}
|
||||
metadata.Functions = append(metadata.Functions, metadataFunction(function, semantic.FunctionEffects[function.Name], result))
|
||||
}
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
func metadataFunction(function *FunctionDecl, effects Effect) FunctionMetadata {
|
||||
item := FunctionMetadata{Name: function.Name, TypeParams: function.TypeParams, Result: function.ReturnType, Effects: effects}
|
||||
func metadataFunction(function *FunctionDecl, effects Effect, result Type) FunctionMetadata {
|
||||
resultName := function.ReturnType
|
||||
if result != nil && !isUnknownType(result) {
|
||||
resultName = result.String()
|
||||
}
|
||||
item := FunctionMetadata{Name: function.Name, TypeParams: function.TypeParams, Result: resultName, Effects: effects}
|
||||
for _, param := range function.Params {
|
||||
item.Params = append(item.Params, ParamMetadata{Name: param.Name, Type: param.Type})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue