From 8d2834acc3c77ce108ffef69cbe272b6ed2adac0 Mon Sep 17 00:00:00 2001 From: Laurent Demailly Date: Wed, 28 Aug 2024 09:36:59 -0700 Subject: [PATCH] Also short circuit prefix when there is an error already/so we get a single error (#187) --- eval/eval.go | 5 ++++- main_test.txtar | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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,