Something went wrong. Try again.
the hito embeddable programming language
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#ifndef syntax_h#define syntax_h#include "lexer.h"#include "intern.h"#include "scope.h"#include "bitset.h"#include "builtins.h"#include <stdbool.h>typedef struct expr expr_t;
typedef struct { expr_t *expr; size_t bound_vars;} pattern_t;
struct expr { enum { EXPR_CALL, EXPR_VAR, EXPR_PAT_IDENT, EXPR_CONSTRUCTOR, EXPR_INT_LIT, EXPR_FLOAT_LIT, EXPR_LET_BINDING, EXPR_STRING_LIT, EXPR_TUPLE, EXPR_LAMBDA, EXPR_LAMBDA_COMPILED, EXPR_GROUP, EXPR_ALT, EXPR_SEQ, EXPR_BUILTIN, } tag; source_t *source; pos_t pos; union { struct { expr_t *callee; expr_t **arguments; size_t nargs; } call; struct { expr_t *try; expr_t *orelse; } alt; struct { expr_t *first; expr_t *then; } seq; struct { pattern_t pattern; expr_t *expr; expr_t *in; } let_binding; de_bruijn_t var; builtin_func_t *builtin; intern_t ident; intern_t constructor; long int_lit; double float_lit; char *string_lit; struct { size_t args; expr_t *body; bitset_t *mask; size_t num_lets; } lambda; struct { expr_t** clauses; size_t nclauses; } group; struct { expr_t** elements; size_t nelements; } tuple; struct { expr_t** patterns; size_t npatterns; expr_t *body; } lambda_raw; } as;};
expr_t *syntax_parse_expr(lexer_t *lexer, builtins_t *builtins, intern_table_t *table);
/* returns the amount of local binding slots required to evaluate this expression */size_t syntax_expr_required_locals(expr_t *it);void syntax_expr_free(expr_t *it);void syntax_dump_expr(expr_t *it);#endif