diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-18 06:56:26 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-18 06:56:26 -0700 |
| commit | 138a3569a29521dc52951787cf09c5d9aac36741 (patch) | |
| tree | ef9722b6a8666f895755b076c8a866065448337e /include | |
| parent | a4c30b93acf931c49d79fb4b0c474dd66fbedcf4 (diff) | |
| parent | 76c24894a7f859cc76b437a07030f2e2f277eab1 (diff) | |
| download | mruby-138a3569a29521dc52951787cf09c5d9aac36741.tar.gz mruby-138a3569a29521dc52951787cf09c5d9aac36741.zip | |
Merge pull request #1025 from FUKUZAWA-Tadashi/master
implement %W %w %s
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/compile.h | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/include/mruby/compile.h b/include/mruby/compile.h index 382a5e6ff..4b12cb10c 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -58,16 +58,30 @@ struct mrb_parser_message { char* message; }; -/* heredoc parse type */ -enum heredoc_type { - heredoc_type_norm, /* <<EOH */ - heredoc_type_quote, /* <<'EOH' */ +#define STR_FUNC_PARSING 0x01 +#define STR_FUNC_EXPAND 0x02 +#define STR_FUNC_REGEXP 0x04 +#define STR_FUNC_WORD 0x08 +#define STR_FUNC_SYMBOL 0x10 +#define STR_FUNC_ARRAY 0x20 +#define STR_FUNC_HEREDOC 0x40 + +enum mrb_string_type { + str_not_parsing = (0), + str_squote = (STR_FUNC_PARSING), + str_dquote = (STR_FUNC_PARSING|STR_FUNC_EXPAND), + str_regexp = (STR_FUNC_PARSING|STR_FUNC_REGEXP|STR_FUNC_EXPAND), + str_sword = (STR_FUNC_PARSING|STR_FUNC_WORD|STR_FUNC_ARRAY), + str_dword = (STR_FUNC_PARSING|STR_FUNC_WORD|STR_FUNC_ARRAY|STR_FUNC_EXPAND), + str_ssym = (STR_FUNC_PARSING|STR_FUNC_SYMBOL), + str_heredoc = (STR_FUNC_PARSING|STR_FUNC_HEREDOC), }; + /* heredoc structure */ struct mrb_parser_heredoc_info { - enum heredoc_type type; mrb_bool allow_indent:1; mrb_bool line_head:1; + enum mrb_string_type type; const char *term; int term_len; mrb_ast_node *doc; @@ -85,8 +99,7 @@ struct mrb_parser_state { int column; enum mrb_lex_state_enum lstate; - int sterm; /* string terminator : ' ' means heredoc */ - int regexp; + mrb_ast_node *lex_strterm; /* (type nest_level beg . end) */ unsigned int cond_stack; unsigned int cmdarg_stack; |
