summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-18 12:54:23 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-18 12:54:23 +0900
commit219162117ab282d02ffebfc2e3e7e3d11f18095c (patch)
treead8cb057c97a1e656b482ea70aaae615a537849b /include
parentbbf7b0ceba117e30662f9e2459d9c06360950a10 (diff)
downloadmruby-219162117ab282d02ffebfc2e3e7e3d11f18095c.tar.gz
mruby-219162117ab282d02ffebfc2e3e7e3d11f18095c.zip
move compile.h to mruby/compile.h
Diffstat (limited to 'include')
-rw-r--r--include/mruby/compile.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/include/mruby/compile.h b/include/mruby/compile.h
new file mode 100644
index 000000000..3cebb68f0
--- /dev/null
+++ b/include/mruby/compile.h
@@ -0,0 +1,107 @@
+/*
+** compile.h - mruby parser
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef RUBY_COMPILE_H
+#define RUBY_COMPILE_H 1
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#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_message {
+ int lineno;
+ int column;
+ char* message;
+};
+
+struct mrb_parser_state {
+ mrb_state *mrb;
+ struct mrb_pool *pool;
+ mrb_ast_node *cells;
+ const 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;
+ int nwarn;
+ mrb_ast_node *tree, *begin_tree;
+
+ int capture_errors;
+ struct mrb_parser_message error_buffer[10];
+ struct mrb_parser_message warn_buffer[10];
+
+ jmp_buf jmp;
+};
+
+/* parser structure */
+struct mrb_parser_state* mrb_parser_new(mrb_state*);
+const char *mrb_parser_filename(struct mrb_parser_state*, const char*);
+int mrb_parser_lineno(struct mrb_parser_state*, int);
+void mrb_parser_parse(struct mrb_parser_state*);
+
+/* utility functions */
+struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*);
+struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*);
+struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const 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);
+
+#if defined(__cplusplus)
+} /* extern "C" { */
+#endif
+
+#endif /* MRUBY_COMPILE_H */