From ba2b7087afad47ff6a8e5f8f39501ebd72485a67 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Tue, 29 Jul 2025 11:28:53 +0200 Subject: [PATCH] Added a check for unknown struct fields --- src/core/errors_test.go | 1 + src/core/evaluateDot.go | 2 +- src/core/testdata/UnknownStructField.q | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/core/testdata/UnknownStructField.q diff --git a/src/core/errors_test.go b/src/core/errors_test.go index b3b0822..9836ed5 100644 --- a/src/core/errors_test.go +++ b/src/core/errors_test.go @@ -32,6 +32,7 @@ var errs = []struct { {"UnknownIdentifier7.q", &core.UnknownIdentifier{Name: "os.unknown"}}, {"UnknownIdentifier8.q", &core.UnknownIdentifier{Name: "x"}}, {"UnknownIdentifier9.q", &core.UnknownIdentifier{Name: "x"}}, + {"UnknownStructField.q", &core.UnknownStructField{StructName: "string", FieldName: "unknown"}}, {"UnusedValue.q", &core.UnusedValue{Value: "42"}}, {"UnusedValue2.q", &core.UnusedValue{Value: "2 + 3"}}, {"UnusedValue3.q", &core.UnusedValue{Value: "\"not used\""}}, diff --git a/src/core/evaluateDot.go b/src/core/evaluateDot.go index 350542c..f28abc6 100644 --- a/src/core/evaluateDot.go +++ b/src/core/evaluateDot.go @@ -60,7 +60,7 @@ func (f *Function) evaluateDot(expr *expression.Expression) (ssa.Value, error) { field := leftValue.Typ.FieldByName(rightText) if field == nil { - panic("unknown field") + return nil, errors.New(&UnknownStructField{StructName: leftValue.Typ.Name(), FieldName: rightText}, f.File, right.Token.Position) } return f.Append(leftValue.Arguments[field.Index]), nil diff --git a/src/core/testdata/UnknownStructField.q b/src/core/testdata/UnknownStructField.q new file mode 100644 index 0000000..b47e80a --- /dev/null +++ b/src/core/testdata/UnknownStructField.q @@ -0,0 +1,3 @@ +main() { + x := "Hello".unknown +} \ No newline at end of file -- 2.51.2