31#define ps_name_new() ps_dynarr_new(struct ps_name)
32#define ps_name_free(arr) ps_dynarr_free(arr)
65 struct ps_node_block*
body;
73#define ps_node_fn_arr_new() ps_dynarr_new(struct ps_node_fn_arr)
74#define ps_node_fn_arr_free(arr) ps_dynarr_free(arr)
83 struct ps_type_tuple*
sig;
233#define ps_node_arr_new() ps_dynarr_new(struct ps_node_arr)
234#define ps_node_arr_free(arr) ps_dynarr_free(arr)
240#define ps_node_block_new() ps_dynarr_new(struct ps_node_block)
241#define ps_node_block_free(arr) ps_dynarr_free(arr)
248#define ps_interp_str_new() ps_dynarr_new(struct ps_interp_str)
249#define ps_interp_str_free(arr) ps_dynarr_free(arr)
258#define ps_expr_arr_new() ps_dynarr_new(struct ps_expr_arr)
259#define ps_expr_arr_free(arr) ps_dynarr_free(arr)
283 struct ps_node_block* body);
299 struct ps_type_tuple* sig);
317 struct ps_node_fn_arr* methods);
325 struct ps_node_fn_arr* methods);
343 struct ps_node_block* body);
350 struct ps_node_block* else_body);
445 struct ps_expr_arr* args);
struct ps_node * ps_node_extern_new(struct ps_token *name, struct ps_type_tuple *sig)
struct ps_expr * ps_expr_lit_new_f64(f64 value, struct ps_token *token)
Creates a new literal expression for a floating point number (of at most 64 bits).
struct ps_expr * ps_expr_unary_new(struct ps_token *op, struct ps_expr *rhs)
Creates a new unary expression.
struct ps_expr * ps_expr_lit_new_unit(struct ps_token *token)
Creates a new literal expression for a unit literal.
struct ps_expr * ps_expr_lit_new_u64(u64 value, struct ps_token *token)
Creates a new literal expression for an unsigned integer (of at most 64 bits).
struct ps_node * ps_node_return_new(struct ps_expr *value)
Creates a new return statement that returns the expression value.
struct ps_expr * ps_expr_lit_new_bool(bool value, struct ps_token *token)
Creates a new literal expression for a boolean.
struct ps_node * ps_node_struct_new(struct ps_type_struct *type, struct ps_node_fn_arr *methods)
Creates a new structure declaration.
struct ps_node * ps_node_enum_new(struct ps_type_enum *type, struct ps_node_fn_arr *methods)
Creates a new enum declaration.
struct ps_node * ps_node_let_new(struct ps_token *name, bool is_mutable, struct ps_type *type, struct ps_expr *value)
Creates a new let statement initializing the variable name to the expression value.
struct ps_node * ps_node_expr_stm_new(struct ps_expr *expr)
Creates a new expression statement for expr.
struct ps_expr * ps_expr_lit_new_i64(i64 value, struct ps_token *token)
Creates a new literal expression for a signed integer (of at most 64 bits).
struct ps_expr * ps_expr_call_new(struct ps_token *callee, struct ps_expr_arr *args)
Creates a new call expression.
struct ps_expr * ps_expr_lit_new_str(STR value, struct ps_token *token)
Creates a new literal expression for a string.
struct ps_node * ps_node_fn_new(struct ps_token *name, struct ps_type *ret_type, struct ps_type_field_arr *params, enum ps_fn_qualifiers qualifiers, struct ps_node_block *body)
Creates a new function with the given name name, parameters params, and function body body.
struct ps_expr * ps_expr_id_new(struct ps_token *name)
Creates a new id expression.
struct ps_node * ps_node_import_new(struct ps_name *name)
Creates a new import statement.
struct ps_node * ps_node_for_new(struct ps_node_let *init, struct ps_expr *cond, struct ps_node_expr_stm *step, struct ps_node_block *body)
Creates a new for loop.
struct ps_node * ps_node_block_stm_new(struct ps_node_block *block)
Creates a new block statement.
ps_fn_qualifiers
Function qualifier flags.
@ PS_FN_INLINE
Inlined everywhere.
@ PS_FN_PUBLIC
Visible outside the module.
@ PS_FN_PRIVATE
Hidden outside the module.
struct ps_node * ps_node_if_new(struct ps_expr *cond, struct ps_node_block *body, struct ps_node_block *else_body)
Creates a new if statement on condition cond.
struct ps_expr * ps_expr_binary_new(struct ps_expr *lhs, struct ps_token *op, struct ps_expr *rhs)
Creates a new binary expression.
struct ps_node * ps_node_while_new(struct ps_expr *cond, struct ps_node_block *body)
Creates a new while loop.
struct ps_expr * ps_expr_lit_new_interp_str(struct ps_interp_str *value)
Creates a new literal expression for an interpolated string.
Defines a dynamically-allocated array template.
Retrieval of associated data from custom enum (see enum.h).
#define PS_IPRINT_DECL(T)
struct ps_expr_arr * args
union ps_expr_lit::ps_expr_lit_value value
enum ps_expr_lit::ps_expr_lit_type type
struct ps_token * token
A token associated with the expression literal.
Expression nodes are represented with tagged unions.
enum ps_expr::ps_expr_type expr_type
struct ps_expr_lit lit_expr
struct ps_expr_binary bin_expr
struct ps_expr_call call_expr
struct ps_expr_id id_expr
struct ps_expr_unary un_expr
struct ps_type_enum * type
struct ps_node_fn_arr * methods
A reference to an external C function.
struct ps_type_tuple * sig
The type signature of the function.
struct ps_token * name
The name of the function.
struct ps_type * ret_type
struct ps_node_block * body
struct ps_type_field_arr * params
enum ps_fn_qualifiers qualifiers
struct ps_node_expr_stm * step
struct ps_node_let * init
struct ps_node_block * body
struct ps_node_block * else_body
struct ps_node_block * body
Parses "let `name`: `type` = `value`".
struct ps_node_fn_arr * methods
struct ps_type_struct * type
struct ps_node_block * body
AST nodes are represented with tagged unions.
struct ps_node_while while_
struct ps_node_extern extern_
struct ps_node_enum enum_
struct ps_node_block * block
struct ps_node_struct struct_
struct ps_node_expr_stm expr_stm
struct ps_node_return return_
struct ps_node_import import
enum ps_node::ps_node_type type
struct ps_interp_str * interp_str_val