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.
123456789101112131415161718192021222324252627package core
import ( "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/expression" "git.urbach.dev/cli/q/src/ssa" "git.urbach.dev/cli/q/src/types")
// fieldFromStruct extracts a field from a struct.func (f *Function) fieldFromStruct(leftValue *ssa.Struct, left *expression.Expression, right *expression.Expression) (ssa.Value, error) { fieldName := right.Token.StringFrom(f.File.Bytes) structType := types.Unwrap(leftValue.Typ).(*types.Struct) field := structType.FieldByName(fieldName)
if field == nil { return nil, errors.New(&UnknownStructField{StructName: leftValue.Typ.Name(), FieldName: fieldName}, f.File, right.Source()) }
arg := leftValue.Arguments[field.Index]
if arg == nil { return nil, errors.New(&UndefinedStructField{Identifier: left.SourceString(f.File.Bytes), FieldName: fieldName}, f.File, right.Source()) }
return arg, nil}