summaryrefslogtreecommitdiffhomepage
path: root/src/compile.h
diff options
context:
space:
mode:
authormimaki <[email protected]>2012-04-20 09:39:03 +0900
committermimaki <[email protected]>2012-04-20 09:39:03 +0900
commite0d6430f63c4cbe0c71ce82ee23284671389a818 (patch)
tree41abad7f12eced98d9ac14d141cea62464c3332f /src/compile.h
parent54ad561098ed353ada70205c39b2c42a2a2eb9e5 (diff)
downloadmruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.tar.gz
mruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.zip
add mruby sources
Diffstat (limited to 'src/compile.h')
-rw-r--r--src/compile.h73
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);