converting Calc functions to jump functions
Winfried Donkers
W.Donkers at dci-electronics.nl
Mon Jun 6 08:30:25 UTC 2016
Hi Eike,
> > And that is where I get stuck.
>
> I can imagine..
I wasn't surprised either ;-)
>
> > The first argument is on the stack, i.e. GetStackType() returns a type
> and ScInterpreter::sp is 1.
> > When I jump to the next argument to be evaluated, with aCode.Jump(
> pJump[ nIdx ], pJump[ pJump[ 0 ] ] ), ScInterpreter::sp is 0 afterwards.
>
> Apart from that, aCode.Jump( pJump[ nIdx ], pJump[ pJump[ 0 ] ] ) looks
> wrong to me, pJump[0] returns an offset into the RPN array, which can't be
> used as an index for another pJump.
I changed the code in my mail, the actual line reads
aCode.Jump( pJump[ nIdx ], pJump[ nJumpCount ] );
and nJumpCount has the value of pJump[ 0 ].
> See also the description of formula::FormulaTokenIterator::Jump() in
> include/formula/tokenarray.hxx
>
> For understanding it helps to step into such Jump() and see what it does
> to the counters and on the subsequent iteration of the while loop in
> ScInterpreter::Interpret() step into its condition where aCode.Next() is
> executed and analyze what happens to the token array and counters.
Will do.
> > How do I get the argument I jumped to (that part works) on the stack to
> be evaluated?
>
> I'm not sure at the moment.
> [...]
>
> Basically both approaches would work, the latter might be even "easier"
> (I know it's not easy at all) to code with what is already implemented.
I will start digging and experimenting, which may take some time.
Winfried
More information about the LibreOffice
mailing list