post-scarcity/src/c/environment/privileged_keywords.c

75 lines
2.1 KiB
C

/**
* 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 <simon@journeyman.cc>
* 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 );
}