Compiler

group compiler

Defines

ML_FUNCTION_INLINE2(NAME, FUNCTION)
ML_FUNCTION_INLINE(NAME)

Typedefs

typedef struct ml_parser_t ml_parser_t
typedef struct ml_compiler_t ml_compiler_t
typedef struct mlc_expr_t mlc_expr_t
typedef const char *(*ml_reader_t)(void*)
typedef ml_value_t *(*string_fn_t)(const char *String, int Length)

Functions

ml_parser_t *ml_parser(ml_reader_t Read, void *Data)

Returns a new parser.

Parameters:
  • Read -- Function to call to read the next line of source.

  • Data -- Data passed to Read.

Returns:

A new parser.

void ml_parser_reset(ml_parser_t *Parser)

Resets the state of a parser.

Parameters:

Parser -- Parser.

void ml_parser_permissive(ml_parser_t *Parser, int Permissive)

Enables or disabled permissive parsing.

When permissive parsing is enabled, parsing errors are stored as warnings instead and an invalid expression is substituted. The parser output in this case will cause an error when compiled. The list of warnings can be retrieved with ml_parser_warnings().

Parameters:
  • Parser -- Parser.

  • Permissive -- 0 - disable permissive mode (default), 1 - enable permissive mode.

ml_value_t *ml_parser_warnings(ml_parser_t *Parser)

Returns a list (ml_list_t *) of the warnings generated while parsing. If permissive parsing is disabled, this will always be an empty list.

Parameters:

Parser -- Parser.

Returns:

List of warnings.

void ml_parser_input(ml_parser_t *Parser, const char *Text)

Sets the next source text for parsing. Any existing unparsed source within parser is discarded. Text can be a single line, contain multiple lines of source, or even be the entire contents of a source file.

End-of-line characters should not be stripped from Text. Currently, tokens cannot be split across different calls to ml_parser_input().

Parameters:
  • Parser -- Parser.

  • Text -- Source text.

const char *ml_parser_name(ml_parser_t *Parser)
ml_source_t ml_parser_source(ml_parser_t *Parser, ml_source_t Source)
ml_value_t *ml_parser_value(ml_parser_t *Parser)
const char *ml_parser_clear(ml_parser_t *Parser)
void ml_parse_warn(ml_parser_t *Parser, const char *Error, const char *Format, ...)
mlc_expr_t *ml_parse_expr(ml_parser_t *Parser)
mlc_expr_t *ml_accept_file(ml_parser_t *Parser)
void ml_parser_escape(ml_parser_t *Parser, ml_value_t *(*Escape)(void*), void *Data)
void ml_parser_special(ml_parser_t *Parser, ml_value_t *(*Special)(void*), void *Data)
ml_value_t *ml_macro_subst(mlc_expr_t *Child, int Count, const char **Names, ml_value_t **Exprs)
ml_compiler_t *ml_compiler(ml_getter_t GlobalGet, void *Globals)
void ml_compiler_define(ml_compiler_t *Compiler, const char *Name, ml_value_t *Value)
ml_value_t *ml_compiler_lookup(ml_compiler_t *Compiler, const char *Name, const char *Source, int Line, int Eval)
void ml_function_compile(ml_state_t *Caller, mlc_expr_t *Expr, ml_compiler_t *Compiler, const char **Parameters)
void ml_command_evaluate(ml_state_t *Caller, ml_parser_t *Parser, ml_compiler_t *Compiler)
void ml_load_file(ml_state_t *Caller, ml_getter_t GlobalGet, void *Globals, const char *FileName, const char *Parameters[])
ml_value_t *ml_stringmap_globals(stringmap_t *Globals)
ml_value_t *ml_stringmap_global_get(const stringmap_t *Map, const char *Key, const char *Source, int Line, int Eval)
void ml_string_fn_register(const char *Prefix, string_fn_t Fn)
void ml_compiler_init()
ml_value_t *ml_global(const char *Name)
ml_value_t *ml_global_get(ml_value_t *Global)
ml_value_t *ml_global_set(ml_value_t *Global, ml_value_t *Value)
ml_value_t *ml_macro(ml_value_t *Function)
ml_value_t *ml_inline_call_macro(ml_value_t *Value)
ml_value_t *ml_inline_function(ml_value_t *Value)

Variables

ml_value_t MLEndOfInput[]
ml_value_t MLNotFound[]
ml_value_t *MLCompilerSwitch
ml_type_t MLCompilerT[]
ml_type_t MLMacroT[]
ml_type_t MLParserT[]
ml_type_t MLGlobalT[]
ml_type_t MLExprT[]
ml_type_t MLFunctionInlineT[]
struct ml_inline_function_t