diff options
| author | mimaki <[email protected]> | 2012-04-20 09:39:03 +0900 |
|---|---|---|
| committer | mimaki <[email protected]> | 2012-04-20 09:39:03 +0900 |
| commit | e0d6430f63c4cbe0c71ce82ee23284671389a818 (patch) | |
| tree | 41abad7f12eced98d9ac14d141cea62464c3332f /src/compile.h | |
| parent | 54ad561098ed353ada70205c39b2c42a2a2eb9e5 (diff) | |
| download | mruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.tar.gz mruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.zip | |
add mruby sources
Diffstat (limited to 'src/compile.h')
| -rw-r--r-- | src/compile.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/compile.h b/src/compile.h new file mode 100644 index 000000000..f0e6b1874 --- /dev/null +++ b/src/compile.h @@ -0,0 +1,73 @@ +#include "mruby.h" +#include <stdio.h> +#include <setjmp.h> + +typedef struct mrb_ast_node { + struct mrb_ast_node *car, *cdr; +} mrb_ast_node; + +#include "node.h" +#include "pool.h" +#include <stdio.h> + +enum mrb_lex_state_enum { + EXPR_BEG, /* ignore newline, +/- is a sign. */ + EXPR_END, /* newline significant, +/- is an operator. */ + EXPR_ENDARG, /* ditto, and unbound braces. */ + EXPR_ENDFN, /* ditto, and unbound braces. */ + EXPR_ARG, /* newline significant, +/- is an operator. */ + EXPR_CMDARG, /* newline significant, +/- is an operator. */ + EXPR_MID, /* newline significant, +/- is an operator. */ + EXPR_FNAME, /* ignore newline, no reserved words. */ + EXPR_DOT, /* right after `.' or `::', no reserved words. */ + EXPR_CLASS, /* immediate after `class', no here document. */ + EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */ + EXPR_MAX_STATE +}; + +struct mrb_parser_state { + mrb_state *mrb; + struct mrb_pool *pool; + mrb_ast_node *cells; + char *s, *send; + FILE *f; + int lineno; + int column; + const char *filename; + + enum mrb_lex_state_enum lstate; + int sterm; + + unsigned int cond_stack; + unsigned int cmdarg_stack; + int paren_nest; + int lpar_beg; + + mrb_ast_node *pb; + char buf[1024]; + int bidx; + + mrb_ast_node *heredoc; + + int in_def, in_single, cmd_start; + mrb_ast_node *locals; + + void *ylval; + + int nerr; + mrb_ast_node *tree, *begin_tree; + + jmp_buf jmp; +}; + +struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*); +struct mrb_parser_state* mrb_parse_string(mrb_state*,char*); +struct mrb_parser_state* mrb_parse_nstring(mrb_state*,char*,size_t); +int mrb_generate_code(mrb_state*, mrb_ast_node*); + +int mrb_compile_file(mrb_state*,FILE*); +int mrb_compile_string(mrb_state*,char*); +int mrb_compile_nstring(mrb_state*,char*,size_t); + +const char *mrb_parser_filename(struct mrb_parser_state *p, const char *s); +int mrb_parser_lineno(struct mrb_parser_state *p, int n); |
