Hi,
I am trying to implement the 'eval' macro im Parrot m4. The Parrot m4
interpreter is implemented in PIR. The 'eval' is a simple interpreter for
integer artithmetic and forms thus a micro language within a mini language.
For implementing the 'eval' macro I took following approach:
i. Implement a 'm4_eval_compiler' in C, based on 'examples/compilers/japh.c'
ii. When encountering something likeexamples/compilers
eval(`1 + 1')
I extract the string "1 + 1". and compile it
iii. The compiler returns a .Sub which can be invoked.
In a test script this looks like:
.sub _main
.local pmc m4_eval_compiler_lib
m4_eval_compiler_lib = loadlib "m4_eval_compiler"
compreg P1, "m4_eval_compiler"
.local string code
code = '1 + 1'
.local pmc compiled_code
compiled_code = compile P1, code
invoke compiled_code
AFTER_INVOCATION: print "compiled sub has been invoked\n"
end
.end
This works almost as expected. The problem is that I never get to the label
AFTER_INVOCATION. So here are my questions:
Is there a way to tell 'compiled_code' to continue with 'AFTER_INVOKATION' when
it is invoked?
This might be analogous to newsub(out PMC, in INT, labelconst INT).
Can I use 'invokecc' for that?
Am I completely on the wrong track?
How can I retrieve return values from 'compiled_code'?
CU, Bernhard
CU, Bernhard