Skip to content

Commit

Permalink
Get parameter types from the elaboration, rather than converting from…
Browse files Browse the repository at this point in the history
… AST
  • Loading branch information
SupunS committed Feb 7, 2025
1 parent ba728ea commit 8d37b88
Showing 1 changed file with 15 additions and 31 deletions.
46 changes: 15 additions & 31 deletions bbq/compiler/desugar.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ type inheritedFunction struct {
elaboration *sema.Elaboration
}

func (f inheritedFunction) functionType() *sema.FunctionType {
return f.elaboration.FunctionDeclarationFunctionType(f.functionDecl)
}

var _ ast.DeclarationVisitor[ast.Declaration] = &Desugar{}

func NewDesugar(
Expand Down Expand Up @@ -896,19 +900,9 @@ func (d *Desugar) inheritedConditionInvocation(
kind,
)

inheritedFuncDecl := inheritedFunc.functionDecl

params := inheritedFuncDecl.ParameterList.Parameters
semaParams := make([]sema.Parameter, 0, len(params))
for _, param := range params {
paramTypeAnnotation := d.checker.ConvertTypeAnnotation(param.TypeAnnotation)

semaParams = append(semaParams, sema.Parameter{
TypeAnnotation: paramTypeAnnotation,
Label: param.Label,
Identifier: param.Identifier.Identifier,
})
}
inheritedFuncType := inheritedFunc.functionType()
parameters := make([]sema.Parameter, len(inheritedFuncType.Parameters))
copy(parameters, inheritedFuncType.Parameters)

var beforeValues []ast.Expression

Expand All @@ -927,7 +921,7 @@ func (d *Desugar) inheritedConditionInvocation(
panic(errors.NewUnreachableError())
}

semaParams = append(semaParams, sema.Parameter{
parameters = append(parameters, sema.Parameter{
TypeAnnotation: sema.NewTypeAnnotation(varDeclTypes.TargetType),
Label: sema.ArgumentLabelNotRequired,
Identifier: beforeFunctionResultVarName,
Expand All @@ -936,7 +930,7 @@ func (d *Desugar) inheritedConditionInvocation(

// Add 'result' variable as an argument.
if resultVarType != nil {
semaParams = append(semaParams, sema.Parameter{
parameters = append(parameters, sema.Parameter{
TypeAnnotation: sema.NewTypeAnnotation(resultVarType),
Label: sema.ArgumentLabelNotRequired,
Identifier: resultVariableName,
Expand All @@ -946,7 +940,7 @@ func (d *Desugar) inheritedConditionInvocation(

funcType := sema.NewSimpleFunctionType(
sema.FunctionPurityView,
semaParams,
parameters,
sema.VoidTypeAnnotation,
)

Expand Down Expand Up @@ -984,22 +978,12 @@ func (d *Desugar) inheritedBeforeFunctionInvocation(
beforeVarName,
)

inheritedFuncDecl := inheritedFunc.functionDecl

params := inheritedFuncDecl.ParameterList.Parameters
semaParams := make([]sema.Parameter, 0, len(params))
for _, param := range params {
paramTypeAnnotation := d.checker.ConvertTypeAnnotation(param.TypeAnnotation)

semaParams = append(semaParams, sema.Parameter{
TypeAnnotation: paramTypeAnnotation,
Label: param.Label,
Identifier: param.Identifier.Identifier,
})
}
inheritedFuncType := inheritedFunc.functionType()
parameters := make([]sema.Parameter, len(inheritedFuncType.Parameters))
copy(parameters, inheritedFuncType.Parameters)

if resultVarType != nil {
semaParams = append(semaParams, sema.Parameter{
parameters = append(parameters, sema.Parameter{
TypeAnnotation: sema.NewTypeAnnotation(resultVarType),
Label: sema.ArgumentLabelNotRequired,
Identifier: resultVariableName,
Expand All @@ -1008,7 +992,7 @@ func (d *Desugar) inheritedBeforeFunctionInvocation(

funcType := sema.NewSimpleFunctionType(
sema.FunctionPurityView,
semaParams,
parameters,
sema.VoidTypeAnnotation,
)

Expand Down

0 comments on commit 8d37b88

Please sign in to comment.