prism 0.25.0 → 0.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -1
- data/Makefile +17 -14
- data/config.yml +12 -1
- data/docs/configuration.md +1 -0
- data/docs/releasing.md +7 -9
- data/ext/prism/extconf.rb +8 -3
- data/ext/prism/extension.c +28 -2
- data/ext/prism/extension.h +1 -1
- data/include/prism/diagnostic.h +12 -1
- data/include/prism/parser.h +5 -1
- data/include/prism/version.h +2 -2
- data/lib/prism/desugar_compiler.rb +4 -2
- data/lib/prism/ffi.rb +10 -0
- data/lib/prism/node.rb +16 -0
- data/lib/prism/parse_result.rb +5 -0
- data/lib/prism/reflection.rb +421 -0
- data/lib/prism/serialize.rb +13 -2
- data/lib/prism/translation/parser/compiler.rb +48 -11
- data/lib/prism.rb +1 -16
- data/prism.gemspec +7 -3
- data/rbi/prism/node.rbi +453 -0
- data/rbi/prism/parse_result.rbi +3 -0
- data/rbi/prism/reflection.rbi +64 -0
- data/rbi/prism/translation/parser.rbi +11 -0
- data/rbi/prism/translation/parser33.rbi +6 -0
- data/rbi/prism/translation/parser34.rbi +6 -0
- data/rbi/prism.rbi +33 -33
- data/sig/prism/node.rbs +10 -1
- data/sig/prism/parse_result.rbs +1 -0
- data/sig/prism/reflection.rbs +56 -0
- data/sig/prism.rbs +2 -2
- data/src/diagnostic.c +30 -8
- data/src/options.c +30 -19
- data/src/prism.c +404 -67
- data/src/token_type.c +3 -3
- data/src/util/pm_integer.c +14 -8
- metadata +8 -4
- data/include/prism/util/pm_state_stack.h +0 -42
- data/src/util/pm_state_stack.c +0 -25
data/src/token_type.c
CHANGED
@@ -540,7 +540,7 @@ pm_token_type_human(pm_token_type_t token_type) {
|
|
540
540
|
case PM_TOKEN_KEYWORD_RESCUE:
|
541
541
|
return "'rescue'";
|
542
542
|
case PM_TOKEN_KEYWORD_RESCUE_MODIFIER:
|
543
|
-
return "'rescue'";
|
543
|
+
return "'rescue' modifier";
|
544
544
|
case PM_TOKEN_KEYWORD_RETRY:
|
545
545
|
return "'retry'";
|
546
546
|
case PM_TOKEN_KEYWORD_RETURN:
|
@@ -658,13 +658,13 @@ pm_token_type_human(pm_token_type_t token_type) {
|
|
658
658
|
case PM_TOKEN_STAR_STAR_EQUAL:
|
659
659
|
return "'**='";
|
660
660
|
case PM_TOKEN_STRING_BEGIN:
|
661
|
-
return "string
|
661
|
+
return "string literal";
|
662
662
|
case PM_TOKEN_STRING_CONTENT:
|
663
663
|
return "string content";
|
664
664
|
case PM_TOKEN_STRING_END:
|
665
665
|
return "string ending";
|
666
666
|
case PM_TOKEN_SYMBOL_BEGIN:
|
667
|
-
return "symbol
|
667
|
+
return "symbol literal";
|
668
668
|
case PM_TOKEN_TILDE:
|
669
669
|
return "'~'";
|
670
670
|
case PM_TOKEN_UAMPERSAND:
|
data/src/util/pm_integer.c
CHANGED
@@ -172,21 +172,21 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
|
|
172
172
|
pm_integer_t y0 = { 0, half, right_values, false };
|
173
173
|
pm_integer_t y1 = { 0, right_length - half, right_values + half, false };
|
174
174
|
|
175
|
-
pm_integer_t z0;
|
175
|
+
pm_integer_t z0 = { 0 };
|
176
176
|
karatsuba_multiply(&z0, &x0, &y0, base);
|
177
177
|
|
178
|
-
pm_integer_t z2;
|
178
|
+
pm_integer_t z2 = { 0 };
|
179
179
|
karatsuba_multiply(&z2, &x1, &y1, base);
|
180
180
|
|
181
181
|
// For simplicity to avoid considering negative values,
|
182
182
|
// use `z1 = (x0 + x1) * (y0 + y1) - z0 - z2` instead of original karatsuba algorithm.
|
183
|
-
pm_integer_t x01;
|
183
|
+
pm_integer_t x01 = { 0 };
|
184
184
|
big_add(&x01, &x0, &x1, base);
|
185
185
|
|
186
|
-
pm_integer_t y01;
|
186
|
+
pm_integer_t y01 = { 0 };
|
187
187
|
big_add(&y01, &y0, &y1, base);
|
188
188
|
|
189
|
-
pm_integer_t xy;
|
189
|
+
pm_integer_t xy = { 0 };
|
190
190
|
karatsuba_multiply(&xy, &x01, &y01, base);
|
191
191
|
|
192
192
|
pm_integer_t z1;
|
@@ -194,7 +194,11 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
|
|
194
194
|
|
195
195
|
size_t length = left_length + right_length;
|
196
196
|
uint32_t *values = (uint32_t*) xcalloc(length, sizeof(uint32_t));
|
197
|
+
|
198
|
+
assert(z0.values != NULL);
|
197
199
|
memcpy(values, z0.values, sizeof(uint32_t) * z0.length);
|
200
|
+
|
201
|
+
assert(z2.values != NULL);
|
198
202
|
memcpy(values + 2 * half, z2.values, sizeof(uint32_t) * z2.length);
|
199
203
|
|
200
204
|
uint32_t carry = 0;
|
@@ -326,6 +330,8 @@ pm_integer_convert_base(pm_integer_t *destination, const pm_integer_t *source, u
|
|
326
330
|
INTEGER_EXTRACT(source, source_length, source_values)
|
327
331
|
|
328
332
|
size_t bigints_length = (source_length + 1) / 2;
|
333
|
+
assert(bigints_length > 0);
|
334
|
+
|
329
335
|
pm_integer_t *bigints = (pm_integer_t *) xcalloc(bigints_length, sizeof(pm_integer_t));
|
330
336
|
if (bigints == NULL) return;
|
331
337
|
|
@@ -345,13 +351,13 @@ pm_integer_convert_base(pm_integer_t *destination, const pm_integer_t *source, u
|
|
345
351
|
base = next_base;
|
346
352
|
|
347
353
|
size_t next_length = (bigints_length + 1) / 2;
|
348
|
-
pm_integer_t *next_bigints = (pm_integer_t *)
|
354
|
+
pm_integer_t *next_bigints = (pm_integer_t *) xcalloc(next_length, sizeof(pm_integer_t));
|
349
355
|
|
350
356
|
for (size_t bigints_index = 0; bigints_index < bigints_length; bigints_index += 2) {
|
351
357
|
if (bigints_index + 1 == bigints_length) {
|
352
358
|
next_bigints[bigints_index / 2] = bigints[bigints_index];
|
353
359
|
} else {
|
354
|
-
pm_integer_t multiplied;
|
360
|
+
pm_integer_t multiplied = { 0 };
|
355
361
|
karatsuba_multiply(&multiplied, &base, &bigints[bigints_index + 1], base_to);
|
356
362
|
|
357
363
|
big_add(&next_bigints[bigints_index / 2], &bigints[bigints_index], &multiplied, base_to);
|
@@ -584,7 +590,7 @@ pm_integer_string(pm_buffer_t *buffer, const pm_integer_t *integer) {
|
|
584
590
|
}
|
585
591
|
|
586
592
|
// Otherwise, first we'll convert the base from 1<<32 to 10**9.
|
587
|
-
pm_integer_t converted;
|
593
|
+
pm_integer_t converted = { 0 };
|
588
594
|
pm_integer_convert_base(&converted, integer, (uint64_t) 1 << 32, 1000000000);
|
589
595
|
|
590
596
|
if (converted.values == NULL) {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -68,7 +68,6 @@ files:
|
|
68
68
|
- include/prism/util/pm_list.h
|
69
69
|
- include/prism/util/pm_memchr.h
|
70
70
|
- include/prism/util/pm_newline_list.h
|
71
|
-
- include/prism/util/pm_state_stack.h
|
72
71
|
- include/prism/util/pm_string.h
|
73
72
|
- include/prism/util/pm_string_list.h
|
74
73
|
- include/prism/util/pm_strncasecmp.h
|
@@ -93,6 +92,7 @@ files:
|
|
93
92
|
- lib/prism/parse_result/newlines.rb
|
94
93
|
- lib/prism/pattern.rb
|
95
94
|
- lib/prism/polyfill/string.rb
|
95
|
+
- lib/prism/reflection.rb
|
96
96
|
- lib/prism/serialize.rb
|
97
97
|
- lib/prism/translation.rb
|
98
98
|
- lib/prism/translation/parser.rb
|
@@ -114,7 +114,11 @@ files:
|
|
114
114
|
- rbi/prism/node.rbi
|
115
115
|
- rbi/prism/node_ext.rbi
|
116
116
|
- rbi/prism/parse_result.rbi
|
117
|
+
- rbi/prism/reflection.rbi
|
118
|
+
- rbi/prism/translation/parser.rbi
|
117
119
|
- rbi/prism/translation/parser/compiler.rbi
|
120
|
+
- rbi/prism/translation/parser33.rbi
|
121
|
+
- rbi/prism/translation/parser34.rbi
|
118
122
|
- rbi/prism/translation/ripper.rbi
|
119
123
|
- rbi/prism/translation/ripper/ripper_compiler.rbi
|
120
124
|
- rbi/prism/translation/ruby_parser.rbi
|
@@ -130,6 +134,7 @@ files:
|
|
130
134
|
- sig/prism/pack.rbs
|
131
135
|
- sig/prism/parse_result.rbs
|
132
136
|
- sig/prism/pattern.rbs
|
137
|
+
- sig/prism/reflection.rbs
|
133
138
|
- sig/prism/serialize.rbs
|
134
139
|
- sig/prism/visitor.rbs
|
135
140
|
- src/diagnostic.c
|
@@ -150,7 +155,6 @@ files:
|
|
150
155
|
- src/util/pm_list.c
|
151
156
|
- src/util/pm_memchr.c
|
152
157
|
- src/util/pm_newline_list.c
|
153
|
-
- src/util/pm_state_stack.c
|
154
158
|
- src/util/pm_string.c
|
155
159
|
- src/util/pm_string_list.c
|
156
160
|
- src/util/pm_strncasecmp.c
|
@@ -1,42 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @file pm_state_stack.h
|
3
|
-
*
|
4
|
-
* A stack of boolean values.
|
5
|
-
*/
|
6
|
-
#ifndef PRISM_STATE_STACK_H
|
7
|
-
#define PRISM_STATE_STACK_H
|
8
|
-
|
9
|
-
#include "prism/defines.h"
|
10
|
-
|
11
|
-
#include <stdbool.h>
|
12
|
-
#include <stdint.h>
|
13
|
-
|
14
|
-
/**
|
15
|
-
* A struct that represents a stack of boolean values.
|
16
|
-
*/
|
17
|
-
typedef uint32_t pm_state_stack_t;
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Pushes a value onto the stack.
|
21
|
-
*
|
22
|
-
* @param stack The stack to push the value onto.
|
23
|
-
* @param value The value to push onto the stack.
|
24
|
-
*/
|
25
|
-
void pm_state_stack_push(pm_state_stack_t *stack, bool value);
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Pops a value off the stack.
|
29
|
-
*
|
30
|
-
* @param stack The stack to pop the value off of.
|
31
|
-
*/
|
32
|
-
void pm_state_stack_pop(pm_state_stack_t *stack);
|
33
|
-
|
34
|
-
/**
|
35
|
-
* Returns the value at the top of the stack.
|
36
|
-
*
|
37
|
-
* @param stack The stack to get the value from.
|
38
|
-
* @return The value at the top of the stack.
|
39
|
-
*/
|
40
|
-
bool pm_state_stack_p(pm_state_stack_t *stack);
|
41
|
-
|
42
|
-
#endif
|
data/src/util/pm_state_stack.c
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
#include "prism/util/pm_state_stack.h"
|
2
|
-
|
3
|
-
/**
|
4
|
-
* Pushes a value onto the stack.
|
5
|
-
*/
|
6
|
-
void
|
7
|
-
pm_state_stack_push(pm_state_stack_t *stack, bool value) {
|
8
|
-
*stack = (*stack << 1) | (value & 1);
|
9
|
-
}
|
10
|
-
|
11
|
-
/**
|
12
|
-
* Pops a value off the stack.
|
13
|
-
*/
|
14
|
-
void
|
15
|
-
pm_state_stack_pop(pm_state_stack_t *stack) {
|
16
|
-
*stack >>= 1;
|
17
|
-
}
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Returns the value at the top of the stack.
|
21
|
-
*/
|
22
|
-
bool
|
23
|
-
pm_state_stack_p(pm_state_stack_t *stack) {
|
24
|
-
return *stack & 1;
|
25
|
-
}
|