Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132package core
import ( "git.urbach.dev/cli/q/src/expression" "git.urbach.dev/cli/q/src/ssa" "git.urbach.dev/cli/q/src/types")
// evaluateMethod converts a method expression to an SSA value.func (f *Function) evaluateMethod(leftValue ssa.Value, left *expression.Expression, right *expression.Expression, expr *expression.Expression) (ssa.Value, error) { methodName := right.Token.StringFrom(f.File.Bytes) leftUnwrapped := types.Unwrap(leftValue.Type()) pointer, isPointer := leftUnwrapped.(*types.Pointer)
if isPointer { leftUnwrapped = pointer.To }
call := expr.Parent call.Children = append(call.Children, nil) copy(call.Children[2:], call.Children[1:]) call.Children[1] = left
pkg := f.File.Package structure, isStructPointer := leftUnwrapped.(*types.Struct)
if isStructPointer && structure.Package != "" { pkg = structure.Package }
return f.evaluatePackageMember(f.Env.Packages[pkg], methodName, expr)}