cvsuser 04/01/02 09:01:02
Modified: classes env.pmc perlenv.pmc
Log:
create PerlEnv PMCs as singletons
Revision Changes Path
1.10 +3 -3 parrot/classes/env.pmc
Index: env.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/env.pmc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -w -r1.9 -r1.10
--- env.pmc 10 Dec 2003 17:18:30 -0000 1.9
+++ env.pmc 2 Jan 2004 17:01:01 -0000 1.10
@@ -1,7 +1,7 @@
/* env.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: env.pmc,v 1.9 2003/12/10 17:18:30 leo Exp $
+ * $Id: env.pmc,v 1.10 2004/01/02 17:01:01 leo Exp $
* Overview:
* These are the vtable functions for the Env base class, which
* accesses the system environment
@@ -18,7 +18,7 @@
STRING* get_string_keyed(PMC* key) {
char *keyname = string_to_cstring(interpreter,
VTABLE_get_string(interpreter, key));
- int free_it;
+ int free_it = 0;
STRING *retval;
char *val = NULL;
@@ -33,7 +33,7 @@
} else {
retval = string_from_cstring(interpreter, "", 0);
}
- if (free_it) mem_sys_free(val);
+ if (free_it && val) mem_sys_free(val);
return retval;
}
1.2 +15 -2 parrot/classes/perlenv.pmc
Index: perlenv.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/perlenv.pmc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- perlenv.pmc 3 Nov 2003 15:06:44 -0000 1.1
+++ perlenv.pmc 2 Jan 2004 17:01:01 -0000 1.2
@@ -1,7 +1,7 @@
/* perlenv.pmc
* Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
* CVS Info
- * $Id: perlenv.pmc,v 1.1 2003/11/03 15:06:44 educated_foo Exp $
+ * $Id: perlenv.pmc,v 1.2 2004/01/02 17:01:01 leo Exp $
* Overview:
* These are the vtable functions for the Env base class, which
* accesses the system environment
@@ -13,7 +13,20 @@
#include "parrot/parrot.h"
-pmclass PerlEnv extends Env {
+static PMC * Env_PMC;
+
+pmclass PerlEnv singleton extends Env {
+ /*
+ * singleton creation interface s. pmc.c
+ */
+ void* get_pointer() {
+ return Env_PMC;
+ }
+
+ void set_pointer(void* ptr) {
+ Env_PMC = (PMC*) ptr;
+ }
+
PMC* get_pmc_keyed (PMC* key) {
STRING* string = DYNSELF.get_string_keyed(key);
PMC * ret = pmc_new(INTERP, enum_class_PerlString);