>>>>> "SC" == Simon Cozens <[EMAIL PROTECTED]> writes:
SC> So, for instance, the method to get an integer value
SC> ends up looking like this:
SC> static INTVAL Parrot_scalar_get_integer (struct Parrot_Interp *interpreter, PMC*
pmc) {
SC> if (pmc->flags & PS_INTEGER_OK) {
SC> return ((struct PerlScalarData *)(pmc->data))->intdata;
SC> } else if (pmc->flags & PS_NUMBER_OK) {
pmc-> flags |= PS_INTEGER_OK;
SC> return ((struct PerlScalarData*)(pmc->data))->intdata
SC> = (INTVAL)(((struct PerlScalarData*)(pmc->data))->numdata);
SC> ...
SC> }
SC> Any suggestions for cleaning up this crap and making it a bit
SC> more maintainable?
unions?
the data field could be a union of all possible data type pointers. then
your code would be more like:
<rough code>
return pmc->data.int->intdata;
return pmc->data.int->intdata = (INTVAL) pmc->data.num->numdata ;
and the PMC would have in it:
union {
INTVAL *int ;
NUMVAL *num ;
} data ;
i know there are anti-unionists out there but this does solve the
massive casting problems and lets the compiler do more type checking.
uri
--
Uri Guttman ------ [EMAIL PROTECTED] -------- http://www.stemsystems.com
-- Stem is an Open Source Network Development Toolkit and Application Suite -
----- Stem and Perl Development, Systems Architecture, Design and Coding ----
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org