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