1 #ifndef INTERNAL_PARSE_H /*-*-C-*-vi:se ft=c:*/
2 #define INTERNAL_PARSE_H
4 * @author Ruby developers <ruby-core@ruby-lang.org>
5 * @copyright This file is a part of the programming language Ruby.
6 * Permission is hereby granted, to either redistribute and/or
7 * modify this file, provided that the conditions mentioned in the
8 * file COPYING are met. Consult the file for details.
9 * @brief Internal header for the parser.
12 #include "rubyparser.h"
13 #include "internal/static_assert.h"
15 // The default parser to use for Ruby code.
17 RB_DEFAULT_PARSER_PARSE_Y
,
18 RB_DEFAULT_PARSER_PRISM
,
19 } ruby_default_parser_enum
;
21 ruby_default_parser_enum
rb_ruby_default_parser(void);
22 void rb_ruby_default_parser_set(ruby_default_parser_enum parser
);
24 #define rb_ruby_prism_p() (rb_ruby_default_parser() == RB_DEFAULT_PARSER_PRISM)
26 #ifdef UNIVERSAL_PARSER
27 #define rb_encoding const void
30 struct rb_iseq_struct
; /* in vm_core.h */
32 /* structs for managing terminator of string literal and heredocment */
33 typedef struct rb_strterm_literal_struct
{
35 int func
; /* STR_FUNC_* (e.g., STR_FUNC_ESCAPE and STR_FUNC_EXPAND) */
36 int paren
; /* '(' of `%q(...)` */
37 int term
; /* ')' of `%q(...)` */
38 } rb_strterm_literal_t
;
40 typedef struct rb_strterm_heredoc_struct
{
41 rb_parser_string_t
*lastline
; /* the string of line that contains `<<"END"` */
42 long offset
; /* the column of END in `<<"END"` */
43 int sourceline
; /* lineno of the line that contains `<<"END"` */
44 unsigned length
; /* the length of END in `<<"END"` */
47 } rb_strterm_heredoc_t
;
49 #define HERETERM_LENGTH_MAX UINT_MAX
51 typedef struct rb_strterm_struct
{
54 rb_strterm_literal_t literal
;
55 rb_strterm_heredoc_t heredoc
;
60 void rb_ruby_parser_mark(void *ptr
);
61 size_t rb_ruby_parser_memsize(const void *ptr
);
63 void rb_ruby_parser_set_options(rb_parser_t
*p
, int print
, int loop
, int chomp
, int split
);
64 rb_parser_t
*rb_ruby_parser_set_context(rb_parser_t
*p
, const struct rb_iseq_struct
*base
, int main
);
65 void rb_ruby_parser_set_script_lines(rb_parser_t
*p
);
66 void rb_ruby_parser_error_tolerant(rb_parser_t
*p
);
67 void rb_ruby_parser_keep_tokens(rb_parser_t
*p
);
68 typedef rb_parser_string_t
*(rb_parser_lex_gets_func
)(struct parser_params
*, rb_parser_input_data
, int);
69 rb_ast_t
*rb_parser_compile(rb_parser_t
*p
, rb_parser_lex_gets_func
*gets
, VALUE fname
, rb_parser_input_data input
, int line
);
71 RUBY_SYMBOL_EXPORT_BEGIN
73 rb_encoding
*rb_ruby_parser_encoding(rb_parser_t
*p
);
74 int rb_ruby_parser_end_seen_p(rb_parser_t
*p
);
75 int rb_ruby_parser_set_yydebug(rb_parser_t
*p
, int flag
);
76 rb_parser_string_t
*rb_str_to_parser_string(rb_parser_t
*p
, VALUE str
);
77 void rb_parser_string_free(rb_parser_t
*p
, rb_parser_string_t
*str
);
79 int rb_parser_dvar_defined_ref(struct parser_params
*, ID
, ID
**);
80 ID
rb_parser_internal_id(struct parser_params
*);
81 typedef void (*rb_parser_reg_fragment_error_func
)(struct parser_params
*, VALUE
);
82 int rb_parser_reg_fragment_check(struct parser_params
*, rb_parser_string_t
*, int, rb_parser_reg_fragment_error_func
);
83 int rb_reg_named_capture_assign_iter_impl(struct parser_params
*p
, const char *s
, long len
, rb_encoding
*enc
, NODE
**succ_block
, const rb_code_location_t
*loc
, rb_parser_assignable_func assignable
);
84 int rb_parser_local_defined(struct parser_params
*p
, ID id
, const struct rb_iseq_struct
*iseq
);
85 NODE
*rb_parser_assignable(struct parser_params
*p
, ID id
, NODE
*val
, const YYLTYPE
*loc
);
87 RUBY_SYMBOL_EXPORT_END
89 #ifndef UNIVERSAL_PARSER
90 rb_parser_t
*rb_ruby_parser_allocate(void);
91 rb_parser_t
*rb_ruby_parser_new(void);
95 void ripper_parser_mark(void *ptr
);
96 void ripper_parser_free(void *ptr
);
97 size_t ripper_parser_memsize(const void *ptr
);
98 void ripper_error(struct parser_params
*p
);
99 VALUE
ripper_value(struct parser_params
*p
);
100 int rb_ruby_parser_get_yydebug(rb_parser_t
*p
);
101 void rb_ruby_parser_set_value(rb_parser_t
*p
, VALUE value
);
102 int rb_ruby_parser_error_p(rb_parser_t
*p
);
103 VALUE
rb_ruby_parser_debug_output(rb_parser_t
*p
);
104 void rb_ruby_parser_set_debug_output(rb_parser_t
*p
, VALUE output
);
105 VALUE
rb_ruby_parser_parsing_thread(rb_parser_t
*p
);
106 void rb_ruby_parser_set_parsing_thread(rb_parser_t
*p
, VALUE parsing_thread
);
107 void rb_ruby_parser_ripper_initialize(rb_parser_t
*p
, rb_parser_lex_gets_func
*gets
, rb_parser_input_data input
, VALUE sourcefile_string
, const char *sourcefile
, int sourceline
);
108 VALUE
rb_ruby_parser_result(rb_parser_t
*p
);
109 rb_encoding
*rb_ruby_parser_enc(rb_parser_t
*p
);
110 VALUE
rb_ruby_parser_ruby_sourcefile_string(rb_parser_t
*p
);
111 int rb_ruby_parser_ruby_sourceline(rb_parser_t
*p
);
112 int rb_ruby_parser_lex_state(rb_parser_t
*p
);
113 void rb_ruby_ripper_parse0(rb_parser_t
*p
);
114 int rb_ruby_ripper_dedent_string(rb_parser_t
*p
, rb_parser_string_t
*string
, int width
);
115 int rb_ruby_ripper_initialized_p(rb_parser_t
*p
);
116 void rb_ruby_ripper_parser_initialize(rb_parser_t
*p
);
117 long rb_ruby_ripper_column(rb_parser_t
*p
);
118 long rb_ruby_ripper_token_len(rb_parser_t
*p
);
119 rb_parser_string_t
*rb_ruby_ripper_lex_lastline(rb_parser_t
*p
);
120 VALUE
rb_ruby_ripper_lex_state_name(struct parser_params
*p
, int state
);
121 #ifdef UNIVERSAL_PARSER
122 rb_parser_t
*rb_ripper_parser_params_allocate(const rb_parser_config_t
*config
);
124 struct parser_params
*rb_ruby_ripper_parser_allocate(void);
127 #ifdef UNIVERSAL_PARSER
131 #endif /* INTERNAL_PARSE_H */