debase-ruby_core_source 3.3.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Rakefile +2 -1
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/ast.h +4612 -0
  5. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/defines.h +94 -0
  6. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/diagnostic.h +297 -0
  7. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/encoding.h +248 -0
  8. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/extension.h +18 -0
  9. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/node.h +57 -0
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/options.h +204 -0
  11. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/pack.h +152 -0
  12. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/parser.h +716 -0
  13. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/prettyprint.h +26 -0
  14. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/prism.h +272 -0
  15. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/regexp.h +33 -0
  16. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_buffer.h +146 -0
  17. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_char.h +205 -0
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_constant_pool.h +191 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_list.h +97 -0
  20. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_memchr.h +29 -0
  21. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_newline_list.h +104 -0
  22. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_state_stack.h +42 -0
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_string.h +150 -0
  24. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_string_list.h +44 -0
  25. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_strncasecmp.h +32 -0
  26. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_strpbrk.h +43 -0
  27. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/version.h +29 -0
  28. data/lib/debase/ruby_core_source/version.rb +1 -1
  29. metadata +30 -6
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @file options.h
3
+ *
4
+ * The options that can be passed to parsing.
5
+ */
6
+ #ifndef PRISM_OPTIONS_H
7
+ #define PRISM_OPTIONS_H
8
+
9
+ #include "prism/defines.h"
10
+ #include "prism/util/pm_string.h"
11
+
12
+ #include <stdbool.h>
13
+ #include <stddef.h>
14
+ #include <stdint.h>
15
+
16
+ /**
17
+ * A scope of locals surrounding the code that is being parsed.
18
+ */
19
+ typedef struct pm_options_scope {
20
+ /** The number of locals in the scope. */
21
+ size_t locals_count;
22
+
23
+ /** The names of the locals in the scope. */
24
+ pm_string_t *locals;
25
+ } pm_options_scope_t;
26
+
27
+ /**
28
+ * The options that can be passed to the parser.
29
+ */
30
+ typedef struct {
31
+ /** The name of the file that is currently being parsed. */
32
+ pm_string_t filepath;
33
+
34
+ /**
35
+ * The line within the file that the parse starts on. This value is
36
+ * 0-indexed.
37
+ */
38
+ int32_t line;
39
+
40
+ /**
41
+ * The name of the encoding that the source file is in. Note that this must
42
+ * correspond to a name that can be found with Encoding.find in Ruby.
43
+ */
44
+ pm_string_t encoding;
45
+
46
+ /**
47
+ * The number of scopes surrounding the code that is being parsed.
48
+ */
49
+ size_t scopes_count;
50
+
51
+ /**
52
+ * The scopes surrounding the code that is being parsed. For most parses
53
+ * this will be NULL, but for evals it will be the locals that are in scope
54
+ * surrounding the eval.
55
+ */
56
+ pm_options_scope_t *scopes;
57
+
58
+ /** Whether or not the frozen string literal option has been set. */
59
+ bool frozen_string_literal;
60
+
61
+ /**
62
+ * Whether or not we should suppress warnings. This is purposefully negated
63
+ * so that the default is to not suppress warnings, which allows us to still
64
+ * create an options struct with zeroed memory.
65
+ */
66
+ bool suppress_warnings;
67
+ } pm_options_t;
68
+
69
+ /**
70
+ * Set the filepath option on the given options struct.
71
+ *
72
+ * @param options The options struct to set the filepath on.
73
+ * @param filepath The filepath to set.
74
+ */
75
+ PRISM_EXPORTED_FUNCTION void pm_options_filepath_set(pm_options_t *options, const char *filepath);
76
+
77
+ /**
78
+ * Set the line option on the given options struct.
79
+ *
80
+ * @param options The options struct to set the line on.
81
+ * @param line The line to set.
82
+ */
83
+ PRISM_EXPORTED_FUNCTION void pm_options_line_set(pm_options_t *options, int32_t line);
84
+
85
+ /**
86
+ * Set the encoding option on the given options struct.
87
+ *
88
+ * @param options The options struct to set the encoding on.
89
+ * @param encoding The encoding to set.
90
+ */
91
+ PRISM_EXPORTED_FUNCTION void pm_options_encoding_set(pm_options_t *options, const char *encoding);
92
+
93
+ /**
94
+ * Set the frozen string literal option on the given options struct.
95
+ *
96
+ * @param options The options struct to set the frozen string literal value on.
97
+ * @param frozen_string_literal The frozen string literal value to set.
98
+ */
99
+ PRISM_EXPORTED_FUNCTION void pm_options_frozen_string_literal_set(pm_options_t *options, bool frozen_string_literal);
100
+
101
+ /**
102
+ * Set the suppress warnings option on the given options struct.
103
+ *
104
+ * @param options The options struct to set the suppress warnings value on.
105
+ * @param suppress_warnings The suppress warnings value to set.
106
+ */
107
+ PRISM_EXPORTED_FUNCTION void pm_options_suppress_warnings_set(pm_options_t *options, bool suppress_warnings);
108
+
109
+ /**
110
+ * Allocate and zero out the scopes array on the given options struct.
111
+ *
112
+ * @param options The options struct to initialize the scopes array on.
113
+ * @param scopes_count The number of scopes to allocate.
114
+ */
115
+ PRISM_EXPORTED_FUNCTION void pm_options_scopes_init(pm_options_t *options, size_t scopes_count);
116
+
117
+ /**
118
+ * Return a pointer to the scope at the given index within the given options.
119
+ *
120
+ * @param options The options struct to get the scope from.
121
+ * @param index The index of the scope to get.
122
+ * @return A pointer to the scope at the given index.
123
+ */
124
+ PRISM_EXPORTED_FUNCTION const pm_options_scope_t * pm_options_scope_get(const pm_options_t *options, size_t index);
125
+
126
+ /**
127
+ * Create a new options scope struct. This will hold a set of locals that are in
128
+ * scope surrounding the code that is being parsed.
129
+ *
130
+ * @param scope The scope struct to initialize.
131
+ * @param locals_count The number of locals to allocate.
132
+ */
133
+ PRISM_EXPORTED_FUNCTION void pm_options_scope_init(pm_options_scope_t *scope, size_t locals_count);
134
+
135
+ /**
136
+ * Return a pointer to the local at the given index within the given scope.
137
+ *
138
+ * @param scope The scope struct to get the local from.
139
+ * @param index The index of the local to get.
140
+ * @return A pointer to the local at the given index.
141
+ */
142
+ PRISM_EXPORTED_FUNCTION const pm_string_t * pm_options_scope_local_get(const pm_options_scope_t *scope, size_t index);
143
+
144
+ /**
145
+ * Free the internal memory associated with the options.
146
+ *
147
+ * @param options The options struct whose internal memory should be freed.
148
+ */
149
+ PRISM_EXPORTED_FUNCTION void pm_options_free(pm_options_t *options);
150
+
151
+ /**
152
+ * Deserialize an options struct from the given binary string. This is used to
153
+ * pass options to the parser from an FFI call so that consumers of the library
154
+ * from an FFI perspective don't have to worry about the structure of our
155
+ * options structs. Since the source of these calls will be from Ruby
156
+ * implementation internals we assume it is from a trusted source.
157
+ *
158
+ * `data` is assumed to be a valid pointer pointing to well-formed data. The
159
+ * layout of this data should be the same every time, and is described below:
160
+ *
161
+ * | # bytes | field |
162
+ * | ------- | -------------------------- |
163
+ * | `4` | the length of the filepath |
164
+ * | ... | the filepath bytes |
165
+ * | `4` | the line number |
166
+ * | `4` | the length the encoding |
167
+ * | ... | the encoding bytes |
168
+ * | `1` | frozen string literal |
169
+ * | `1` | suppress warnings |
170
+ * | `4` | the number of scopes |
171
+ * | ... | the scopes |
172
+ *
173
+ * Each scope is layed out as follows:
174
+ *
175
+ * | # bytes | field |
176
+ * | ------- | -------------------------- |
177
+ * | `4` | the number of locals |
178
+ * | ... | the locals |
179
+ *
180
+ * Each local is layed out as follows:
181
+ *
182
+ * | # bytes | field |
183
+ * | ------- | -------------------------- |
184
+ * | `4` | the length of the local |
185
+ * | ... | the local bytes |
186
+ *
187
+ * Some additional things to note about this layout:
188
+ *
189
+ * * The filepath can have a length of 0, in which case we'll consider it an
190
+ * empty string.
191
+ * * The line number should be 0-indexed.
192
+ * * The encoding can have a length of 0, in which case we'll use the default
193
+ * encoding (UTF-8). If it's not 0, it should correspond to a name of an
194
+ * encoding that can be passed to `Encoding.find` in Ruby.
195
+ * * The frozen string literal and suppress warnings fields are booleans, so
196
+ * their values should be either 0 or 1.
197
+ * * The number of scopes can be 0.
198
+ *
199
+ * @param options The options struct to deserialize into.
200
+ * @param data The binary string to deserialize from.
201
+ */
202
+ void pm_options_read(pm_options_t *options, const char *data);
203
+
204
+ #endif
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @file pack.h
3
+ *
4
+ * A pack template string parser.
5
+ */
6
+ #ifndef PRISM_PACK_H
7
+ #define PRISM_PACK_H
8
+
9
+ #include "prism/defines.h"
10
+
11
+ #include <stdint.h>
12
+ #include <stdlib.h>
13
+
14
+ /** The version of the pack template language that we are parsing. */
15
+ typedef enum pm_pack_version {
16
+ PM_PACK_VERSION_3_2_0
17
+ } pm_pack_version;
18
+
19
+ /** The type of pack template we are parsing. */
20
+ typedef enum pm_pack_variant {
21
+ PM_PACK_VARIANT_PACK,
22
+ PM_PACK_VARIANT_UNPACK
23
+ } pm_pack_variant;
24
+
25
+ /** A directive within the pack template. */
26
+ typedef enum pm_pack_type {
27
+ PM_PACK_SPACE,
28
+ PM_PACK_COMMENT,
29
+ PM_PACK_INTEGER,
30
+ PM_PACK_UTF8,
31
+ PM_PACK_BER,
32
+ PM_PACK_FLOAT,
33
+ PM_PACK_STRING_SPACE_PADDED,
34
+ PM_PACK_STRING_NULL_PADDED,
35
+ PM_PACK_STRING_NULL_TERMINATED,
36
+ PM_PACK_STRING_MSB,
37
+ PM_PACK_STRING_LSB,
38
+ PM_PACK_STRING_HEX_HIGH,
39
+ PM_PACK_STRING_HEX_LOW,
40
+ PM_PACK_STRING_UU,
41
+ PM_PACK_STRING_MIME,
42
+ PM_PACK_STRING_BASE64,
43
+ PM_PACK_STRING_FIXED,
44
+ PM_PACK_STRING_POINTER,
45
+ PM_PACK_MOVE,
46
+ PM_PACK_BACK,
47
+ PM_PACK_NULL,
48
+ PM_PACK_END
49
+ } pm_pack_type;
50
+
51
+ /** The signness of a pack directive. */
52
+ typedef enum pm_pack_signed {
53
+ PM_PACK_UNSIGNED,
54
+ PM_PACK_SIGNED,
55
+ PM_PACK_SIGNED_NA
56
+ } pm_pack_signed;
57
+
58
+ /** The endianness of a pack directive. */
59
+ typedef enum pm_pack_endian {
60
+ PM_PACK_AGNOSTIC_ENDIAN,
61
+ PM_PACK_LITTLE_ENDIAN, // aka 'VAX', or 'V'
62
+ PM_PACK_BIG_ENDIAN, // aka 'network', or 'N'
63
+ PM_PACK_NATIVE_ENDIAN,
64
+ PM_PACK_ENDIAN_NA
65
+ } pm_pack_endian;
66
+
67
+ /** The size of an integer pack directive. */
68
+ typedef enum pm_pack_size {
69
+ PM_PACK_SIZE_SHORT,
70
+ PM_PACK_SIZE_INT,
71
+ PM_PACK_SIZE_LONG,
72
+ PM_PACK_SIZE_LONG_LONG,
73
+ PM_PACK_SIZE_8,
74
+ PM_PACK_SIZE_16,
75
+ PM_PACK_SIZE_32,
76
+ PM_PACK_SIZE_64,
77
+ PM_PACK_SIZE_P,
78
+ PM_PACK_SIZE_NA
79
+ } pm_pack_size;
80
+
81
+ /** The type of length of a pack directive. */
82
+ typedef enum pm_pack_length_type {
83
+ PM_PACK_LENGTH_FIXED,
84
+ PM_PACK_LENGTH_MAX,
85
+ PM_PACK_LENGTH_RELATIVE, // special case for unpack @*
86
+ PM_PACK_LENGTH_NA
87
+ } pm_pack_length_type;
88
+
89
+ /** The type of encoding for a pack template string. */
90
+ typedef enum pm_pack_encoding {
91
+ PM_PACK_ENCODING_START,
92
+ PM_PACK_ENCODING_ASCII_8BIT,
93
+ PM_PACK_ENCODING_US_ASCII,
94
+ PM_PACK_ENCODING_UTF_8
95
+ } pm_pack_encoding;
96
+
97
+ /** The result of parsing a pack template. */
98
+ typedef enum pm_pack_result {
99
+ PM_PACK_OK,
100
+ PM_PACK_ERROR_UNSUPPORTED_DIRECTIVE,
101
+ PM_PACK_ERROR_UNKNOWN_DIRECTIVE,
102
+ PM_PACK_ERROR_LENGTH_TOO_BIG,
103
+ PM_PACK_ERROR_BANG_NOT_ALLOWED,
104
+ PM_PACK_ERROR_DOUBLE_ENDIAN
105
+ } pm_pack_result;
106
+
107
+ /**
108
+ * Parse a single directive from a pack or unpack format string.
109
+ *
110
+ * @param variant (in) pack or unpack
111
+ * @param format (in, out) the start of the next directive to parse on calling,
112
+ * and advanced beyond the parsed directive on return, or as much of it as
113
+ * was consumed until an error was encountered
114
+ * @param format_end (in) the end of the format string
115
+ * @param type (out) the type of the directive
116
+ * @param signed_type (out) whether the value is signed
117
+ * @param endian (out) the endianness of the value
118
+ * @param size (out) the size of the value
119
+ * @param length_type (out) what kind of length is specified
120
+ * @param length (out) the length of the directive
121
+ * @param encoding (in, out) takes the current encoding of the string which
122
+ * would result from parsing the whole format string, and returns a possibly
123
+ * changed directive - the encoding should be `PM_PACK_ENCODING_START` when
124
+ * pm_pack_parse is called for the first directive in a format string
125
+ *
126
+ * @return `PM_PACK_OK` on success or `PM_PACK_ERROR_*` on error
127
+ * @note Consult Ruby documentation for the meaning of directives.
128
+ */
129
+ PRISM_EXPORTED_FUNCTION pm_pack_result
130
+ pm_pack_parse(
131
+ pm_pack_variant variant,
132
+ const char **format,
133
+ const char *format_end,
134
+ pm_pack_type *type,
135
+ pm_pack_signed *signed_type,
136
+ pm_pack_endian *endian,
137
+ pm_pack_size *size,
138
+ pm_pack_length_type *length_type,
139
+ uint64_t *length,
140
+ pm_pack_encoding *encoding
141
+ );
142
+
143
+ /**
144
+ * Prism abstracts sizes away from the native system - this converts an abstract
145
+ * size to a native size.
146
+ *
147
+ * @param size The abstract size to convert.
148
+ * @return The native size.
149
+ */
150
+ PRISM_EXPORTED_FUNCTION size_t pm_size_to_native(pm_pack_size size);
151
+
152
+ #endif