/** * privileged_keywords.c * * Post Scarcity Soctware Environment * * Keywords essential to the operation of the system. I'm not certain that * there's any necessity to have privileged keywords, but as these are * keywords that will be used exceedingly frequently, we might as well * make them cheap to access. * * Copyright (c): 27 Apr 2026 Simon Brooke * Licensed under GPL version 2.0, or, at your option, any later version. */ #include "environment/privileged_keywords.h" #include "memory/node.h" #include "memory/pointer.h" #include "memory/pso.h" #include "payloads/cons.h" #include "ops/string_ops.h" /** * layer metadata for functions written in C */ struct pso_pointer privileged_keyword_bootstrap; /** * documentation metadate for functions and special forms (and possibly other * things) */ struct pso_pointer privileged_keyword_documentation; /** * key for layer metadata for functions and special forms */ struct pso_pointer privileged_keyword_layer; /** * location metadata for exceptions (and possibly location in other contexts). */ struct pso_pointer privileged_keyword_location; /** * name metadata for compiled functions. */ struct pso_pointer privileged_keyword_name; /** * layer metadata for functions that users shouldn't be able to override. */ struct pso_pointer privileged_keyword_system; /** * layer metadata for functions written by users. */ struct pso_pointer privileged_keyword_user; #define load_and_lock(var,val)(var = lock_object(c_string_to_lisp_keyword(frame_pointer, val))) struct pso_pointer initialise_privileged_keywords( struct pso_pointer frame_pointer ) { load_and_lock( privileged_keyword_bootstrap, PK_BOOTSTRAP ); load_and_lock( privileged_keyword_documentation, PK_DOCUMENTATION ); load_and_lock( privileged_keyword_layer, PK_LAYER ); load_and_lock( privileged_keyword_location, PK_LOCATION ); load_and_lock( privileged_keyword_name, PK_NAME ); load_and_lock( privileged_keyword_system, PK_SYSTEM ); load_and_lock( privileged_keyword_user, PK_USER ); }