From: Slava Pestov Date: Wed, 23 Sep 2009 22:33:03 +0000 (-0500) Subject: rpn: fix operator order issue (reported by Jason Merrill) X-Git-Tag: 0.97~5489^2~3 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=9dd51d58de73d23efdb58f35872790ee7a9c298a rpn: fix operator order issue (reported by Jason Merrill) --- diff --git a/extra/rpn/rpn-tests.factor b/extra/rpn/rpn-tests.factor new file mode 100644 index 0000000000..c24d5cb244 --- /dev/null +++ b/extra/rpn/rpn-tests.factor @@ -0,0 +1,4 @@ +IN: rpn.tests +USING: rpn lists tools.test ; + +[ { 2 } ] [ "4 2 -" rpn-parse rpn-eval list>array ] unit-test \ No newline at end of file diff --git a/extra/rpn/rpn.factor b/extra/rpn/rpn.factor index 7175746862..ba697df8d1 100644 --- a/extra/rpn/rpn.factor +++ b/extra/rpn/rpn.factor @@ -10,7 +10,7 @@ TUPLE: push-insn value ; GENERIC: eval-insn ( stack insn -- stack ) : binary-op ( stack quot: ( x y -- z ) -- stack ) - [ uncons uncons ] dip dip cons ; inline + [ uncons uncons [ swap ] dip ] dip dip cons ; inline M: add-insn eval-insn drop [ + ] binary-op ; M: sub-insn eval-insn drop [ - ] binary-op ; @@ -35,11 +35,11 @@ M: push-insn eval-insn value>> swons ; : print-stack ( list -- ) [ number>string print ] leach ; -: rpn-eval ( tokens -- ) - nil [ eval-insn ] foldl print-stack ; +: rpn-eval ( tokens -- stack ) + nil [ eval-insn ] foldl ; : rpn ( -- ) "RPN> " write flush - readln [ rpn-parse rpn-eval rpn ] when* ; + readln [ rpn-parse rpn-eval print-stack rpn ] when* ; MAIN: rpn