From 6c60e45c29ef310b74aaead2fb89f941991df816 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Wed, 20 Aug 2025 15:15:41 +0200 Subject: [PATCH] Added an error message for invalid field initialization --- src/core/errors.go | 2 +- src/core/errors_test.go | 2 ++ src/core/evaluateStruct.go | 4 ++-- .../testdata/{MissingFieldName.q => InvalidFieldInit.q} | 0 src/core/testdata/InvalidFieldInit2.q | 8 ++++++++ 5 files changed, 13 insertions(+), 3 deletions(-) rename src/core/testdata/{MissingFieldName.q => InvalidFieldInit.q} (100%) create mode 100644 src/core/testdata/InvalidFieldInit2.q diff --git a/src/core/errors.go b/src/core/errors.go index f6226a1..db5775b 100644 --- a/src/core/errors.go +++ b/src/core/errors.go @@ -9,11 +9,11 @@ import ( var ( InvalidCondition = errors.String("Invalid condition") InvalidExpression = errors.String("Invalid expression") + InvalidFieldInit = errors.String("Invalid field initialization (expected 'field: value')") InvalidLoopHeader = errors.String("Invalid loop header") 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/errors_test.go b/src/core/errors_test.go index 2f46235..b85c3e1 100644 --- a/src/core/errors_test.go +++ b/src/core/errors_test.go @@ -20,6 +20,8 @@ var errs = []struct { {"InvalidExpression2.q", core.InvalidExpression}, {"InvalidExpression3.q", core.InvalidExpression}, {"InvalidExpression4.q", core.InvalidExpression}, + {"InvalidFieldInit.q", core.InvalidFieldInit}, + {"InvalidFieldInit2.q", core.InvalidFieldInit}, {"InvalidLoopHeader.q", core.InvalidLoopHeader}, {"InvalidStructOperation.q", core.InvalidStructOperation}, {"InvalidStructOperation2.q", core.InvalidStructOperation}, diff --git a/src/core/evaluateStruct.go b/src/core/evaluateStruct.go index 273edf7..f7faa3c 100644 --- a/src/core/evaluateStruct.go +++ b/src/core/evaluateStruct.go @@ -18,8 +18,8 @@ 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) + if len(definition.Children) != 2 { + return nil, errors.New(InvalidFieldInit, f.File, definition.Source().StartPos) } left := definition.Children[0] diff --git a/src/core/testdata/MissingFieldName.q b/src/core/testdata/InvalidFieldInit.q similarity index 100% rename from src/core/testdata/MissingFieldName.q rename to src/core/testdata/InvalidFieldInit.q diff --git a/src/core/testdata/InvalidFieldInit2.q b/src/core/testdata/InvalidFieldInit2.q new file mode 100644 index 0000000..4f741df --- /dev/null +++ b/src/core/testdata/InvalidFieldInit2.q @@ -0,0 +1,8 @@ +Point { + x int + y int +} + +main() { + p := Point{x 1, y 2} +} \ No newline at end of file -- 2.51.2