Err, this seems a little too Swiss Army Knife.
This reads like a utility function. (i.e. A function that handles the
most common scenerio.)
Shouldn't a set of lower level visible API be visible? One that seems
to pop out at me is some way of actually parsing a piece of code and
ending up with a handle on a syntax tree. And ways of adding and removing
these pieces.
These are abstract functions that would be needed on the interior of the
parser, but a bottom up approach may be more appropriate here.
I also like the suggestion that rather than supply flags, we should
follow the lead and supply a Perl* something that would return an
appropriate bunch of text to the parser.
<chaim>
>>>>> "DS" == Dan Sugalski <[EMAIL PROTECTED]> writes:
DS> While I'm not sure of the structure of the internals of the parsing piece
DS> of perl at the moment (and, unfortunately, language parsers aren't one of
DS> my strong points), I am reasonably certain of the interface we'll present
DS> to the rest of the world and the other pieces of perl. So... comments?
DS> ---------------
DS> int perl6_parse(PerlInterp *interp,
DS> void *source,
DS> int flags,
DS> void *extra_pointer);
DS> The first parameter is a pointer to a perl interpreter--this'll be used if
DS> any code needs to be executed, as well as being a repository for any
DS> variables that compiled code may set. (Standard stash stuff) The syntax
DS> tree the parser generates will also be embedded here. (One fewer parameter
DS> to deal with, and one fewer thing for an embedding program to track)
DS> The second parameter is a pointer to the source to be compiled. This is
DS> generally a char pointer, but it may also be a FILE * or a pointer to a
DS> function that returns a char pointer.
DS> The third parameter is the flags parameter, and it's optional. If omitted
DS> or set to PERL_CHAR_SOURCE, the second parameter is treated as a standard
DS> null-terminated string. If set to PERL_COUNTED_SOURCE, the second parameter
DS> is treated as if it points to a stream of bytes, where the first four are
DS> the length of the source to be read followed by the source. If set to
DS> PERL_FILE_SOURCE it's assumed to be a FILE *, while if set to
DS> PERL_GENERATED_SOURCE it's assumed to be a pointer to a function that
DS> returns a char pointer. If it's OR'd with PERL_UTF8_SOURCE then the stream
DS> is assumed to be in UTF-8 format instead of platform native.
DS> The fourth parameter is only used if the flags are set to
DS> PERL_GENERATED_SOURCE, in which case it is passed back to the function
DS> whose pointer we got as parameter two.
DS> Dan
DS> --------------------------------------"it's like this"-------------------
DS> Dan Sugalski even samurai
DS> [EMAIL PROTECTED] have teddy bears and even
DS> teddy bears get drunk
--
Chaim Frenkel Nonlinear Knowledge, Inc.
[EMAIL PROTECTED] +1-718-236-0183