mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
implement literal %W %w %s
refactor string parsing
This commit is contained in:
+21
-7
@@ -58,16 +58,31 @@ 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_sheredoc = (STR_FUNC_PARSING|STR_FUNC_HEREDOC),
|
||||
str_dheredoc = (STR_FUNC_PARSING|STR_FUNC_HEREDOC|STR_FUNC_EXPAND),
|
||||
};
|
||||
|
||||
/* 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 +100,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;
|
||||
|
||||
Reference in New Issue
Block a user