[svn:parrot] r47038 - in branches/ns_func_cleanup: . config/gen/makefiles include/parrot ports/cygwin src src/dynpmc

whiteknight at svn.parrot.org whiteknight at svn.parrot.org
Thu May 27 00:38:57 UTC 2010


Author: whiteknight
Date: Thu May 27 00:38:57 2010
New Revision: 47038
URL: https://trac.parrot.org/parrot/changeset/47038

Log:
[namespace] This is going to create problems on mergeback, I can feel the chill running down my spine. Rename src/global.c -> src/namespace.c, and include/parrot/global.h -> include/parrot/namespace.h

Added:
   branches/ns_func_cleanup/include/parrot/namespace.h
      - copied, changed from r47037, branches/ns_func_cleanup/include/parrot/global.h
   branches/ns_func_cleanup/src/namespace.c
      - copied, changed from r47037, branches/ns_func_cleanup/src/global.c
Deleted:
   branches/ns_func_cleanup/include/parrot/global.h
   branches/ns_func_cleanup/src/global.c
Modified:
   branches/ns_func_cleanup/MANIFEST
   branches/ns_func_cleanup/config/gen/makefiles/root.in
   branches/ns_func_cleanup/include/parrot/parrot.h
   branches/ns_func_cleanup/ports/cygwin/README
   branches/ns_func_cleanup/src/dynpmc/Defines.in

Modified: branches/ns_func_cleanup/MANIFEST
==============================================================================
--- branches/ns_func_cleanup/MANIFEST	Thu May 27 00:23:51 2010	(r47037)
+++ branches/ns_func_cleanup/MANIFEST	Thu May 27 00:38:57 2010	(r47038)
@@ -960,7 +960,6 @@
 include/parrot/exit.h                                       [main]include
 include/parrot/extend.h                                     [main]include
 include/parrot/gc_api.h                                     [main]include
-include/parrot/global.h                                     [main]include
 include/parrot/global_setup.h                               [main]include
 include/parrot/hash.h                                       [main]include
 include/parrot/hll.h                                        [main]include
@@ -976,6 +975,7 @@
 include/parrot/memory.h                                     [main]include
 include/parrot/misc.h                                       [main]include
 include/parrot/multidispatch.h                              [main]include
+include/parrot/namespace.h                                  [main]include
 include/parrot/nci.h                                        [main]include
 include/parrot/oo.h                                         [main]include
 include/parrot/oo_private.h                                 [main]include
@@ -1287,7 +1287,6 @@
 src/gc/malloc_trace.c                                       []
 src/gc/mark_sweep.c                                         []
 src/gc/system.c                                             []
-src/global.c                                                []
 src/global_setup.c                                          []
 src/hash.c                                                  []
 src/hll.c                                                   []
@@ -1313,6 +1312,7 @@
 src/main.c                                                  []
 src/misc.c                                                  []
 src/multidispatch.c                                         []
+src/namespace.c                                             []
 src/nci/api.c                                               []
 src/nci/core_thunks.c                                       []
 src/nci/core_thunks.nci                                     []

Modified: branches/ns_func_cleanup/config/gen/makefiles/root.in
==============================================================================
--- branches/ns_func_cleanup/config/gen/makefiles/root.in	Thu May 27 00:23:51 2010	(r47037)
+++ branches/ns_func_cleanup/config/gen/makefiles/root.in	Thu May 27 00:38:57 2010	(r47038)
@@ -390,7 +390,7 @@
 	$(INC_DIR)/vtables.h \
 	$(INC_DIR)/multidispatch.h \
 	$(INC_DIR)/library.h \
-	$(INC_DIR)/global.h \
+	$(INC_DIR)/namespace.h \
 	$(INC_DIR)/stat.h \
 	$(INC_DIR)/hll.h \
 	$(INC_DIR)/pbcversion.h \
@@ -451,7 +451,6 @@
     src/gc/gc_inf$(O) \
     src/gc/mark_sweep$(O) \
     src/gc/system$(O) \
-    src/global$(O) \
     src/global_setup$(O) \
     src/hash$(O) \
     src/hll$(O) \
@@ -468,6 +467,7 @@
     src/longopt$(O) \
     src/misc$(O) \
     src/multidispatch$(O) \
+    src/namespace$(O) \
     src/frame_builder$(O) \
     src/nci/api$(O) \
     src/nci/core_thunks$(O) \
@@ -636,7 +636,6 @@
     src/debug.str \
     src/dynext.str \
     src/exceptions.str \
-    src/global.str \
     src/global_setup.str \
     src/hll.str \
     src/call/pcc.str \
@@ -648,6 +647,7 @@
     src/key.str \
     src/library.str \
     src/multidispatch.str \
+    src/namespace.str \
     src/frame_builder.str \
     src/nci/api.str \
     src/nci/core_thunks.str \
@@ -1227,7 +1227,7 @@
 
 src/global_setup$(O) : $(PARROT_H_HEADERS) src/global_setup.str src/global_setup.c
 
-src/global$(O) : $(PARROT_H_HEADERS) src/global.str src/global.c \
+src/namespace$(O) : $(PARROT_H_HEADERS) src/namespace.str src/namespace.c \
 	include/pmc/pmc_sub.h
 
 src/pmc$(O) : include/pmc/pmc_class.h src/pmc.c \

Deleted: branches/ns_func_cleanup/include/parrot/global.h
==============================================================================
--- branches/ns_func_cleanup/include/parrot/global.h	Thu May 27 00:38:57 2010	(r47037)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,204 +0,0 @@
-/* global.h
- *  Copyright (C) 2004, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *      Contains accessor functions for globals
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_GLOBAL_H_GUARD
-#define PARROT_GLOBAL_H_GUARD
-
-/* HEADERIZER BEGIN: src/global.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_find_current_namespace_global(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *globalname))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_find_namespace_global(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *ns),
-    ARGIN_NULLOK(STRING *globalname))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-PMC * Parrot_ns_find_global_from_op(PARROT_INTERP,
-    ARGIN(PMC *ns),
-    ARGIN_NULLOK(STRING *globalname),
-    ARGIN_NULLOK(void *next))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_find_global_s(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *str_key),
-    ARGIN_NULLOK(STRING *globalname))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_find_name_op(PARROT_INTERP,
-    ARGIN(STRING *name),
-    SHIM(void *next))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_get_global(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *ns),
-    ARGIN_NULLOK(STRING *globalname))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_get_namespace_keyed(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN(PMC *pmc_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_get_namespace_keyed_str(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN_NULLOK(STRING *str_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_make_namespace_autobase(PARROT_INTERP, ARGIN_NULLOK(PMC *key))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_make_namespace_keyed(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN(PMC *pmc_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_make_namespace_keyed_str(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN(STRING *str_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC * Parrot_ns_get_name(PARROT_INTERP, ARGIN(PMC *_namespace))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-void Parrot_ns_set_global(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *ns),
-    ARGIN_NULLOK(STRING *globalname),
-    ARGIN_NULLOK(PMC *val))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_ns_store_global(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *ns),
-    ARGIN_NULLOK(STRING *globalname),
-    ARGIN_NULLOK(PMC *val))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_store_global_s(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *str_key),
-    ARGIN_NULLOK(STRING *globalname),
-    ARGIN_NULLOK(PMC *val))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_ns_store_sub(PARROT_INTERP, ARGIN(PMC *sub_pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-#define ASSERT_ARGS_Parrot_ns_find_current_namespace_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_find_namespace_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_find_global_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ns))
-#define ASSERT_ARGS_Parrot_find_global_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_find_name_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_Parrot_ns_get_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_get_namespace_keyed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns) \
-    , PARROT_ASSERT_ARG(pmc_key))
-#define ASSERT_ARGS_Parrot_ns_get_namespace_keyed_str \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns))
-#define ASSERT_ARGS_Parrot_ns_make_namespace_autobase \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_make_namespace_keyed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns) \
-    , PARROT_ASSERT_ARG(pmc_key))
-#define ASSERT_ARGS_Parrot_ns_make_namespace_keyed_str \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns) \
-    , PARROT_ASSERT_ARG(str_key))
-#define ASSERT_ARGS_Parrot_ns_get_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(_namespace))
-#define ASSERT_ARGS_Parrot_ns_set_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_store_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_store_global_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_ns_store_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sub_pmc))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/global.c */
-
-#endif /* PARROT_GLOBAL_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-

Copied and modified: branches/ns_func_cleanup/include/parrot/namespace.h (from r47037, branches/ns_func_cleanup/include/parrot/global.h)
==============================================================================
--- branches/ns_func_cleanup/include/parrot/global.h	Thu May 27 00:23:51 2010	(r47037, copy source)
+++ branches/ns_func_cleanup/include/parrot/namespace.h	Thu May 27 00:38:57 2010	(r47038)
@@ -1,5 +1,5 @@
-/* global.h
- *  Copyright (C) 2004, Parrot Foundation.
+/* namespace.h
+ *  Copyright (C) 2004-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -13,7 +13,7 @@
 #ifndef PARROT_GLOBAL_H_GUARD
 #define PARROT_GLOBAL_H_GUARD
 
-/* HEADERIZER BEGIN: src/global.c */
+/* HEADERIZER BEGIN: src/namespace.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
@@ -191,7 +191,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/global.c */
+/* HEADERIZER END: src/namespace.c */
 
 #endif /* PARROT_GLOBAL_H_GUARD */
 

Modified: branches/ns_func_cleanup/include/parrot/parrot.h
==============================================================================
--- branches/ns_func_cleanup/include/parrot/parrot.h	Thu May 27 00:23:51 2010	(r47037)
+++ branches/ns_func_cleanup/include/parrot/parrot.h	Thu May 27 00:38:57 2010	(r47038)
@@ -284,7 +284,7 @@
 #include "parrot/vtables.h"
 #include "parrot/multidispatch.h"
 #include "parrot/library.h"
-#include "parrot/global.h"
+#include "parrot/namespace.h"
 #include "parrot/stat.h"
 #include "parrot/hll.h"
 #include "parrot/pbcversion.h"

Modified: branches/ns_func_cleanup/ports/cygwin/README
==============================================================================
--- branches/ns_func_cleanup/ports/cygwin/README	Thu May 27 00:23:51 2010	(r47037)
+++ branches/ns_func_cleanup/ports/cygwin/README	Thu May 27 00:38:57 2010	(r47038)
@@ -1,7 +1,7 @@
 parrot
 ----------------------------------
 Parrot is a virtual machine designed to efficiently compile and
-execute bytecode for interpreted languages. Parrot is a target for Perl 6 
+execute bytecode for interpreted languages. Parrot is a target for Perl 6
 and a lot of other languages.
 
 Runtime requirements:
@@ -11,7 +11,7 @@
   w32api pcre libpq5 openssl
 
 Build requirements:
-  readline libncurses-devel libicu-devel libgmp-devel libgdbm-devel perl 
+  readline libncurses-devel libicu-devel libgmp-devel libgdbm-devel perl
   make gcc
 
 Optional build requirements:
@@ -40,7 +40,7 @@
   /usr/src/parrot-devel-<VER>-<REL>.tar.bz2
   /usr/src/parrot-docs-<VER>-<REL>.tar.bz2
 
-Or use 'cygport parrot-<VER>-<REL>.cygport prep' to get a patched 
+Or use 'cygport parrot-<VER>-<REL>.cygport prep' to get a patched
 source directory.
 
 -------------------------------------------------------------------------------
@@ -657,7 +657,6 @@
  /usr/include/parrot/1.0.0/parrot/extend.h
  /usr/include/parrot/1.0.0/parrot/extend_vtable.h
  /usr/include/parrot/1.0.0/parrot/feature.h
- /usr/include/parrot/1.0.0/parrot/global.h
  /usr/include/parrot/1.0.0/parrot/global_setup.h
  /usr/include/parrot/1.0.0/parrot/has_header.h
  /usr/include/parrot/1.0.0/parrot/hash.h
@@ -676,6 +675,7 @@
  /usr/include/parrot/1.0.0/parrot/memory.h
  /usr/include/parrot/1.0.0/parrot/misc.h
  /usr/include/parrot/1.0.0/parrot/mmd.h
+ /usr/include/parrot/1.0.0/parrot/namespace.h
  /usr/include/parrot/1.0.0/parrot/nci.h
  /usr/include/parrot/1.0.0/parrot/oo.h
  /usr/include/parrot/1.0.0/parrot/oo_private.h
@@ -1877,7 +1877,7 @@
 ----- version parrot-1.0.0-1 -----
 * cygwin 1.7, gcc-4.3 only
 * renamed libparrot-devel to parrot-devel
-* removed libparrot1 
+* removed libparrot1
 * new parrot-docs for make html
 * library.c patch to allow library/*.pbc
 * removed pbc_info
@@ -1910,21 +1910,21 @@
 
 ----- version parrot-0.7.0-1 -----
 * removed /usr/runtime and its preremove and postinstall scripts
-* added parrot_exists_check to .cygport. Already installed parrot 
+* added parrot_exists_check to .cygport. Already installed parrot
   still not supported, despite my #39742 patch
 * other minor .cygport improvements: export PATH in seperate lines to fix check
-* new patches: 
+* new patches:
   [perl #39742] [BUG]   installed conflict
   [perl #58034] [TODO]  config_args
   [perl #56996] [TODO]  FHS runtime paths
-* enhanced patch: 
+* enhanced patch:
   [perl #56554] [TODO]  make install -C languages
 * upstream fixed patches:
   [perl #56544] [PATCH] install_files.pl
   [perl #56998] [TODO]  rename cygwin dll to cygparrot$MAJOR_$MINOR_$PATCH.dll
   [perl #57006] [PATCH] add cygwin opengl config quirks
   [perl #57296] [TODO]  make install -C languages
-* fixed pipp, perl6, pheme, tcl installables. added pcbc's to library  
+* fixed pipp, perl6, pheme, tcl installables. added pcbc's to library
 
 ----- version parrot-0.6.4-2 -----
 * fixed invalid parrot languages and perl6 paths referencing the build_dir
@@ -1933,7 +1933,7 @@
 * added myconfig parrotbug VERSION to /usr/lib/parrot
 * moved language dll's to parrot-languages
 * added more sublanguage exe's: bfc, bfco
-* added usr/lib/parrot/include/config.fpmc usr/lib/parrot/include/interpinfo.pasm 
+* added usr/lib/parrot/include/config.fpmc usr/lib/parrot/include/interpinfo.pasm
   to parrot
 
 ----- version parrot-0.6.4-1 -----
@@ -1951,11 +1951,11 @@
      [perl #57114] [PATCH] urm RealBin issue
 
 ----- version parrot-0.6.3-1 -----
-* first port, with the help from #parrot, fedora spec, 
+* first port, with the help from #parrot, fedora spec,
   gentoo ebuild and freebsd ports.
 * the php implementation plumhead is still named plumhead.
   will be renamed to pipp from the next release 0.6.4 on.
 
 Cygwin port maintained by: Reini Urban <rurban at x-ray.at>
-Please address all questions to the Cygwin mailing list 
+Please address all questions to the Cygwin mailing list
 at <cygwin at cygwin.com>

Modified: branches/ns_func_cleanup/src/dynpmc/Defines.in
==============================================================================
--- branches/ns_func_cleanup/src/dynpmc/Defines.in	Thu May 27 00:23:51 2010	(r47037)
+++ branches/ns_func_cleanup/src/dynpmc/Defines.in	Thu May 27 00:38:57 2010	(r47038)
@@ -41,7 +41,6 @@
     include/parrot/extend_vtable.h \
     include/parrot/feature.h \
     include/parrot/gc_api.h \
-    include/parrot/global.h \
     include/parrot/global_setup.h \
     include/parrot/has_header.h \
     include/parrot/hash.h \
@@ -54,6 +53,7 @@
     include/parrot/memory.h \
     include/parrot/misc.h \
     include/parrot/multidispatch.h \
+    include/parrot/namespace.h \
     include/parrot/nci.h \
     include/parrot/oo.h \
     include/parrot/op.h \

Deleted: branches/ns_func_cleanup/src/global.c
==============================================================================
--- branches/ns_func_cleanup/src/global.c	Thu May 27 00:38:57 2010	(r47037)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,854 +0,0 @@
-/*
-Copyright (C) 2004-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/global.c
-
-=head1 DESCRIPTION
-
-Access to global PMCs
-
-=head1 FUNCTIONS
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-#include "global.str"
-#include "pmc/pmc_sub.h"
-#include "pmc/pmc_callcontext.h"
-
-/* HEADERIZER HFILE: include/parrot/global.h */
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * get_namespace_pmc(PARROT_INTERP, ARGIN(PMC *sub_pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * internal_ns_keyed(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN(PMC *pmc_key),
-    int flags)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * internal_ns_keyed_key(PARROT_INTERP,
-    ARGIN(PMC *ns),
-    ARGIN(PMC *key),
-    int flags)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * internal_ns_keyed_str(PARROT_INTERP,
-    ARGIN(PMC *base_ns),
-    ARGIN(STRING *key),
-    int flags)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * internal_ns_maybe_create(PARROT_INTERP,
-    ARGIN(PMC *ns),
-    ARGIN(STRING *key),
-    int flags)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-static void store_sub_in_multi(PARROT_INTERP,
-    ARGIN(PMC *sub_pmc),
-    ARGIN(PMC *ns))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-#define ASSERT_ARGS_get_namespace_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sub_pmc))
-#define ASSERT_ARGS_internal_ns_keyed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns) \
-    , PARROT_ASSERT_ARG(pmc_key))
-#define ASSERT_ARGS_internal_ns_keyed_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ns) \
-    , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_internal_ns_keyed_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(base_ns) \
-    , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_internal_ns_maybe_create __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ns) \
-    , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_store_sub_in_multi __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sub_pmc) \
-    , PARROT_ASSERT_ARG(ns))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: static */
-
-#define DEBUG_GLOBAL 0
-
-/* flags for internal_ns_keyed */
-#define INTERN_NS_CREAT 1       /* I'm a fan of the classics */
-
-/*
-
-=item C<static PMC * internal_ns_keyed_str(PARROT_INTERP, PMC *base_ns, STRING
-*key, int flags)>
-
-Internal function to do keyed namespace lookup relative to a given namespace
-PMC.  Understands STRINGs.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-internal_ns_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
-    ARGIN(STRING *key), int flags)
-{
-    ASSERT_ARGS(internal_ns_keyed_str)
-    PMC * const ns = VTABLE_get_pmc_keyed_str(interp, base_ns, key);
-
-    if (!PMC_IS_NULL(ns) && VTABLE_isa(interp, ns, CONST_STRING(interp, "NameSpace")))
-        return ns;
-
-    return internal_ns_maybe_create(interp, base_ns, key, flags);
-}
-
-/*
-
-=item C<static PMC * internal_ns_keyed_key(PARROT_INTERP, PMC *ns, PMC *key, int
-flags)>
-
-Internal function to do keyed namespace lookup relative to a given namespace
-PMC.  Understands Key PMCs.  Used from C<internal_ns_keyed>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-internal_ns_keyed_key(PARROT_INTERP, ARGIN(PMC *ns), ARGIN(PMC *key), int flags)
-{
-    ASSERT_ARGS(internal_ns_keyed_key)
-    while (key) {
-        STRING * const part = VTABLE_get_string(interp, key);
-        PMC    *sub_ns      = VTABLE_get_pmc_keyed_str(interp, ns, part);
-
-        if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, CONST_STRING(interp, "NameSpace"))) {
-            sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
-
-            if (PMC_IS_NULL(sub_ns))
-                return PMCNULL;
-        }
-
-        ns  = sub_ns;
-        key = VTABLE_shift_pmc(interp, key);
-    }
-
-    return ns;
-}
-
-/*
-
-=item C<static PMC * internal_ns_keyed(PARROT_INTERP, PMC *base_ns, PMC
-*pmc_key, int flags)>
-
-internal_ns_keyed: Internal function to do keyed namespace lookup relative to a
-given namespace PMC.  Understands String, Key, and array PMCs containing
-strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-internal_ns_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN(PMC *pmc_key), int flags)
-{
-    ASSERT_ARGS(internal_ns_keyed)
-
-    if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) {
-        STRING * const str_key = VTABLE_get_string(interp, pmc_key);
-        return internal_ns_keyed_str(interp, base_ns, str_key, flags);
-    }
-    else if (pmc_key->vtable->base_type == enum_class_Key)
-        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
-    else {
-        /* array of strings */
-        STRING * const isans = CONST_STRING(interp, "NameSpace");
-        const INTVAL n = VTABLE_elements(interp, pmc_key);
-        INTVAL i;
-        PMC *ns = base_ns;
-
-        for (i = 0; i < n; ++i) {
-            STRING * const part = VTABLE_get_string_keyed_int(interp, pmc_key, i);
-            PMC *sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
-
-            if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, isans)) {
-                sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
-                if (PMC_IS_NULL(sub_ns))
-                    return PMCNULL;
-            }
-            ns = sub_ns;
-        }
-        return ns;
-    }
-}
-
-/*
-
-=item C<static PMC * internal_ns_maybe_create(PARROT_INTERP, PMC *ns, STRING
-*key, int flags)>
-
-Given the a namespace PMC, a STRING containing a name, and flags from
-C<internal_ns_keyed> or C<internal_ns_keyed_str>, creates and returns a new
-namespace with the given name in the given namespace.  This is an internal
-function only.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-internal_ns_maybe_create(PARROT_INTERP, ARGIN(PMC *ns), ARGIN(STRING *key), int flags)
-{
-    ASSERT_ARGS(internal_ns_maybe_create)
-    PMC *sub_ns;
-
-    /* TT #1220 - stop depending on typed namespace */
-    if (!(flags & INTERN_NS_CREAT))
-        return PMCNULL;
-
-    /* TT #1221 - match HLL of enclosing namespace? */
-    sub_ns = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp,
-                                                 enum_class_NameSpace));
-
-    if (PMC_IS_NULL(sub_ns))
-        return PMCNULL;
-
-    VTABLE_set_pmc_keyed_str(interp, ns, key, sub_ns);
-
-    return sub_ns;
-}
-
-
-/*
-
-=item C<PMC * Parrot_ns_get_namespace_keyed(PARROT_INTERP, PMC *base_ns, PMC
-*pmc_key)>
-
-Find the namespace relative to the namespace C<base_ns> with the key
-C<pmc_key>, which may be a String, a Key, or an array of strings.  Return
-the namespace, or NULL if not found.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_get_namespace_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN(PMC *pmc_key))
-{
-    ASSERT_ARGS(Parrot_ns_get_namespace_keyed)
-    return internal_ns_keyed(interp, base_ns, pmc_key, 0);
-}
-
-/*
-
-=item C<PMC * Parrot_ns_get_namespace_keyed_str(PARROT_INTERP, PMC *base_ns, STRING
-*str_key)>
-
-Find the namespace relative to the namespace C<base_ns> with the string key
-C<str_key>.  Return the namespace, or NULL if not found.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_get_namespace_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
-        ARGIN_NULLOK(STRING *str_key))
-{
-    ASSERT_ARGS(Parrot_ns_get_namespace_keyed_str)
-    return internal_ns_keyed_str(interp, base_ns, str_key, 0);
-}
-
-/*
-
-=item C<PMC * Parrot_ns_make_namespace_keyed(PARROT_INTERP, PMC *base_ns, PMC
-*pmc_key)>
-
-Find, or create if necessary, the namespace relative to the namespace
-C<base_ns> with the key C<pmc_key>, which may be a String, a Key, or an
-array of strings.  Return the namespace.  Errors will result in exceptions.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_make_namespace_keyed(PARROT_INTERP, ARGIN(PMC *base_ns),
-        ARGIN(PMC *pmc_key))
-{
-    ASSERT_ARGS(Parrot_ns_make_namespace_keyed)
-    return internal_ns_keyed(interp, base_ns, pmc_key, INTERN_NS_CREAT);
-}
-
-/*
-
-=item C<PMC * Parrot_ns_make_namespace_keyed_str(PARROT_INTERP, PMC *base_ns,
-STRING *str_key)>
-
-Find, or create if necessary, the namespace relative to the namespace
-C<base_ns> with the string key C<str_key>.  Return the namespace.  Errors
-will result in exceptions.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_make_namespace_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
-        ARGIN(STRING *str_key))
-{
-    ASSERT_ARGS(Parrot_ns_make_namespace_keyed_str)
-    return internal_ns_keyed_str(interp, base_ns, str_key, INTERN_NS_CREAT);
-}
-
-
-/*
-
-=item C<PMC * Parrot_ns_make_namespace_autobase(PARROT_INTERP, PMC *key)>
-
-Find, or create if necessary, a namespace with the key C<key>, which may be a
-String, a Key, or an array of strings. If it is a String, then the lookup is
-relative to the current namespace. Otherwise, it is relative to the current HLL
-root namespace. Return the namespace.  Errors will result in exceptions.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_make_namespace_autobase(PARROT_INTERP, ARGIN_NULLOK(PMC *key))
-{
-    ASSERT_ARGS(Parrot_ns_make_namespace_autobase)
-    PMC *base_ns;
-    if (VTABLE_isa(interp, key, CONST_STRING(interp, "String")))
-        base_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
-    else
-        base_ns = VTABLE_get_pmc_keyed_int(interp, interp->HLL_namespace,
-            Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp)));
-    return Parrot_ns_make_namespace_keyed(interp, base_ns, key);
-}
-
-/*
-
-=item C<PMC * Parrot_ns_get_name(PARROT_INTERP, PMC *_namespace)>
-
-Retrieve an array of names from a namespace object.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_get_name(PARROT_INTERP, ARGIN(PMC *_namespace))
-{
-    ASSERT_ARGS(Parrot_ns_get_name)
-    PMC *names;
-    Parrot_pcc_invoke_method_from_c_args(interp, _namespace, CONST_STRING(interp, "get_name"), "->P", &names);
-    return names;
-}
-
-/*
-
-=item C<PMC * Parrot_ns_get_global(PARROT_INTERP, PMC *ns, STRING *globalname)>
-
-Parrot_ns_get_global allows a null namespace without throwing an exception; it
-simply returns PMCNULL in that case.
-
-NOTE: At present the use of the {get, set}_global functions is mandatory due to the
-      wacky namespace typing of the default Parrot namespace.  Eventually it will be
-      safe to just use the standard hash interface (if desired).
-
-Look up the global named C<globalname> in the namespace C<ns>.  Return the
-global, or return PMCNULL if C<ns> is null or if the global is not found.
-
-KLUDGE ALERT: Currently prefers non-namespaces in case of collision.
-
-=cut
-
-*/
-
-
-/*
- * {get, set}_global.
- *
- * Parrot_ns_get_global allows a null namespace without throwing an exception; it
- * simply returns PMCNULL in that case.
- *
- * NOTE: At present the use of the {get, set}_global functions is mandatory due to the
- *       wacky namespace typing of the default Parrot namespace.  Eventually it will be
- *       safe to just use the standard hash interface (if desired).
- */
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_get_global(PARROT_INTERP, ARGIN_NULLOK(PMC *ns), ARGIN_NULLOK(STRING *globalname))
-{
-    ASSERT_ARGS(Parrot_ns_get_global)
-    if (PMC_IS_NULL(ns))
-        return PMCNULL;
-
-    return (PMC *)VTABLE_get_pointer_keyed_str(interp, ns, globalname);
-}
-
-/*
-
-=item C<void Parrot_ns_set_global(PARROT_INTERP, PMC *ns, STRING *globalname, PMC
-*val)>
-
-Set the global named C<globalname> in the namespace C<ns> to the value C<val>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_ns_set_global(PARROT_INTERP, ARGIN_NULLOK(PMC *ns),
-        ARGIN_NULLOK(STRING *globalname), ARGIN_NULLOK(PMC *val))
-{
-    ASSERT_ARGS(Parrot_ns_set_global)
-    VTABLE_set_pmc_keyed_str(interp, ns, globalname, val);
-}
-
-
-/*
-
-=item C<PMC * Parrot_ns_find_namespace_global(PARROT_INTERP, PMC *ns, STRING *globalname)>
-
-Search the namespace PMC C<ns> for an object with name C<globalname>.
-Return the object, or NULL if not found.
-
-TT #1222 - For now this function prefers non-namespaces, it will eventually
-entirely use the untyped interface.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_find_namespace_global(PARROT_INTERP, ARGIN_NULLOK(PMC *ns), ARGIN_NULLOK(STRING *globalname))
-{
-    ASSERT_ARGS(Parrot_ns_find_namespace_global)
-    PMC *res;
-
-#if DEBUG_GLOBAL
-    if (globalname)
-        Parrot_io_printf(interp, "find_global name '%Ss'\n", globalname);
-#endif
-
-    if (PMC_IS_NULL(ns))
-        res = PMCNULL;
-    else {
-        /*
-         * TT #1219 - we should be able to use 'get_pmc_keyed' here,
-         * but we can't because Parrot's default namespaces are not
-         * fully typed and there's a pseudo-typed interface that
-         * distinguishes 'get_pmc_keyed' from 'get_pointer_keyed';
-         * the former is for NS and the latter is for non-NS.
-         */
-        res = (PMC *)VTABLE_get_pointer_keyed_str(interp, ns, globalname);
-    }
-
-    return PMC_IS_NULL(res) ? NULL : res;
-}
-
-/*
-
-=item C<PMC * Parrot_ns_find_current_namespace_global(PARROT_INTERP, STRING *globalname)>
-
-Finds and returns the data time named C<globalname> in the current namespace.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_ns_find_current_namespace_global(PARROT_INTERP, ARGIN_NULLOK(STRING *globalname))
-{
-    ASSERT_ARGS(Parrot_ns_find_current_namespace_global)
-    PMC * const ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
-    return Parrot_ns_find_namespace_global(interp, ns, globalname);
-}
-
-/*
-
-=item C<PMC * Parrot_find_global_s(PARROT_INTERP, STRING *str_key, STRING
-*globalname)>
-
-Search the namespace designated by C<str_key>, or the HLL root if
-C<str_key> is NULL, for an object with name C<globalname>.  Return the
-object, or NULL if not found.
-
-TT #1222 - For now this function prefers non-namespaces, it will eventually
-entirely use the untyped interface.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_find_global_s(PARROT_INTERP, ARGIN_NULLOK(STRING *str_key),
-        ARGIN_NULLOK(STRING *globalname))
-{
-    ASSERT_ARGS(Parrot_find_global_s)
-    PMC *const ns =
-        Parrot_ns_get_namespace_keyed_str(interp,
-                                       Parrot_get_ctx_HLL_namespace(interp),
-                                       str_key);
-    return Parrot_ns_find_namespace_global(interp, ns, globalname);
-}
-
-/*
-
-=item C<void Parrot_ns_store_global(PARROT_INTERP, PMC *ns, STRING *globalname,
-PMC *val)>
-
-Store the PMC C<val> into the namespace PMC C<ns> with name C<globalname>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_ns_store_global(PARROT_INTERP, ARGIN_NULLOK(PMC *ns),
-        ARGIN_NULLOK(STRING *globalname), ARGIN_NULLOK(PMC *val))
-{
-    ASSERT_ARGS(Parrot_ns_store_global)
-#if DEBUG_GLOBAL
-    if (globalname)
-        Parrot_io_printf(interp, "store_global name '%Ss'\n", globalname);
-#endif
-
-    if (PMC_IS_NULL(ns))
-        return;
-
-    VTABLE_set_pmc_keyed_str(interp, ns, globalname, val);
-}
-
-/*
-
-=item C<void Parrot_store_global_s(PARROT_INTERP, STRING *str_key, STRING
-*globalname, PMC *val)>
-
-Store the PMC C<val> into the namespace designated by C<str_key>, or
-the HLL root if C<str_key> is NULL, with the name C<globalname>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_store_global_s(PARROT_INTERP, ARGIN_NULLOK(STRING *str_key),
-        ARGIN_NULLOK(STRING *globalname), ARGIN_NULLOK(PMC *val))
-{
-    ASSERT_ARGS(Parrot_store_global_s)
-    PMC * const ns = Parrot_ns_make_namespace_keyed_str(interp,
-                                         Parrot_get_ctx_HLL_namespace(interp),
-                                         str_key);
-
-    Parrot_ns_store_global(interp, ns, globalname, val);
-
-    /* TT #1225 - method cache invalidation should be a namespace function */
-    Parrot_invalidate_method_cache(interp, str_key);
-}
-
-
-/*
-
-=item C<PMC * Parrot_ns_find_global_from_op(PARROT_INTERP, PMC *ns, STRING *globalname,
-void *next)>
-
-If the global exists in the given namespace PMC, return it.  If not, return
-PMCNULL.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-PMC *
-Parrot_ns_find_global_from_op(PARROT_INTERP, ARGIN(PMC *ns),
-        ARGIN_NULLOK(STRING *globalname), ARGIN_NULLOK(void *next))
-{
-    ASSERT_ARGS(Parrot_ns_find_global_from_op)
-    PMC *res;
-
-    if (STRING_IS_NULL(globalname))
-        Parrot_ex_throw_from_c_args(interp, next, EXCEPTION_GLOBAL_NOT_FOUND,
-            "Tried to get null global");
-
-    res = Parrot_ns_find_namespace_global(interp, ns, globalname);
-    if (!res)
-        res = PMCNULL;
-
-    return res;
-}
-
-
-/*
-
-=item C<PMC * Parrot_find_name_op(PARROT_INTERP, STRING *name, void *next)>
-
-TT #1223 - THIS IS BROKEN - it doesn't walk up the scopes yet
-
-Find the given C<name> in lexicals, then the current namespace, then the HLL
-root namespace, and finally Parrot builtins.  If the name isn't found
-anywhere, return PMCNULL.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_find_name_op(PARROT_INTERP, ARGIN(STRING *name), SHIM(void *next))
-{
-    ASSERT_ARGS(Parrot_find_name_op)
-    PMC * const ctx     = CURRENT_CONTEXT(interp);
-    PMC * const lex_pad = Parrot_find_pad(interp, name, ctx);
-    PMC *g;
-
-    if (PMC_IS_NULL(lex_pad))
-        g = PMCNULL;
-    else
-        g = VTABLE_get_pmc_keyed_str(interp, lex_pad, name);
-
-    /* TT #1223 - walk up the scopes!  duh!! */
-
-    if (PMC_IS_NULL(g))
-        g = Parrot_ns_find_current_namespace_global(interp, name);
-
-    if (PMC_IS_NULL(g))
-        g = Parrot_ns_find_namespace_global(interp, Parrot_get_ctx_HLL_namespace(interp), name);
-
-    if (PMC_IS_NULL(g))
-        return PMCNULL;
-    else
-        return g;
-}
-
-/*
-
-=item C<static PMC * get_namespace_pmc(PARROT_INTERP, PMC *sub_pmc)>
-
-Return the namespace PMC associated with the PMC C<sub>. If C<sub> is NULL,
-return the Associated HLL namespace PMC instead.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-get_namespace_pmc(PARROT_INTERP, ARGIN(PMC *sub_pmc))
-{
-    ASSERT_ARGS(get_namespace_pmc)
-    Parrot_Sub_attributes *sub;
-    PMC        *nsname, *nsroot;
-
-    PMC_get_sub(interp, sub_pmc, sub);
-    nsname = sub->namespace_name;
-    nsroot = Parrot_get_HLL_namespace(interp, sub->HLL_id);
-
-    /* If we have a NULL, return the HLL namespace */
-    if (PMC_IS_NULL(nsname))
-        return nsroot;
-    /* If we have a String, do a string lookup */
-    else if (nsname->vtable->base_type == enum_class_String)
-        return Parrot_ns_make_namespace_keyed_str(interp, nsroot,
-                VTABLE_get_string(interp, nsname));
-    /* Otherwise, do a PMC lookup */
-    else
-        return Parrot_ns_make_namespace_keyed(interp, nsroot, nsname);
-}
-
-/*
-
-=item C<static void store_sub_in_multi(PARROT_INTERP, PMC *sub_pmc, PMC *ns)>
-
-Adds the sub C<sub> into a mulisub of the same name in the namespace C<ns>.
-If no multisub by that name currently exists, we create one.
-
-=cut
-
-*/
-
-static void
-store_sub_in_multi(PARROT_INTERP, ARGIN(PMC *sub_pmc), ARGIN(PMC *ns))
-{
-    ASSERT_ARGS(store_sub_in_multi)
-    Parrot_Sub_attributes *sub;
-    STRING     *ns_entry_name;
-    PMC        *multisub;
-
-    PMC_get_sub(interp, sub_pmc, sub);
-    ns_entry_name = sub->ns_entry_name;
-    multisub      = VTABLE_get_pmc_keyed_str(interp, ns, ns_entry_name);
-
-    /* is there an existing MultiSub PMC? or do we need to create one? */
-    if (PMC_IS_NULL(multisub)) {
-        multisub = Parrot_pmc_new(interp,  Parrot_get_ctx_HLL_type(interp, enum_class_MultiSub));
-        /* we have to push the sub onto the MultiSub before we try to store
-        it because storing requires information from the sub */
-        VTABLE_push_pmc(interp, multisub, sub_pmc);
-        VTABLE_set_pmc_keyed_str(interp, ns, ns_entry_name, multisub);
-    }
-    else
-        VTABLE_push_pmc(interp, multisub, sub_pmc);
-}
-
-/*
-
-=item C<void Parrot_ns_store_sub(PARROT_INTERP, PMC *sub_pmc)>
-
-Adds the PMC C<sub> into the current namespace. Adds the sub to a multi of the
-same name if it's defined as a multi.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_ns_store_sub(PARROT_INTERP, ARGIN(PMC *sub_pmc))
-{
-    ASSERT_ARGS(Parrot_ns_store_sub)
-    const INTVAL cur_id = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
-
-    PMC        *ns;
-    Parrot_Sub_attributes *sub;
-
-    /* PF structures aren't fully constructed yet */
-    Parrot_block_GC_mark(interp);
-
-    /* store relative to HLL namespace */
-    PMC_get_sub(interp, sub_pmc, sub);
-    Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), sub->HLL_id);
-
-    ns = get_namespace_pmc(interp, sub_pmc);
-
-    /* attach a namespace to the sub for lookups */
-    sub->namespace_stash = ns;
-
-    /* store a :multi sub */
-    if (!PMC_IS_NULL(sub->multi_signature))
-        store_sub_in_multi(interp, sub_pmc, ns);
-
-    /* store other subs (as long as they're not :anon) */
-    else if (!(PObj_get_FLAGS(sub_pmc) & SUB_FLAG_PF_ANON)
-        || sub->vtable_index != -1) {
-        STRING * const ns_entry_name = sub->ns_entry_name;
-        PMC    * const nsname        = sub->namespace_name;
-
-        Parrot_ns_store_global(interp, ns, ns_entry_name, sub_pmc);
-
-        /* TT #1224:
-           TEMPORARY HACK - cache invalidation should be a namespace function */
-        if (!PMC_IS_NULL(nsname)) {
-            STRING * const nsname_s = VTABLE_get_string(interp, nsname);
-            Parrot_invalidate_method_cache(interp, nsname_s);
-        }
-    }
-
-    /* restore HLL_id */
-    Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), cur_id);
-    Parrot_unblock_GC_mark(interp);
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/global.h>
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Copied and modified: branches/ns_func_cleanup/src/namespace.c (from r47037, branches/ns_func_cleanup/src/global.c)
==============================================================================
--- branches/ns_func_cleanup/src/global.c	Thu May 27 00:23:51 2010	(r47037, copy source)
+++ branches/ns_func_cleanup/src/namespace.c	Thu May 27 00:38:57 2010	(r47038)
@@ -4,11 +4,11 @@
 
 =head1 NAME
 
-src/global.c
+src/namespace.c
 
 =head1 DESCRIPTION
 
-Access to global PMCs
+Common routines for storing and finding elements in namespaces
 
 =head1 FUNCTIONS
 
@@ -19,11 +19,11 @@
 */
 
 #include "parrot/parrot.h"
-#include "global.str"
+#include "namespace.str"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
-/* HEADERIZER HFILE: include/parrot/global.h */
+/* HEADERIZER HFILE: include/parrot/namespace.h */
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
@@ -839,7 +839,7 @@
 
 =head1 SEE ALSO
 
-F<include/parrot/global.h>
+F<include/parrot/namespace.h>
 
 =cut
 


More information about the parrot-commits mailing list