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