cvsuser     03/12/04 22:33:17

  Modified:    imcc     symreg.h symreg.c
  Log:
  Add a few better named wrappers to _mk_address
  
  Revision  Changes    Path
  1.38      +15 -2     parrot/imcc/symreg.h
  
  Index: symreg.h
  ===================================================================
  RCS file: /cvs/public/parrot/imcc/symreg.h,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -w -r1.37 -r1.38
  --- symreg.h  24 Nov 2003 06:03:23 -0000      1.37
  +++ symreg.h  5 Dec 2003 06:33:16 -0000       1.38
  @@ -45,7 +45,10 @@
   enum USAGE {
        U_KEYED         = 1 << 0,       /* array, hash, keyed */
        U_NEW           = 1 << 1,       /* PMC was inited */
  -     U_SPILL         = 1 << 2        /* reg is spilled */
  +     U_SPILL         = 1 << 2,       /* reg is spilled */
  +     U_GLOBAL        = 1 << 3,       /* symbol is global (fixup) */
  +     U_LEXICAL       = 1 << 4,       /* symbol is lexical */
  +     U_FIXUP         = 1 << 5        /* maybe not global, force fixup */
   };
   
   typedef struct _SymReg {
  @@ -88,6 +91,10 @@
   };
   
   EXTERN Namespace * namespace;
  +
  +struct _IMC_Unit;
  +
  +
   /* functions */
   
   SymReg * mk_symreg(char *, int t);
  @@ -95,9 +102,16 @@
   SymReg * mk_ident(char *, int t);
   SymReg * mk_const(char *, int t);
   SymReg * mk_const_ident(char *, int t, SymReg *, int);
  +
  +/* Eventually make mk_address static */
   SymReg * mk_address(char *, int uniq);
  +/* Expose API through these */
   SymReg * mk_sub_label(char *);
  +SymReg * mk_sub_address(char *);
  +SymReg * mk_local_label(struct _IMC_Unit *, char *);
  +SymReg * mk_label_address(struct _IMC_Unit *, char *);
   SymReg * mk_pcc_sub(char *, int proto);
  +
   char * symreg_to_str(SymReg *);    
   void add_pcc_arg(SymReg *r, SymReg * arg);
   void add_pcc_sub(SymReg *r, SymReg * arg);
  @@ -128,7 +142,6 @@
        U_add_all };
   SymReg * mk_pasm_reg(char *);
   
  -struct _IMC_Unit;
   
   void free_sym(SymReg *r);
   void store_symreg(SymReg * r);
  
  
  
  1.43      +34 -3     parrot/imcc/symreg.c
  
  Index: symreg.c
  ===================================================================
  RCS file: /cvs/public/parrot/imcc/symreg.c,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -w -r1.42 -r1.43
  --- symreg.c  24 Nov 2003 06:03:23 -0000      1.42
  +++ symreg.c  5 Dec 2003 06:33:16 -0000       1.43
  @@ -332,21 +332,52 @@
       return r;
   }
   
  -
   SymReg * mk_address(char * name, int uniq)
   {
  +    SymReg * s;
       SymReg ** h = *name == '_' ? ghash : cur_unit->hash;
  -    return _mk_address(h, name, uniq);
  +    s = _mk_address(h, name, uniq);
  +    if(*name == '_')
  +       s->usage |= U_FIXUP;
  +    return s;
   }
   
   /*
    * Make and store a new address label for a sub.
  + * Label gets a fixup entry.
    */
   SymReg * mk_sub_label(char * name)
   {
  -    return _mk_address(ghash, name, U_add_uniq_sub);
  +    SymReg * s = _mk_address(ghash, name, U_add_uniq_sub);
  +    s->usage |= U_FIXUP;
  +    return s;
  +}
  +
  +/*
  + * Make a symbol for a label, symbol gets a fixup entry.
  + */
  +SymReg * mk_sub_address(char * name)
  +{
  +    SymReg * s = _mk_address(ghash, name, U_add_once);
  +    s->usage |= U_FIXUP;
  +    return s;  
   }
   
  +/*
  + * Make a local symbol, no fixup entry.
  + */
  +SymReg * mk_local_label(IMC_Unit * unit, char * name)
  +{
  +    return _mk_address(unit->hash, name, U_add_uniq_label);
  +}
  +
  +/*
  + *
  + */
  +SymReg * mk_label_address(IMC_Unit * unit, char * name)
  +{
  +    return _mk_address(unit->hash, name, U_add_once);
  +}
   
   
   /* link keys to a keys structure = SymReg
  
  
  

Reply via email to