|
|
"jr" <cre### [at] gmailcom> wrote:
> hi,
>
> "Tor Olav Kristensen" <tor### [at] TOBEREMOVEDgmailcom> wrote:
> > "jr" <cre### [at] gmailcom> wrote:
> > > ...
> > > the below shows the error message I'm getting when I try to create an object
> > > from within the "payload" macro; ...
> >
> > I suspect that your problem is that your bigSphere and mkSphere macros insert
> > the code for a sphere as the argument to the ! (logical not) operator.
>
> first off thank you for taking a look. appreciated.
>
>
> > I think it is happening in this line in your fore_walker1D macro:
> >
> > #if (!fore_call(a_,cmd_,fore_flagBoolean(f_)))
>
> you mean the parser (ultimately) emits code like '#if (!sphere {...})'? that
> would certainly explain the expect numeric expression message. disclaimer first
> :-): I know nothing of the POV-Ray parser or its internal "voodoo"
> managing/unwinding the call stack, and (all) too little about parsing in
> general.
>
> when I look at the 'fore_call()' macro code, given that the "payload" is a
> void-type macro, the '#else' branch (line 106) will be used. I expect(ed) the
> sphere to be inserted replacing line 107. certainly, when debug is enabled, the
> subsequent '#debug concat()' always displays the value it's received in line
> 108. so, not knowing the parser etc, how [cw]ould the sphere code wind up in
> 'fore_walker1D'?
You don't have to know a lot about the parser. You only have to pay attention to
what the macros "insert" or "leave behind".
The fore_call macro inserts two items: a call to the fore_exec macro and the
number 1.
And the call to the fore_exec macro inserts the contents of the parse_fore.tmp
file, which is this: bigSphere(7,a_[7])
That call to the bigSphere macro again calls the mkSphere macro, which inserts
the sphere { } statement.
Now the resulting if statement looks somewhat like this:
#if (! sphere { } 1)
- and that's not good...
--
Tor Olav
http://subcube.com
https://github.com/t-o-k
Post a reply to this message
|
|