1 #ifndef ML_COMPILER_H
2 #define ML_COMPILER_H
3 
4 #include <setjmp.h>
5 
6 #include "ml_runtime.h"
7 #include "stringmap.h"
8 
9 #ifdef	__cplusplus
10 extern "C" {
11 #endif
12 
13 extern ml_value_t MLEndOfInput[];
14 extern ml_value_t MLNotFound[];
15 extern ml_value_t *MLCompilerSwitch;
16 extern ml_type_t MLCompilerT[];
17 extern ml_type_t MLParserT[];
18 extern ml_type_t MLGlobalT[];
19 
20 typedef struct ml_parser_t ml_parser_t;
21 typedef struct ml_compiler_t ml_compiler_t;
22 
23 typedef struct mlc_expr_t mlc_expr_t;
24 
25 typedef const char *(*ml_reader_t)(void *);
26 
27 ml_parser_t *ml_parser(ml_reader_t Read, void *Data);
28 void ml_parser_reset(ml_parser_t *Compiler);
29 void ml_parser_input(ml_parser_t *Compiler, const char *Text);
30 const char *ml_parser_name(ml_parser_t *Compiler);
31 ml_source_t ml_parser_source(ml_parser_t *Compiler, ml_source_t Source);
32 ml_value_t *ml_parser_value(ml_parser_t *Parser);
33 const char *ml_parser_clear(ml_parser_t *Compiler);
34 void ml_parse_error(ml_parser_t *Compiler, const char *Error, const char *Format, ...) __attribute__((noreturn));
35 mlc_expr_t *ml_accept_file(ml_parser_t *Parser);
36 
37 ml_compiler_t *ml_compiler(ml_getter_t GlobalGet, void *Globals);
38 void ml_compiler_define(ml_compiler_t *Compiler, const char *Name, ml_value_t *Value);
39 ml_value_t *ml_compiler_lookup(ml_compiler_t *Compiler, const char *Name);
40 
41 void ml_function_compile(ml_state_t *Caller, mlc_expr_t *Expr, ml_compiler_t *Compiler, const char **Parameters);
42 void ml_command_evaluate(ml_state_t *Caller, ml_parser_t *Parser, ml_compiler_t *Compiler);
43 void ml_load_file(ml_state_t *Caller, ml_getter_t GlobalGet, void *Globals, const char *FileName, const char *Parameters[]);
44 
45 ml_value_t *ml_stringmap_globals(stringmap_t *Globals);
46 
47 typedef ml_value_t *(*string_fn_t)(const char *String, int Length);
48 
49 void ml_string_fn_register(const char *Prefix, string_fn_t Fn);
50 
51 void ml_compiler_init();
52 
53 typedef struct ml_scope_macro_t ml_scope_macro_t;
54 ml_scope_macro_t *ml_scope_macro_new();
55 void ml_scope_macro_define(ml_scope_macro_t *Macro, const char *Name, ml_value_t *Value);
56 
57 ml_value_t *ml_global(const char *Name);
58 ml_value_t *ml_global_get(ml_value_t *Global);
59 ml_value_t *ml_global_set(ml_value_t *Global, ml_value_t *Value);
60 
61 #ifdef	__cplusplus
62 }
63 #endif
64 
65 #endif
66