diff --git a/eval/eval.go b/eval/eval.go index f3354f91..e33fb2b9 100644 --- a/eval/eval.go +++ b/eval/eval.go @@ -155,7 +155,7 @@ func (s *State) evalPostfixExpression(node *ast.PostfixExpression) object.Object } // Doesn't unwrap return - return bubbles up. -func (s *State) evalInternal(node any) object.Object { //nolint:funlen,gocyclo // quite a lot of cases. +func (s *State) evalInternal(node any) object.Object { //nolint:funlen,gocyclo,gocognit // quite a lot of cases. switch node := node.(type) { // Statements case *ast.Statements: @@ -176,6 +176,9 @@ func (s *State) evalInternal(node any) object.Object { //nolint:funlen,gocyclo / return s.evalPrefixIncrDecr(node.Type(), node.Right) default: right := s.evalInternal(node.Right) + if right.Type() == object.ERROR { + return right + } return s.evalPrefixExpression(node.Type(), right) } case *ast.PostfixExpression: diff --git a/main_test.txtar b/main_test.txtar index 5d2207be..aaa4d428 100644 --- a/main_test.txtar +++ b/main_test.txtar @@ -273,6 +273,11 @@ grol -quiet -c 'f=()=>{{"k":"v"}}; println(json_go(f))' !stdout 'json: unsupported type' stdout '^"\(\)=>{{\\"k\\":\\"v\\"}}"$' +# prefix operator single error (used to be >>) +!grol -quiet -c '~~~1.1' +stderr 'Total 1 error' +stderr '^$' + -- json_output -- { "63": 63,