On Tue, Dec 12, 2006 at 09:43:39AM -0800, Allison Randal wrote:
> Patrick, what's the best way to pass-through string types from a
> compiler to Parrot without doing full string processing? To pass the
> current tests, Punie only needs Parrot's single- and double-quoted
> strings, but Past-pm is escaping them.
PAST-pm expects it to be pretty rare that a HLL's string literal
format will exactly match what works as a string literal in PIR, so
PAST::Val nodes expect the HLL to have already decoded the string
constant according to whatever rules the HLL uses. Then PAST-pm
can re-encode the string into a form that is guaranteed to work
in Parrot (even handling things such as placing "unicode:" in
front of PIR string literals if the string has characters that
fall outside of the ASCII range.)
I can modify PAST-pm to provide a "send exactly this string to PIR"
option for PAST::Val. More generally useful would seem to be to
provide a generic function or opcode that can decode single/double
quoted strings according to PIR's encoding rules, and then use
that to get the string into PAST::Val.
PGE::Text could provide such a feature as part of its library-- i.e.,
subrules like:
" <PGE::Text::pir_quoted_string: "> "
' <PGE::Text::pir_quoted_string: '> '
could parse a valid pir string literal and provide the
decoded value as the result object.
> (I will add full string processing to Punie later, but since other
> compilers will also need basic Parrot string types, it makes sense to
> figure it out now.)
I think that the various languages have enough differences in
string literal handling that each compiler will end up writing
its own string literal decoder. (Or we need a semi-powerful library
to handle the many differences.) In the meantime having an
easy-to-access subrule for "just pretend it's a quoted literal
according to PIR conventions" might be a good way for someone
wanting to bootstrap a compiler, without placing Parrot-specific
encodings into PAST-pm.
Lastly, I'm still working out the handling of HLL to Parrot
type mappings -- it's also possible that some of this will
fall out as a result of that.
Pm