cvs commit: ponie/perl embed.fnc proto.h sv.c

[email protected] (Nicholas Clark) 5 May 2004 21:02:03 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/05/05 14:02:02

  Modified:    perl     embed.fnc proto.h sv.c
  Log:
  And now NVs
  
  Revision  Changes    Path
  1.21      +2 -2      ponie/perl/embed.fnc
  
  Index: embed.fnc
  ===================================================================
  RCS file: /cvs/public/ponie/perl/embed.fnc,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -w -r1.20 -r1.21
  --- embed.fnc	5 May 2004 19:44:34 -0000	1.20
  +++ embed.fnc	5 May 2004 21:02:02 -0000	1.21
  @@ -1265,7 +1265,7 @@
   s	|void	|more_xpvbm
   s	|void	|more_xrv
   s	|Parrot_PMC	|new_xiv
  -s	|XPVNV*	|new_xnv
  +s	|Parrot_PMC	|new_xnv
   s	|Parrot_PMC	|new_xpv
   s	|Parrot_PMC	|new_xpviv
   s	|Parrot_PMC	|new_xpvnv
  @@ -1279,7 +1279,7 @@
   s	|XPVBM*	|new_xpvbm
   s	|Parrot_PMC	|new_xrv
   s	|void	|del_xiv	|Parrot_PMC p
  -s	|void	|del_xnv	|XPVNV* p
  +s	|void	|del_xnv	|Parrot_PMC p
   s	|void	|del_xpv	|Parrot_PMC p
   s	|void	|del_xpviv	|Parrot_PMC p
   s	|void	|del_xpvnv	|Parrot_PMC p
  
  
  
  1.21      +2 -2      ponie/perl/proto.h
  
  Index: proto.h
  ===================================================================
  RCS file: /cvs/public/ponie/perl/proto.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -w -r1.20 -r1.21
  --- proto.h	5 May 2004 19:44:34 -0000	1.20
  +++ proto.h	5 May 2004 21:02:02 -0000	1.21
  @@ -1217,7 +1217,7 @@
   STATIC void	S_more_xpvbm(pTHX);
   STATIC void	S_more_xrv(pTHX);
   STATIC Parrot_PMC	S_new_xiv(pTHX);
  -STATIC XPVNV*	S_new_xnv(pTHX);
  +STATIC Parrot_PMC	S_new_xnv(pTHX);
   STATIC Parrot_PMC	S_new_xpv(pTHX);
   STATIC Parrot_PMC	S_new_xpviv(pTHX);
   STATIC Parrot_PMC	S_new_xpvnv(pTHX);
  @@ -1231,7 +1231,7 @@
   STATIC XPVBM*	S_new_xpvbm(pTHX);
   STATIC Parrot_PMC	S_new_xrv(pTHX);
   STATIC void	S_del_xiv(pTHX_ Parrot_PMC p);
  -STATIC void	S_del_xnv(pTHX_ XPVNV* p);
  +STATIC void	S_del_xnv(pTHX_ Parrot_PMC p);
   STATIC void	S_del_xpv(pTHX_ Parrot_PMC p);
   STATIC void	S_del_xpviv(pTHX_ Parrot_PMC p);
   STATIC void	S_del_xpvnv(pTHX_ Parrot_PMC p);
  
  
  
  1.28      +11 -16    ponie/perl/sv.c
  
  Index: sv.c
  ===================================================================
  RCS file: /cvs/public/ponie/perl/sv.c,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -w -r1.27 -r1.28
  --- sv.c	5 May 2004 19:44:34 -0000	1.27
  +++ sv.c	5 May 2004 21:02:02 -0000	1.28
  @@ -618,7 +618,7 @@
   STATIC Parrot_PMC
   S_new_xiv(pTHX)
   {
  -  Parrot_Int  type = Parrot_PMC_typenum(PL_Parrot, "Perl5PVIV");
  +  Parrot_Int  type = Parrot_PMC_typenum(PL_Parrot, "Perl5IV");
     Parrot_PMC  pviv = Parrot_PMC_new(PL_Parrot, type);
     Parrot_register_pmc(PL_Parrot, pviv);
     return MUMBLE(pviv);
  @@ -657,31 +657,24 @@
   
   /* grab a new NV body from the free list, allocating more if necessary */
   
  -STATIC XPVNV*
  +STATIC Parrot_PMC
   S_new_xnv(pTHX)
   {
  -    NV* xnv;
  -    LOCK_SV_MUTEX;
  -    if (!PL_xnv_root)
  -	more_xnv();
  -    xnv = PL_xnv_root;
  -    PL_xnv_root = *(NV**)xnv;
  -    UNLOCK_SV_MUTEX;
  -    return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
  +  Parrot_Int  type = Parrot_PMC_typenum(PL_Parrot, "Perl5NV");
  +  Parrot_PMC  pvnv = Parrot_PMC_new(PL_Parrot, type);
  +  Parrot_register_pmc(PL_Parrot, pvnv);
  +  return MUMBLE(pvnv);
   }
   
   /* return an NV body to the free list */
   
   STATIC void
  -S_del_xnv(pTHX_ XPVNV *p)
  +S_del_xnv(pTHX_ Parrot_PMC p)
   {
  -    NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
  -    LOCK_SV_MUTEX;
  -    *(NV**)xnv = PL_xnv_root;
  -    PL_xnv_root = xnv;
  -    UNLOCK_SV_MUTEX;
  +  Parrot_unregister_pmc(PL_Parrot, p);
   }
   
  +
   /* allocate another arena's worth of NV bodies */
   
   STATIC void
  @@ -1742,6 +1735,7 @@
   	magic	= 0;
   	stash	= 0;
   	del_XNV(SvANY(sv));
  +	SvPMC_off(sv);
   	SvANY(sv) = 0;
   	if (mt < SVt_PVNV)
   	    mt = SVt_PVNV;
  @@ -1818,6 +1812,7 @@
   	break;
       case SVt_NV:
   	SvANY(sv) = new_XNV();
  +	SvPMC_on(sv);
   	SvNVX(sv)	= nv;
   	break;
       case SVt_RV: