From 94bd02af48d159fd3c9ed59335d177bbb69802d1 Mon Sep 17 00:00:00 2001 From: aoyako Date: Fri, 22 Mar 2024 17:37:36 +0900 Subject: [PATCH] add tests for shift op: untyped const with typed const --- internal/shader/expr.go | 4 ++-- internal/shader/syntax_test.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/shader/expr.go b/internal/shader/expr.go index dd89c8bfc..7ef263a08 100644 --- a/internal/shader/expr.go +++ b/internal/shader/expr.go @@ -153,9 +153,9 @@ func (cs *compileState) parseExpr(block *block, fname string, expr ast.Expr, mar shift, ok := gconstant.Int64Val(rhs[0].Const) if !ok { cs.addError(e.Pos(), fmt.Sprintf("unexpected %s type for: %s", rhs[0].Const.String(), e.Op)) - } else { - v = gconstant.Shift(lhs[0].Const, op, uint(shift)) + return nil, nil, nil, false } + v = gconstant.Shift(lhs[0].Const, op, uint(shift)) default: v = gconstant.BinaryOp(lhs[0].Const, op, rhs[0].Const) } diff --git a/internal/shader/syntax_test.go b/internal/shader/syntax_test.go index 1e905130d..06e644416 100644 --- a/internal/shader/syntax_test.go +++ b/internal/shader/syntax_test.go @@ -1324,6 +1324,9 @@ func TestSyntaxOperatorShift(t *testing.T) { {stmt: "a := 1 << 2.0; _ = a", err: false}, {stmt: "a := 1.0 << 2; _ = a", err: false}, {stmt: "a := 1.0 << 2.0; _ = a", err: false}, + {stmt: "a := 1.0 << int(1); _ = a", err: false}, + {stmt: "a := int(1) << 2.0; _ = a", err: false}, + {stmt: "a := ivec2(1) << 2.0; _ = a", err: false}, {stmt: "var a = 1; b := a << 2.0; _ = b", err: false}, {stmt: "var a = 1; b := 2.0 << a; _ = b", err: false}, // PR: #2916 {stmt: "a := float(1.0) << 2; _ = a", err: true}, @@ -1351,6 +1354,9 @@ func TestSyntaxOperatorShift(t *testing.T) { {stmt: "a := 1 >> 2.0; _ = a", err: false}, {stmt: "a := 1.0 >> 2; _ = a", err: false}, {stmt: "a := 1.0 >> 2.0; _ = a", err: false}, + {stmt: "a := 1.0 >> int(1); _ = a", err: false}, + {stmt: "a := int(1) >> 2.0; _ = a", err: false}, + {stmt: "a := ivec2(1) >> 2.0; _ = a", err: false}, {stmt: "var a = 1; b := a >> 2.0; _ = b", err: false}, {stmt: "var a = 1; b := 2.0 >> a; _ = b", err: false}, // PR: #2916 {stmt: "a := float(1.0) >> 2; _ = a", err: true},