|
Serene Runtime 1.0.0-dev
C runtime for the Serene programming language
|
A node of the Kleene tree. tag selects the active union member. More...
#include <kleene.h>
Data Fields | |
| srn_kleene_node_tag_t | tag |
| Which variant as holds. | |
| srn_metadata_t * | metadata |
| Source metadata for diagnostics, may be NULL. | |
| union { | |
| srn_kleene_local_t * var | |
| SRN_KL_VAR. More... | |
| srn_value_t * lit | |
| SRN_KL_LIT: a literal the reader has already boxed. More... | |
| srn_kleene_global_t * global | |
| SRN_KL_GLOBAL. More... | |
| srn_kleene_fn_t * fn | |
| SRN_KL_FN. More... | |
| srn_kleene_app_t * app | |
| SRN_KL_APP and SRN_KL_PAPP. More... | |
| srn_kleene_prim_t * prim | |
| SRN_KL_PRIM. More... | |
| srn_kleene_ctor_t * ctor | |
| SRN_KL_CTOR. More... | |
| srn_kleene_let_t * let | |
| SRN_KL_LET. More... | |
| srn_kleene_case_t * scase | |
| SRN_KL_CASE. More... | |
| srn_kleene_label_t * label | |
| SRN_KL_LABEL. More... | |
| srn_kleene_jump_t * jump | |
| SRN_KL_JUMP. More... | |
| } | as |
| Every member is one word, a pointer or an immediate, so the union stays word sized. | |
A node of the Kleene tree. tag selects the active union member.
| srn_kleene_app_t* srn_kleene_node_t::app |
| union { ... } srn_kleene_node_t::as |
Every member is one word, a pointer or an immediate, so the union stays word sized.
The static assert below pins this.
| srn_kleene_ctor_t* srn_kleene_node_t::ctor |
| srn_kleene_fn_t* srn_kleene_node_t::fn |
| srn_kleene_global_t* srn_kleene_node_t::global |
| srn_kleene_jump_t* srn_kleene_node_t::jump |
| srn_kleene_label_t* srn_kleene_node_t::label |
| srn_kleene_let_t* srn_kleene_node_t::let |
| srn_value_t* srn_kleene_node_t::lit |
| srn_metadata_t* srn_kleene_node_t::metadata |
| srn_kleene_prim_t* srn_kleene_node_t::prim |
| srn_kleene_case_t* srn_kleene_node_t::scase |
| srn_kleene_node_tag_t srn_kleene_node_t::tag |
| srn_kleene_local_t* srn_kleene_node_t::var |