Le Tue, Jan 13, 2004 at 10:34:14PM +0100, le valeureux mongueur Stéphane Payrard a dit:
> Le Tue, Jan 13, 2004 at 03:06:18PM -0600, le valeureux mongueur Robert Eaglestone a 
> dit:
> > OK, I'm looking at the Parrot String documentation, and I've
> > got questions.  It's not like the docs are a total mess, they
> > just need some fleshing out.  Yeah, that's it.  So here I go.
> > 
> > Here's the page I'm looking at:
> > 
> > http://www.parrotcode.org/docs/strings.pod.html
> > 
> > And here are my questions.  Or, rather, notes which have
> > questions in them.
> > 
> > 
> > *  OK, I'm game, is 'String' a new thing that's been added to
> >    C in the last ten years?  I can't find it defined anywhere;
> >    my brain must have gone to mush.
> 
> 
> <STRING>, C<String> are different names for a C<struct
> parrot_string_t>. 

I forgot to mention.
You will find the definitions in F<include/parrot/string.h>.

   typedef struct parrot_string_t String;
   ...
   #define STRING struct parrot_string_t

etags or ctags (depending if you are an emacs or vi user) is your
friend. I use the following to avoid gathering definitions outside
the core of parrot.

etags `find -name '*.pmc' -o  -name '*.c' -o  -name '*.h' | grep -v languages/ | grep 
-v icu/`


Strings are garbage collected. All garbage
> collected entities are accessible thru a pointer to a C<struct
> pobj_t> that is an union discriminated by the member C<flags>.
> 
> Relevant code in F<include/parrot/pobj.h>:
> 
>   typedef union UnionVal {
>          ...
>          struct parrot_string_t * string_val;
>   }
> 
>   typedef struct pobj_t {
>       UnionVal u;
>       Parrot_UInt flags;
>   }
> 
>   typedef enum PObj_enum {
>         ...
>         PObj_is_string_FLAG = 1 << 8,
>   }
> 
> 
> But this is mostly irrelevant to the string user that will use
> the API you document. If you care about internals, see more info
> about garbage collection in F<docs/memory_internals.pod>.
> 
> 
> --
>  stef

Reply via email to