Ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a25176072e02db9254f0e0c84c805cd)
|
#include "ruby/ruby.h"
#include "ruby/st.h"
#include "ruby/encoding.h"
#include "internal.h"
#include "node.h"
#include "parse.h"
#include "symbol.h"
#include "regenc.h"
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include "probes.h"
#include <limits.h>
#include "ruby/regex.h"
#include "ruby/util.h"
#include "lex.c"
Go to the source code of this file.
Data Structures | |
struct | vtable |
struct | local_vars |
struct | token_info |
struct | parser_params |
struct | rb_strterm_literal_struct |
struct | rb_strterm_heredoc_struct |
struct | rb_strterm_struct |
union | yyalloc |
struct | magic_comment |
struct | reg_named_capture_assign_t |
Macros | |
#define | YYBISON 1 |
#define | YYBISON_VERSION "3.5.1" |
#define | YYSKELETON_NAME "yacc.c" |
#define | YYPURE 1 |
#define | YYPUSH 0 |
#define | YYPULL 1 |
#define | YYDEBUG 1 |
#define | YYERROR_VERBOSE 1 |
#define | YYSTACK_USE_ALLOCA 0 |
#define | YYLTYPE rb_code_location_t |
#define | YYLTYPE_IS_DECLARED 1 |
#define | WARN_PAST_SCOPE 0 |
#define | TAB_WIDTH 8 |
#define | yydebug (p->debug) /* disable the global variable definition */ |
#define | YYMALLOC(size) rb_parser_malloc(p, (size)) |
#define | YYREALLOC(ptr, size) rb_parser_realloc(p, (ptr), (size)) |
#define | YYCALLOC(nelem, size) rb_parser_calloc(p, (nelem), (size)) |
#define | YYFREE(ptr) rb_parser_free(p, (ptr)) |
#define | YYFPRINTF rb_parser_printf |
#define | YYPRINT(out, tok, val) parser_token_value_print(p, (tok), &(val)) |
#define | YY_LOCATION_PRINT(File, loc) |
#define | YYLLOC_DEFAULT(Current, Rhs, N) |
#define | RUBY_SET_YYLLOC_FROM_STRTERM_HEREDOC(Current) rb_parser_set_location_from_strterm_heredoc(p, &p->lex.strterm->u.heredoc, &(Current)) |
#define | RUBY_SET_YYLLOC_OF_NONE(Current) rb_parser_set_location_of_none(p, &(Current)) |
#define | RUBY_SET_YYLLOC(Current) rb_parser_set_location(p, &(Current)) |
#define | RUBY_INIT_YYLLOC() |
#define | DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit) |
#define | IS_lex_state_for(x, ls) ((x) & (ls)) |
#define | IS_lex_state_all_for(x, ls) (((x) & (ls)) == (ls)) |
#define | IS_lex_state(ls) IS_lex_state_for(p->lex.state, (ls)) |
#define | IS_lex_state_all(ls) IS_lex_state_all_for(p->lex.state, (ls)) |
#define | SET_LEX_STATE(ls) |
#define | SHOW_BITSTACK(stack, name) (p->debug ? rb_parser_show_bitstack(p, stack, name, __LINE__) : (void)0) |
#define | BITSTACK_PUSH(stack, n) (((p->stack) = ((p->stack)<<1)|((n)&1)), SHOW_BITSTACK(p->stack, #stack"(push)")) |
#define | BITSTACK_POP(stack) (((p->stack) = (p->stack) >> 1), SHOW_BITSTACK(p->stack, #stack"(pop)")) |
#define | BITSTACK_SET_P(stack) (SHOW_BITSTACK(p->stack, #stack), (p->stack)&1) |
#define | BITSTACK_SET(stack, n) ((p->stack)=(n), SHOW_BITSTACK(p->stack, #stack"(set)")) |
#define | COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n)) |
#define | COND_POP() BITSTACK_POP(cond_stack) |
#define | COND_P() BITSTACK_SET_P(cond_stack) |
#define | COND_SET(n) BITSTACK_SET(cond_stack, (n)) |
#define | CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n)) |
#define | CMDARG_POP() BITSTACK_POP(cmdarg_stack) |
#define | CMDARG_P() BITSTACK_SET_P(cmdarg_stack) |
#define | CMDARG_SET(n) BITSTACK_SET(cmdarg_stack, (n)) |
#define | NUMPARAM_ID_P(id) numparam_id_p(id) |
#define | NUMPARAM_ID_TO_IDX(id) (unsigned int)(((id) >> ID_SCOPE_SHIFT) - tNUMPARAM_1 + 1) |
#define | NUMPARAM_IDX_TO_ID(idx) TOKEN2LOCALID((tNUMPARAM_1 + (idx) - 1)) |
#define | DVARS_INHERIT ((void*)1) |
#define | DVARS_TOPSCOPE NULL |
#define | DVARS_TERMINAL_P(tbl) ((tbl) == DVARS_INHERIT || (tbl) == DVARS_TOPSCOPE) |
#define | intern_cstr(n, l, en) rb_intern3(n,l,en) |
#define | STR_NEW(ptr, len) rb_enc_str_new((ptr),(len),p->enc) |
#define | STR_NEW0() rb_enc_str_new(0,0,p->enc) |
#define | STR_NEW2(ptr) rb_enc_str_new((ptr),strlen(ptr),p->enc) |
#define | STR_NEW3(ptr, len, e, func) parser_str_new((ptr),(len),(e),(func),p->enc) |
#define | TOK_INTERN() intern_cstr(tok(p), toklen(p), p->enc) |
#define | yyerror0(msg) parser_yyerror(p, NULL, (msg)) |
#define | yyerror1(loc, msg) parser_yyerror(p, (loc), (msg)) |
#define | yyerror(yylloc, p, msg) parser_yyerror(p, yylloc, msg) |
#define | token_flush(ptr) ((ptr)->lex.ptok = (ptr)->lex.pcur) |
#define | compile_for_eval (p->parent_iseq != 0) |
#define | token_column ((int)(p->lex.ptok - p->lex.pbeg)) |
#define | CALL_Q_P(q) ((q) == TOKEN2VAL(tANDDOT)) |
#define | NODE_CALL_Q(q) (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL) |
#define | NEW_QCALL(q, r, m, a, loc) NEW_NODE(NODE_CALL_Q(q),r,m,a,loc) |
#define | lambda_beginning_p() (p->lex.lpar_beg == p->lex.paren_nest) |
#define | rb_node_newnode(type, a1, a2, a3, loc) node_newnode(p, (type), (a1), (a2), (a3), (loc)) |
#define | yyparse ruby_yyparse |
#define | new_nil(loc) NEW_NIL(loc) |
#define | value_expr(node) value_expr_gen(p, (node) = remove_begin(node)) |
#define | make_list(list, loc) ((list) ? (nd_set_loc(list, loc), list) : NEW_ZLIST(loc)) |
#define | get_id(id) (id) |
#define | get_value(val) (val) |
#define | get_num(num) (num) |
#define | dyna_var(p, id) local_var(p, id) |
#define | METHOD_NOT '!' |
#define | idFWD_REST '*' |
#define | idFWD_KWREST 0 |
#define | idFWD_BLOCK '&' |
#define | RE_OPTION_ONCE (1<<16) |
#define | RE_OPTION_ENCODING_SHIFT 8 |
#define | RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) |
#define | RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) |
#define | RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE) |
#define | RE_OPTION_MASK 0xff |
#define | RE_OPTION_ARG_ENCODING_NONE 32 |
#define | HERETERM_LENGTH_BITS ((SIZEOF_VALUE - 1) * CHAR_BIT - 1) |
#define | HERETERM_LENGTH_MAX ((1U << HERETERM_LENGTH_BITS) - 1) |
#define | STRTERM_HEREDOC IMEMO_FL_USER0 |
#define | yytnamerr(yyres, yystr) (YYSIZE_T)rb_yytnamerr(p, yyres, yystr) |
#define | TOKEN2ID(tok) |
#define | ID2VAL(id) (id) |
#define | TOKEN2VAL(t) ID2VAL(t) |
#define | KWD2EID(t, v) keyword_##t |
#define | Qnone 0 |
#define | Qnull 0 |
#define | ifndef_ripper(x) (x) |
#define | rb_warn0(fmt) WARN_CALL(WARN_ARGS(fmt, 1)) |
#define | rb_warn1(fmt, a) WARN_CALL(WARN_ARGS(fmt, 2), (a)) |
#define | rb_warn2(fmt, a, b) WARN_CALL(WARN_ARGS(fmt, 3), (a), (b)) |
#define | rb_warn3(fmt, a, b, c) WARN_CALL(WARN_ARGS(fmt, 4), (a), (b), (c)) |
#define | rb_warn4(fmt, a, b, c, d) WARN_CALL(WARN_ARGS(fmt, 5), (a), (b), (c), (d)) |
#define | rb_warning0(fmt) WARNING_CALL(WARNING_ARGS(fmt, 1)) |
#define | rb_warning1(fmt, a) WARNING_CALL(WARNING_ARGS(fmt, 2), (a)) |
#define | rb_warning2(fmt, a, b) WARNING_CALL(WARNING_ARGS(fmt, 3), (a), (b)) |
#define | rb_warning3(fmt, a, b, c) WARNING_CALL(WARNING_ARGS(fmt, 4), (a), (b), (c)) |
#define | rb_warning4(fmt, a, b, c, d) WARNING_CALL(WARNING_ARGS(fmt, 5), (a), (b), (c), (d)) |
#define | rb_warn0L(l, fmt) WARN_CALL(WARN_ARGS_L(l, fmt, 1)) |
#define | rb_warn1L(l, fmt, a) WARN_CALL(WARN_ARGS_L(l, fmt, 2), (a)) |
#define | rb_warn2L(l, fmt, a, b) WARN_CALL(WARN_ARGS_L(l, fmt, 3), (a), (b)) |
#define | rb_warn3L(l, fmt, a, b, c) WARN_CALL(WARN_ARGS_L(l, fmt, 4), (a), (b), (c)) |
#define | rb_warn4L(l, fmt, a, b, c, d) WARN_CALL(WARN_ARGS_L(l, fmt, 5), (a), (b), (c), (d)) |
#define | rb_warning0L(l, fmt) WARNING_CALL(WARNING_ARGS_L(l, fmt, 1)) |
#define | rb_warning1L(l, fmt, a) WARNING_CALL(WARNING_ARGS_L(l, fmt, 2), (a)) |
#define | rb_warning2L(l, fmt, a, b) WARNING_CALL(WARNING_ARGS_L(l, fmt, 3), (a), (b)) |
#define | rb_warning3L(l, fmt, a, b, c) WARNING_CALL(WARNING_ARGS_L(l, fmt, 4), (a), (b), (c)) |
#define | rb_warning4L(l, fmt, a, b, c, d) WARNING_CALL(WARNING_ARGS_L(l, fmt, 5), (a), (b), (c), (d)) |
#define | WARN_S_L(s, l) s |
#define | WARN_S(s) s |
#define | WARN_I(i) i |
#define | WARN_ID(i) rb_id2name(i) |
#define | WARN_IVAL(i) NUM2INT(i) |
#define | PRIsWARN PRIsVALUE |
#define | WARN_ARGS(fmt, n) WARN_ARGS_L(p->ruby_sourceline,fmt,n) |
#define | WARN_ARGS_L(l, fmt, n) p->ruby_sourcefile, (l), (fmt) |
#define | WARN_CALL rb_compile_warn |
#define | WARNING_ARGS(fmt, n) WARN_ARGS(fmt,n) |
#define | WARNING_ARGS_L(l, fmt, n) WARN_ARGS_L(l,fmt,n) |
#define | WARNING_CALL rb_compile_warning |
#define | compile_error parser_compile_error |
#define | WARN_EOL(tok) |
#define | YY_CAST(Type, Val) ((Type) (Val)) |
#define | YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) |
#define | YY_NULLPTR ((void*)0) |
#define | YYERROR_VERBOSE 1 |
#define | YYPTRDIFF_T long |
#define | YYPTRDIFF_MAXIMUM LONG_MAX |
#define | YYSIZE_T unsigned |
#define | YYSIZE_MAXIMUM |
#define | YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) |
#define | YY_(Msgid) Msgid |
#define | YY_ATTRIBUTE_PURE |
#define | YY_ATTRIBUTE_UNUSED |
#define | YYUSE(E) ((void) (E)) |
#define | YY_INITIAL_VALUE(Value) Value |
#define | YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
#define | YY_IGNORE_MAYBE_UNINITIALIZED_END |
#define | YY_IGNORE_USELESS_CAST_BEGIN |
#define | YY_IGNORE_USELESS_CAST_END |
#define | YY_ASSERT(E) ((void) (0 && (E))) |
#define | YYSTACK_ALLOC YYMALLOC |
#define | YYSTACK_FREE YYFREE |
#define | YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
#define | YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) |
#define | YYSTACK_BYTES(N) |
#define | YYCOPY_NEEDED 1 |
#define | YYSTACK_RELOCATE(Stack_alloc, Stack) |
#define | YYCOPY(Dst, Src, Count) |
#define | YYFINAL 3 |
#define | YYLAST 13883 |
#define | YYNTOKENS 154 |
#define | YYNNTS 266 |
#define | YYNRULES 761 |
#define | YYNSTATES 1251 |
#define | YYUNDEFTOK 2 |
#define | YYMAXUTOK 353 |
#define | YYTRANSLATE(YYX) (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
#define | YYPACT_NINF (-1040) |
#define | yypact_value_is_default(Yyn) ((Yyn) == YYPACT_NINF) |
#define | YYTABLE_NINF (-762) |
#define | yytable_value_is_error(Yyn) ((Yyn) == YYTABLE_NINF) |
#define | yyerrok (yyerrstatus = 0) |
#define | yyclearin (yychar = YYEMPTY) |
#define | YYEMPTY (-2) |
#define | YYEOF 0 |
#define | YYACCEPT goto yyacceptlab |
#define | YYABORT goto yyabortlab |
#define | YYERROR goto yyerrorlab |
#define | YYRECOVERING() (!!yyerrstatus) |
#define | YYBACKUP(Token, Value) |
#define | YYTERROR 1 |
#define | YYERRCODE 256 |
#define | YYRHSLOC(Rhs, K) ((Rhs)[K]) |
#define | YYDPRINTF(Args) |
#define | YY_SYMBOL_PRINT(Title, Type, Value, Location) |
#define | yy_stack_print(b, t) ruby_parser_yy_stack_print(b, t, p) |
#define | YY_STACK_PRINT(Bottom, Top) |
#define | YY_REDUCE_PRINT(Rule) |
#define | YYINITDEPTH 200 |
#define | YYMAXDEPTH 10000 |
#define | YYCASE_(N, S) |
#define | YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) |
#define | YYSYNTAX_ERROR |
#define | yylval (*p->lval) |
#define | set_yylval_node(x) |
#define | set_yylval_str(x) |
#define | set_yylval_literal(x) |
#define | set_yylval_num(x) (yylval.num = (x)) |
#define | set_yylval_id(x) (yylval.id = (x)) |
#define | set_yylval_name(x) (yylval.id = (x)) |
#define | yylval_id() (yylval.id) |
#define | set_yylval_noname() set_yylval_id(keyword_nil) |
#define | literal_flush(p, ptr) ((p)->lex.ptok = (ptr)) |
#define | dispatch_scan_event(p, t) ((void)0) |
#define | dispatch_delayed_token(p, t) ((void)0) |
#define | has_delayed_token(p) (0) |
#define | CSI_BEGIN "\033[" |
#define | CSI_SGR "m" |
#define | vtable_alloc(prev) vtable_alloc_gen(p, __LINE__, prev) |
#define | vtable_free(tbl) vtable_free_gen(p, __LINE__, #tbl, tbl) |
#define | vtable_add(tbl, id) vtable_add_gen(p, __LINE__, #tbl, tbl, id) |
#define | vtable_pop(tbl, n) vtable_pop_gen(p, __LINE__, #tbl, tbl, n) |
#define | RUBY_DTRACE_PARSE_HOOK(name) |
#define | STR_FUNC_ESCAPE 0x01 |
#define | STR_FUNC_EXPAND 0x02 |
#define | STR_FUNC_REGEXP 0x04 |
#define | STR_FUNC_QWORDS 0x08 |
#define | STR_FUNC_SYMBOL 0x10 |
#define | STR_FUNC_INDENT 0x20 |
#define | STR_FUNC_LABEL 0x40 |
#define | STR_FUNC_LIST 0x4000 |
#define | STR_FUNC_TERM 0x8000 |
#define | lex_goto_eol(p) ((p)->lex.pcur = (p)->lex.pend) |
#define | lex_eol_p(p) ((p)->lex.pcur >= (p)->lex.pend) |
#define | lex_eol_n_p(p, n) ((p)->lex.pcur+(n) >= (p)->lex.pend) |
#define | peek(p, c) peek_n(p, (c), 0) |
#define | peek_n(p, c, n) (!lex_eol_n_p(p, n) && (c) == (unsigned char)(p)->lex.pcur[n]) |
#define | peekc(p) peekc_n(p, 0) |
#define | peekc_n(p, n) (lex_eol_n_p(p, n) ? -1 : (unsigned char)(p)->lex.pcur[n]) |
#define | add_delayed_token(p, tok, end) ((void)(tok), (void)(end)) |
#define | was_bol(p) ((p)->lex.pcur == (p)->lex.pbeg + 1) |
#define | tokfix(p) ((p)->tokenbuf[(p)->tokidx]='\0') |
#define | tok(p) (p)->tokenbuf |
#define | toklen(p) (p)->tokidx |
#define | tokcopy(p, n) memcpy(tokspace(p, n), (p)->lex.pcur - (n), (n)) |
#define | WARN_SPACE_CHAR(c, prefix) rb_warn1("invalid character syntax; use "prefix"\\%c", WARN_I(c2)) |
#define | ESCAPE_CONTROL 1 |
#define | ESCAPE_META 2 |
#define | mixed_error(enc1, enc2) (void)(erred || (parser_mixed_error(p, enc1, enc2), erred = true)) |
#define | mixed_escape(beg, enc1, enc2) (void)(erred || (parser_mixed_escape(p, beg, enc1, enc2), erred = true)) |
#define | NEW_STRTERM(func, term, paren) new_strterm((VALUE)(func), (VALUE)(paren), (VALUE)(term), 0) |
#define | flush_string_content(p, enc) ((void)(enc)) |
#define | BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0) |
#define | SPECIAL_PUNCT(idx) |
#define | IS_ARG() IS_lex_state(EXPR_ARG_ANY) |
#define | IS_END() IS_lex_state(EXPR_END_ANY) |
#define | IS_BEG() (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED)) |
#define | IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) |
#define | IS_LABEL_POSSIBLE() |
#define | IS_LABEL_SUFFIX(n) (peek_n(p, ':',(n)) && !peek_n(p, ':', (n)+1)) |
#define | IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT) |
#define | unterminated_literal(mesg) yyerror0(mesg) |
#define | NUM_SUFFIX_R (1<<0) |
#define | NUM_SUFFIX_I (1<<1) |
#define | NUM_SUFFIX_ALL 3 |
#define | dispatch_heredoc_end(p) ((void)0) |
#define | str_copy(_s, _p, _n) |
#define | ambiguous_operator(tok, op, syn) |
#define | warn_balanced(tok, op, syn) |
#define | LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1)) |
#define | nd_once_body(node) (nd_type(node) == NODE_ONCE ? (node)->nd_body : node) |
#define | WARN_LOCATION(type) |
#define | subnodes(n1, n2) |
#define | SWITCH_BY_COND_TYPE(t, w, arg) |
#define | HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) |
#define | NEWHEAP() rb_imemo_tmpbuf_parser_heap(0, p->heap, 0) |
#define | ADD2HEAP(new, cnt, ptr) |
Typedefs | |
typedef VALUE | stack_type |
typedef struct token_info | token_info |
typedef struct rb_strterm_struct | rb_strterm_t |
typedef struct rb_strterm_heredoc_struct | rb_strterm_heredoc_t |
typedef struct rb_strterm_literal_struct | rb_strterm_literal_t |
typedef signed char | yytype_int8 |
typedef short | yytype_int16 |
typedef unsigned char | yytype_uint8 |
typedef unsigned short | yytype_uint16 |
typedef yytype_int16 | yy_state_t |
typedef int | yy_state_fast_t |
typedef long(* | rb_magic_comment_length_t) (struct parser_params *p, const char *name, long len) |
typedef void(* | rb_magic_comment_setter_t) (struct parser_params *p, const char *name, const char *val) |
Enumerations | |
enum | lex_state_bits { EXPR_BEG_bit , EXPR_END_bit , EXPR_ENDARG_bit , EXPR_ENDFN_bit , EXPR_ARG_bit , EXPR_CMDARG_bit , EXPR_MID_bit , EXPR_FNAME_bit , EXPR_DOT_bit , EXPR_CLASS_bit , EXPR_LABEL_bit , EXPR_LABELED_bit , EXPR_FITEM_bit , EXPR_MAX_STATE , EXPR_BEG_bit , EXPR_END_bit , EXPR_ENDARG_bit , EXPR_ENDFN_bit , EXPR_ARG_bit , EXPR_CMDARG_bit , EXPR_MID_bit , EXPR_FNAME_bit , EXPR_DOT_bit , EXPR_CLASS_bit , EXPR_LABEL_bit , EXPR_LABELED_bit , EXPR_FITEM_bit , EXPR_MAX_STATE } |
enum | lex_state_e { DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , EXPR_VALUE = EXPR_BEG , EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS) , EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG) , EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN) , EXPR_NONE = 0 , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , DEF_EXPR =(BEG) , EXPR_VALUE = EXPR_BEG , EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS) , EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG) , EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN) , EXPR_NONE = 0 } |
enum | { ORDINAL_PARAM = -1 , NO_PARAM = 0 , NUMPARAM_MAX = 9 } |
enum | string_type { str_label = STR_FUNC_LABEL , str_squote = (0) , str_dquote = (STR_FUNC_EXPAND) , str_xquote = (STR_FUNC_EXPAND) , str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND) , str_sword = (STR_FUNC_QWORDS|STR_FUNC_LIST) , str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND|STR_FUNC_LIST) , str_ssym = (STR_FUNC_SYMBOL) , str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) , str_label = STR_FUNC_LABEL , str_squote = (0) , str_dquote = (STR_FUNC_EXPAND) , str_xquote = (STR_FUNC_EXPAND) , str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND) , str_sword = (STR_FUNC_QWORDS|STR_FUNC_LIST) , str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND|STR_FUNC_LIST) , str_ssym = (STR_FUNC_SYMBOL) , str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) } |
enum | cond_type { COND_IN_OP , COND_IN_COND , COND_IN_FF , COND_IN_OP , COND_IN_COND , COND_IN_FF } |
Variables | |
RUBY_FUNC_EXPORTED const unsigned int | ruby_global_name_punct_bits [(0x7e - 0x20+31)/32] |
#define ambiguous_operator | ( | tok, | |
op, | |||
syn | |||
) |
#define BIT | ( | c, | |
idx | |||
) | (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0) |
#define BITSTACK_POP | ( | stack | ) | (((p->stack) = (p->stack) >> 1), SHOW_BITSTACK(p->stack, #stack"(pop)")) |
#define BITSTACK_PUSH | ( | stack, | |
n | |||
) | (((p->stack) = ((p->stack)<<1)|((n)&1)), SHOW_BITSTACK(p->stack, #stack"(push)")) |
#define BITSTACK_SET | ( | stack, | |
n | |||
) | ((p->stack)=(n), SHOW_BITSTACK(p->stack, #stack"(set)")) |
#define BITSTACK_SET_P | ( | stack | ) | (SHOW_BITSTACK(p->stack, #stack), (p->stack)&1) |
#define CMDARG_P | ( | ) | BITSTACK_SET_P(cmdarg_stack) |
#define CMDARG_POP | ( | ) | BITSTACK_POP(cmdarg_stack) |
#define CMDARG_PUSH | ( | n | ) | BITSTACK_PUSH(cmdarg_stack, (n)) |
#define CMDARG_SET | ( | n | ) | BITSTACK_SET(cmdarg_stack, (n)) |
#define COND_P | ( | ) | BITSTACK_SET_P(cond_stack) |
#define COND_POP | ( | ) | BITSTACK_POP(cond_stack) |
#define COND_PUSH | ( | n | ) | BITSTACK_PUSH(cond_stack, (n)) |
#define COND_SET | ( | n | ) | BITSTACK_SET(cond_stack, (n)) |
#define CSI_BEGIN "\033[" |
#define CSI_SGR "m" |
#define DVARS_TERMINAL_P | ( | tbl | ) | ((tbl) == DVARS_INHERIT || (tbl) == DVARS_TOPSCOPE) |
#define HERETERM_LENGTH_BITS ((SIZEOF_VALUE - 1) * CHAR_BIT - 1) |
#define HERETERM_LENGTH_MAX ((1U << HERETERM_LENGTH_BITS) - 1) |
#define intern_cstr | ( | n, | |
l, | |||
en | |||
) | rb_intern3(n,l,en) |
#define IS_AFTER_OPERATOR | ( | ) | IS_lex_state(EXPR_FNAME | EXPR_DOT) |
#define IS_ARG | ( | ) | IS_lex_state(EXPR_ARG_ANY) |
#define IS_BEG | ( | ) | (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED)) |
#define IS_END | ( | ) | IS_lex_state(EXPR_END_ANY) |
#define IS_LABEL_POSSIBLE | ( | ) |
#define IS_lex_state | ( | ls | ) | IS_lex_state_for(p->lex.state, (ls)) |
#define IS_lex_state_all | ( | ls | ) | IS_lex_state_all_for(p->lex.state, (ls)) |
#define IS_lex_state_all_for | ( | x, | |
ls | |||
) | (((x) & (ls)) == (ls)) |
#define lambda_beginning_p | ( | ) | (p->lex.lpar_beg == p->lex.paren_nest) |
#define lex_goto_eol | ( | p | ) | ((p)->lex.pcur = (p)->lex.pend) |
#define mixed_error | ( | enc1, | |
enc2 | |||
) | (void)(erred || (parser_mixed_error(p, enc1, enc2), erred = true)) |
#define mixed_escape | ( | beg, | |
enc1, | |||
enc2 | |||
) | (void)(erred || (parser_mixed_escape(p, beg, enc1, enc2), erred = true)) |
#define NEW_QCALL | ( | q, | |
r, | |||
m, | |||
a, | |||
loc | |||
) | NEW_NODE(NODE_CALL_Q(q),r,m,a,loc) |
#define NEWHEAP | ( | ) | rb_imemo_tmpbuf_parser_heap(0, p->heap, 0) |
#define NODE_CALL_Q | ( | q | ) | (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL) |
#define NUMPARAM_ID_TO_IDX | ( | id | ) | (unsigned int)(((id) >> ID_SCOPE_SHIFT) - tNUMPARAM_1 + 1) |
#define NUMPARAM_IDX_TO_ID | ( | idx | ) | TOKEN2LOCALID((tNUMPARAM_1 + (idx) - 1)) |
#define rb_node_newnode | ( | type, | |
a1, | |||
a2, | |||
a3, | |||
loc | |||
) | node_newnode(p, (type), (a1), (a2), (a3), (loc)) |
#define rb_warn0L | ( | l, | |
fmt | |||
) | WARN_CALL(WARN_ARGS_L(l, fmt, 1)) |
#define rb_warn1L | ( | l, | |
fmt, | |||
a | |||
) | WARN_CALL(WARN_ARGS_L(l, fmt, 2), (a)) |
#define rb_warn2L | ( | l, | |
fmt, | |||
a, | |||
b | |||
) | WARN_CALL(WARN_ARGS_L(l, fmt, 3), (a), (b)) |
#define rb_warn3L | ( | l, | |
fmt, | |||
a, | |||
b, | |||
c | |||
) | WARN_CALL(WARN_ARGS_L(l, fmt, 4), (a), (b), (c)) |
#define rb_warn4L | ( | l, | |
fmt, | |||
a, | |||
b, | |||
c, | |||
d | |||
) | WARN_CALL(WARN_ARGS_L(l, fmt, 5), (a), (b), (c), (d)) |
#define rb_warning0 | ( | fmt | ) | WARNING_CALL(WARNING_ARGS(fmt, 1)) |
#define rb_warning0L | ( | l, | |
fmt | |||
) | WARNING_CALL(WARNING_ARGS_L(l, fmt, 1)) |
#define rb_warning1 | ( | fmt, | |
a | |||
) | WARNING_CALL(WARNING_ARGS(fmt, 2), (a)) |
#define rb_warning1L | ( | l, | |
fmt, | |||
a | |||
) | WARNING_CALL(WARNING_ARGS_L(l, fmt, 2), (a)) |
#define rb_warning2 | ( | fmt, | |
a, | |||
b | |||
) | WARNING_CALL(WARNING_ARGS(fmt, 3), (a), (b)) |
#define rb_warning2L | ( | l, | |
fmt, | |||
a, | |||
b | |||
) | WARNING_CALL(WARNING_ARGS_L(l, fmt, 3), (a), (b)) |
#define rb_warning3 | ( | fmt, | |
a, | |||
b, | |||
c | |||
) | WARNING_CALL(WARNING_ARGS(fmt, 4), (a), (b), (c)) |
#define rb_warning3L | ( | l, | |
fmt, | |||
a, | |||
b, | |||
c | |||
) | WARNING_CALL(WARNING_ARGS_L(l, fmt, 4), (a), (b), (c)) |
#define rb_warning4 | ( | fmt, | |
a, | |||
b, | |||
c, | |||
d | |||
) | WARNING_CALL(WARNING_ARGS(fmt, 5), (a), (b), (c), (d)) |
#define rb_warning4L | ( | l, | |
fmt, | |||
a, | |||
b, | |||
c, | |||
d | |||
) | WARNING_CALL(WARNING_ARGS_L(l, fmt, 5), (a), (b), (c), (d)) |
#define RE_OPTION_ENCODING | ( | e | ) | (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) |
#define RE_OPTION_ENCODING_IDX | ( | o | ) | (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) |
#define RE_OPTION_ENCODING_NONE | ( | o | ) | ((o)&RE_OPTION_ARG_ENCODING_NONE) |
#define RUBY_DTRACE_PARSE_HOOK | ( | name | ) |
#define RUBY_INIT_YYLLOC | ( | ) |
#define RUBY_SET_YYLLOC | ( | Current | ) | rb_parser_set_location(p, &(Current)) |
#define RUBY_SET_YYLLOC_FROM_STRTERM_HEREDOC | ( | Current | ) | rb_parser_set_location_from_strterm_heredoc(p, &p->lex.strterm->u.heredoc, &(Current)) |
#define RUBY_SET_YYLLOC_OF_NONE | ( | Current | ) | rb_parser_set_location_of_none(p, &(Current)) |
#define SET_LEX_STATE | ( | ls | ) |
#define set_yylval_literal | ( | x | ) |
#define set_yylval_node | ( | x | ) |
#define set_yylval_noname | ( | ) | set_yylval_id(keyword_nil) |
#define set_yylval_str | ( | x | ) |
#define SHOW_BITSTACK | ( | stack, | |
name | |||
) | (p->debug ? rb_parser_show_bitstack(p, stack, name, __LINE__) : (void)0) |
#define SPECIAL_PUNCT | ( | idx | ) |
#define str_copy | ( | _s, | |
_p, | |||
_n | |||
) |
#define STR_NEW | ( | ptr, | |
len | |||
) | rb_enc_str_new((ptr),(len),p->enc) |
#define STR_NEW0 | ( | ) | rb_enc_str_new(0,0,p->enc) |
#define STR_NEW2 | ( | ptr | ) | rb_enc_str_new((ptr),strlen(ptr),p->enc) |
#define STRTERM_HEREDOC IMEMO_FL_USER0 |
#define subnodes | ( | n1, | |
n2 | |||
) |
#define SWITCH_BY_COND_TYPE | ( | t, | |
w, | |||
arg | |||
) |
#define TOK_INTERN | ( | ) | intern_cstr(tok(p), toklen(p), p->enc) |
#define TOKEN2ID | ( | tok | ) |
#define unterminated_literal | ( | mesg | ) | yyerror0(mesg) |
#define value_expr | ( | node | ) | value_expr_gen(p, (node) = remove_begin(node)) |
#define vtable_alloc | ( | prev | ) | vtable_alloc_gen(p, __LINE__, prev) |
#define vtable_free | ( | tbl | ) | vtable_free_gen(p, __LINE__, #tbl, tbl) |
#define WARN_ARGS | ( | fmt, | |
n | |||
) | WARN_ARGS_L(p->ruby_sourceline,fmt,n) |
#define warn_balanced | ( | tok, | |
op, | |||
syn | |||
) |
#define WARN_CALL rb_compile_warn |
#define WARN_ID | ( | i | ) | rb_id2name(i) |
#define WARN_LOCATION | ( | type | ) |
#define WARN_SPACE_CHAR | ( | c, | |
prefix | |||
) | rb_warn1("invalid character syntax; use "prefix"\\%c", WARN_I(c2)) |
#define WARNING_CALL rb_compile_warning |
#define was_bol | ( | p | ) | ((p)->lex.pcur == (p)->lex.pbeg + 1) |
#define YY_LOCATION_PRINT | ( | File, | |
loc | |||
) |
#define YY_REDUCE_PRINT | ( | Rule | ) |
#define yy_stack_print | ( | b, | |
t | |||
) | ruby_parser_yy_stack_print(b, t, p) |
#define YY_STACK_PRINT | ( | Bottom, | |
Top | |||
) |
#define YY_SYMBOL_PRINT | ( | Title, | |
Type, | |||
Value, | |||
Location | |||
) |
#define YYBACKUP | ( | Token, | |
Value | |||
) |
#define YYCALLOC | ( | nelem, | |
size | |||
) | rb_parser_calloc(p, (nelem), (size)) |
#define YYCOPY | ( | Dst, | |
Src, | |||
Count | |||
) |
#define yydebug (p->debug) /* disable the global variable definition */ |
#define YYDPRINTF | ( | Args | ) |
#define yyerror | ( | yylloc, | |
p, | |||
msg | |||
) | parser_yyerror(p, yylloc, msg) |
#define yyerror1 | ( | loc, | |
msg | |||
) | parser_yyerror(p, (loc), (msg)) |
#define YYFPRINTF rb_parser_printf |
#define YYFREE | ( | ptr | ) | rb_parser_free(p, (ptr)) |
#define YYLLOC_DEFAULT | ( | Current, | |
Rhs, | |||
N | |||
) |
#define YYLTYPE rb_code_location_t |
#define YYMALLOC | ( | size | ) | rb_parser_malloc(p, (size)) |
#define yypact_value_is_default | ( | Yyn | ) | ((Yyn) == YYPACT_NINF) |
#define YYREALLOC | ( | ptr, | |
size | |||
) | rb_parser_realloc(p, (ptr), (size)) |
#define YYSIZE_MAXIMUM |
#define YYSIZEOF | ( | X | ) | YY_CAST (YYPTRDIFF_T, sizeof (X)) |
#define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
#define YYSTACK_BYTES | ( | N | ) |
#define YYSTACK_RELOCATE | ( | Stack_alloc, | |
Stack | |||
) |
#define YYSYNTAX_ERROR |
#define yytable_value_is_error | ( | Yyn | ) | ((Yyn) == YYTABLE_NINF) |
#define yytnamerr | ( | yyres, | |
yystr | |||
) | (YYSIZE_T)rb_yytnamerr(p, yyres, yystr) |
#define YYTRANSLATE | ( | YYX | ) | (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
typedef struct rb_strterm_heredoc_struct rb_strterm_heredoc_t |
typedef struct rb_strterm_literal_struct rb_strterm_literal_t |
typedef struct rb_strterm_struct rb_strterm_t |
typedef VALUE stack_type |
typedef struct token_info token_info |
typedef int yy_state_fast_t |
typedef yytype_int16 yy_state_t |
typedef short yytype_int16 |
typedef signed char yytype_int8 |
typedef unsigned short yytype_uint16 |
typedef unsigned char yytype_uint8 |
anonymous enum |
enum cond_type |
enum lex_state_bits |
enum lex_state_e |
enum string_type |
PRINTF_ARGS | ( | static void | parser_compile_errorstruct parser_params *, const char *fmt,..., |
2 | , | ||
3 | |||
) |
PRINTF_ARGS | ( | void | rb_parser_fatalstruct parser_params *p, const char *fmt,..., |
2 | , | ||
3 | |||
) |
Definition at line 3583 of file io.c.
References GetOpenFile, and getline_arg::io.
void * rb_parser_calloc | ( | struct parser_params * | p, |
size_t | nelem, | ||
size_t | size | ||
) |
Definition at line 13060 of file ripper.c.
Referenced by rb_parser_compile_string().
void rb_parser_fatal | ( | struct parser_params * | p, |
const char * | fmt, | ||
... | |||
) |
Definition at line 17297 of file ripper.c.
References fmt, rb_str_new_cstr, rb_str_vcatf(), va_end, and va_start.
void rb_parser_free | ( | struct parser_params * | p, |
void * | ptr | ||
) |
Definition at line 19510 of file ripper.c.
References TypedData_Get_Struct.
VALUE rb_parser_lex_state_name | ( | enum lex_state_e | state | ) |
Definition at line 17268 of file ripper.c.
References rb_fstring().
void * rb_parser_malloc | ( | struct parser_params * | p, |
size_t | size | ||
) |
void rb_parser_printf | ( | struct parser_params * | p, |
const char * | fmt, | ||
... | |||
) |
Definition at line 19600 of file ripper.c.
References parser_params::debug_buffer, parser_params::debug_output, fmt, NIL_P, Qnil, rb_io_write(), rb_str_new, rb_str_vcatf(), RSTRING_END, va_end, and va_start.
void * rb_parser_realloc | ( | struct parser_params * | p, |
void * | ptr, | ||
size_t | size | ||
) |
VALUE rb_parser_reg_compile | ( | struct parser_params * | p, |
VALUE | str, | ||
int | options | ||
) |
VALUE rb_parser_set_context | ( | VALUE | vparser, |
const struct rb_iseq_struct * | base, | ||
int | main | ||
) |
YYLTYPE * rb_parser_set_location | ( | struct parser_params * | p, |
YYLTYPE * | yylloc | ||
) |
Definition at line 17348 of file ripper.c.
References int, parser_params::lex, parser_params::pbeg, parser_params::pcur, parser_params::ptok, and parser_params::ruby_sourceline.
YYLTYPE * rb_parser_set_location_from_strterm_heredoc | ( | struct parser_params * | p, |
rb_strterm_heredoc_t * | here, | ||
YYLTYPE * | yylloc | ||
) |
Definition at line 17323 of file ripper.c.
References rb_strterm_heredoc_struct::func, int, rb_strterm_heredoc_struct::length, rb_strterm_heredoc_struct::offset, rb_strterm_heredoc_struct::quote, rb_strlen_lit, rb_strterm_heredoc_struct::sourceline, and STR_FUNC_INDENT.
YYLTYPE * rb_parser_set_location_of_none | ( | struct parser_params * | p, |
YYLTYPE * | yylloc | ||
) |
Definition at line 17338 of file ripper.c.
References int, parser_params::lex, parser_params::pbeg, parser_params::ptok, and parser_params::ruby_sourceline.
void rb_parser_show_bitstack | ( | struct parser_params * | p, |
stack_type | stack, | ||
const char * | name, | ||
int | line | ||
) |
Definition at line 17287 of file ripper.c.
References name, and rb_sprintf().
enum lex_state_e rb_parser_trace_lex_state | ( | struct parser_params * | p, |
enum lex_state_e | from, | ||
enum lex_state_e | to, | ||
int | line | ||
) |
Definition at line 17254 of file ripper.c.
References rb_str_new_cstr.
Definition at line 19212 of file ripper.c.
References TypedData_Get_Struct.
int rb_reg_fragment_setenc | ( | struct parser_params * | p, |
VALUE | str, | ||
int | options | ||
) |
RUBY_FUNC_EXPORTED size_t rb_yytnamerr | ( | struct parser_params * | p, |
char * | yyres, | ||
const char * | yystr | ||
) |
STATIC_ASSERT | ( | rb_strterm_heredoc_t | , |
sizeof(rb_strterm_heredoc_t)<=4 * | SIZEOF_VALUE | ||
) |
int yyparse | ( | struct parser_params * | p | ) |
Definition at line 5742 of file ripper.c.
References RUBY_SET_YYLLOC_OF_NONE, YY_, YY_ASSERT, YY_CAST, YY_IGNORE_USELESS_CAST_BEGIN, YY_IGNORE_USELESS_CAST_END, YY_INITIAL_VALUE, YYABORT, YYACCEPT, YYDPRINTF, YYEMPTY, YYFINAL, YYINITDEPTH, yyalloc::yyls_alloc, yylval, YYMAXDEPTH, YYNSTATES, YYPTRDIFF_T, YYSIZE_T, YYSIZEOF, yyalloc::yyss_alloc, YYSTACK_ALLOC, YYSTACK_BYTES, YYSTACK_FREE, YYSTACK_RELOCATE, and yyalloc::yyvs_alloc.