Index: resources.c
===================================================================
RCS file: /cvs/public/parrot/resources.c,v
retrieving revision 1.92
diff -u -r1.92 resources.c
--- resources.c	21 Oct 2002 08:46:59 -0000	1.92
+++ resources.c	26 Oct 2002 23:45:09 -0000
@@ -430,15 +430,22 @@
     struct Memory_Pool *pool;
 
     copysize = (str->buflen > tosize ? tosize : str->buflen);
-    pool = (str->flags & BUFFER_constant_FLAG)
-         ? interpreter->arena_base->constant_string_pool
-         : interpreter->arena_base->memory_pool;
-    if (!(str->flags & BUFFER_COW_FLAG)) {
-        pool->guaranteed_reclaimable += str->buflen;
+
+    if (interpreter) {
+        pool = (str->flags & BUFFER_constant_FLAG)
+            ? interpreter->arena_base->constant_string_pool
+            : interpreter->arena_base->memory_pool;
+        if (!(str->flags & BUFFER_COW_FLAG)) {
+            pool->guaranteed_reclaimable += str->buflen;
+        }
+        pool->possibly_reclaimable += str->buflen;
+
+        mem = mem_allocate(interpreter, &alloc_size, pool, STRING_ALIGNMENT-1);
+    }
+    else {
+        mem = mem_allocate(NULL, &alloc_size, NULL, STRING_ALIGNMENT-1);
     }
-    pool->possibly_reclaimable += str->buflen;
 
-    mem = mem_allocate(interpreter, &alloc_size, pool, STRING_ALIGNMENT-1);
     if (!mem) {
         return NULL;
     }
Index: string.c
===================================================================
RCS file: /cvs/public/parrot/string.c,v
retrieving revision 1.100
diff -u -r1.100 string.c
--- string.c	22 Oct 2002 06:44:06 -0000	1.100
+++ string.c	26 Oct 2002 23:45:12 -0000
@@ -30,8 +30,10 @@
     if (s->flags & (BUFFER_COW_FLAG|BUFFER_constant_FLAG)) {
         void *p;
         UINTVAL size;
-        interpreter->GC_block_level++;
-        interpreter->DOD_block_level++;
+        if (interpreter) {
+            interpreter->GC_block_level++;
+            interpreter->DOD_block_level++;
+        }
 
         /* Make the copy point to only the portion of the string that
          * we are actually using. */
@@ -43,8 +45,10 @@
         Parrot_allocate_string(interpreter, s, size);
         mem_sys_memcopy(s->bufstart, p, size);
         s->flags &= ~(UINTVAL)(BUFFER_COW_FLAG | BUFFER_external_FLAG);
-        interpreter->GC_block_level--;
-        interpreter->DOD_block_level--;
+        if (interpreter) {
+            interpreter->GC_block_level--;
+            interpreter->DOD_block_level--;
+        }
     }
 }
 
