# Namespace --- ## Object Definitions ```c typedef struct _kpl_export { POOL_HEADER(_kpl_export); kpl_type_ptr type; } kpl_export; static queue *export_storage; typedef struct _kpl_native_namespace { POOL_HEADER(_kpl_native_namespace); kpl_buffer *name; kpl_export *exports; } kpl_native_namespace; static kpl_native_namespace *native_namespace_head; typedef struct _kpl_file_namespace { POOL_HEADER(_kpl_file_namespace); kpl_type_ptr ast; kpl_queue *parents; kpl_buffer *file_name, *file_string; kpl_export *exports; kpl_task *task; _Atomic int32_t children; } kpl_file_namespace; static kpl_file_namespace *file_namespace_head; typedef struct _kpl_string_namespace { kpl_buffer *string; kpl_task *task; kpl_type_ptr ast; _Atomic int32_t children; } kpl_string_namespace; ``` Each `NAMESPACE_IDENTIFIER` maps to `kpl_native_namespace*` or `kpl_file_namespace*` depending on `Namespace_class` ## Lookup and Storage The native and namespace objects are stored as a tree under `native_namespace_head` and `file_namespace_head` The exports are stored under a tree for both the native and namespace objects # Registering ## Native ## File ### Main ### ``import` ## String/REPL # Updating ## File ### ``export` # Using ## Native ### ``use` ## File ### ``import`