From aa5a28d2bf56c0fa41e9664a2c8263e9b8f916ee Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Wed, 20 Aug 2025 14:45:31 +0200 Subject: [PATCH] Added an error message for missing field names --- src/core/errors.go | 1 + src/core/evaluateStruct.go | 5 +++++ src/core/testdata/MissingFieldName.q | 8 ++++++++ 3 files changed, 14 insertions(+) create mode 100644 src/core/testdata/MissingFieldName.q diff --git a/src/core/errors.go b/src/core/errors.go index a39ffaa..f6226a1 100644 --- a/src/core/errors.go +++ b/src/core/errors.go @@ -13,6 +13,7 @@ var ( InvalidNumber = errors.String("Invalid number") InvalidRune = errors.String("Invalid rune") InvalidStructOperation = errors.String("Invalid operation on structs") + MissingFieldName = errors.String("Missing field name in struct initialization") MissingOperand = errors.String("Missing operand") ) diff --git a/src/core/evaluateStruct.go b/src/core/evaluateStruct.go index 5d782ba..273edf7 100644 --- a/src/core/evaluateStruct.go +++ b/src/core/evaluateStruct.go @@ -1,6 +1,7 @@ package 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/token" @@ -17,6 +18,10 @@ func (f *Function) evaluateStruct(expr *expression.Expression) (ssa.Value, error } for _, definition := range expr.Children[1:] { + if definition.IsLeaf() { + return nil, errors.New(MissingFieldName, f.File, definition.Source().StartPos) + } + left := definition.Children[0] fieldName := left.String(f.File.Bytes) field := typ.FieldByName(fieldName) diff --git a/src/core/testdata/MissingFieldName.q b/src/core/testdata/MissingFieldName.q new file mode 100644 index 0000000..82363f9 --- /dev/null +++ b/src/core/testdata/MissingFieldName.q @@ -0,0 +1,8 @@ +Point { + x int + y int +} + +main() { + p := Point{1, 2} +} \ No newline at end of file -- 2.51.2