yarp 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -8
- data/CONTRIBUTING.md +2 -2
- data/Makefile +5 -5
- data/README.md +11 -12
- data/config.yml +6 -2
- data/docs/build_system.md +21 -21
- data/docs/building.md +4 -4
- data/docs/configuration.md +25 -21
- data/docs/design.md +2 -2
- data/docs/encoding.md +17 -17
- data/docs/fuzzing.md +4 -4
- data/docs/heredocs.md +3 -3
- data/docs/mapping.md +94 -94
- data/docs/ripper.md +4 -4
- data/docs/ruby_api.md +11 -11
- data/docs/serialization.md +17 -16
- data/docs/testing.md +6 -6
- data/ext/prism/api_node.c +4725 -0
- data/ext/{yarp → prism}/api_pack.c +82 -82
- data/ext/{yarp → prism}/extconf.rb +13 -13
- data/ext/{yarp → prism}/extension.c +175 -168
- data/ext/prism/extension.h +18 -0
- data/include/prism/ast.h +1932 -0
- data/include/prism/defines.h +45 -0
- data/include/prism/diagnostic.h +231 -0
- data/include/{yarp/enc/yp_encoding.h → prism/enc/pm_encoding.h} +40 -40
- data/include/prism/node.h +41 -0
- data/include/prism/pack.h +141 -0
- data/include/{yarp → prism}/parser.h +143 -142
- data/include/prism/regexp.h +19 -0
- data/include/prism/unescape.h +48 -0
- data/include/prism/util/pm_buffer.h +51 -0
- data/include/{yarp/util/yp_char.h → prism/util/pm_char.h} +20 -20
- data/include/{yarp/util/yp_constant_pool.h → prism/util/pm_constant_pool.h} +26 -22
- data/include/{yarp/util/yp_list.h → prism/util/pm_list.h} +21 -21
- data/include/prism/util/pm_memchr.h +14 -0
- data/include/{yarp/util/yp_newline_list.h → prism/util/pm_newline_list.h} +11 -11
- data/include/prism/util/pm_state_stack.h +24 -0
- data/include/{yarp/util/yp_string.h → prism/util/pm_string.h} +20 -20
- data/include/prism/util/pm_string_list.h +25 -0
- data/include/{yarp/util/yp_strpbrk.h → prism/util/pm_strpbrk.h} +7 -7
- data/include/prism/version.h +4 -0
- data/include/prism.h +82 -0
- data/lib/prism/compiler.rb +465 -0
- data/lib/prism/debug.rb +157 -0
- data/lib/{yarp/desugar_visitor.rb → prism/desugar_compiler.rb} +4 -2
- data/lib/prism/dispatcher.rb +2051 -0
- data/lib/prism/dsl.rb +750 -0
- data/lib/{yarp → prism}/ffi.rb +66 -67
- data/lib/{yarp → prism}/lex_compat.rb +40 -43
- data/lib/{yarp/mutation_visitor.rb → prism/mutation_compiler.rb} +3 -3
- data/lib/{yarp → prism}/node.rb +2012 -2593
- data/lib/prism/node_ext.rb +55 -0
- data/lib/prism/node_inspector.rb +68 -0
- data/lib/{yarp → prism}/pack.rb +1 -1
- data/lib/{yarp → prism}/parse_result/comments.rb +1 -1
- data/lib/{yarp → prism}/parse_result/newlines.rb +1 -1
- data/lib/prism/parse_result.rb +266 -0
- data/lib/{yarp → prism}/pattern.rb +14 -14
- data/lib/{yarp → prism}/ripper_compat.rb +5 -5
- data/lib/{yarp → prism}/serialize.rb +12 -7
- data/lib/prism/visitor.rb +470 -0
- data/lib/prism.rb +64 -0
- data/lib/yarp.rb +2 -614
- data/src/diagnostic.c +213 -208
- data/src/enc/pm_big5.c +52 -0
- data/src/enc/pm_euc_jp.c +58 -0
- data/src/enc/{yp_gbk.c → pm_gbk.c} +16 -16
- data/src/enc/pm_shift_jis.c +56 -0
- data/src/enc/{yp_tables.c → pm_tables.c} +69 -69
- data/src/enc/{yp_unicode.c → pm_unicode.c} +40 -40
- data/src/enc/pm_windows_31j.c +56 -0
- data/src/node.c +1293 -1233
- data/src/pack.c +247 -247
- data/src/prettyprint.c +1479 -1479
- data/src/{yarp.c → prism.c} +5205 -5083
- data/src/regexp.c +132 -132
- data/src/serialize.c +1121 -1121
- data/src/token_type.c +169 -167
- data/src/unescape.c +106 -87
- data/src/util/pm_buffer.c +103 -0
- data/src/util/{yp_char.c → pm_char.c} +72 -72
- data/src/util/{yp_constant_pool.c → pm_constant_pool.c} +85 -64
- data/src/util/{yp_list.c → pm_list.c} +10 -10
- data/src/util/{yp_memchr.c → pm_memchr.c} +6 -4
- data/src/util/{yp_newline_list.c → pm_newline_list.c} +21 -21
- data/src/util/{yp_state_stack.c → pm_state_stack.c} +4 -4
- data/src/util/{yp_string.c → pm_string.c} +38 -38
- data/src/util/pm_string_list.c +29 -0
- data/src/util/{yp_strncasecmp.c → pm_strncasecmp.c} +1 -1
- data/src/util/{yp_strpbrk.c → pm_strpbrk.c} +8 -8
- data/yarp.gemspec +68 -59
- metadata +70 -61
- data/ext/yarp/api_node.c +0 -4728
- data/ext/yarp/extension.h +0 -18
- data/include/yarp/ast.h +0 -1929
- data/include/yarp/defines.h +0 -45
- data/include/yarp/diagnostic.h +0 -226
- data/include/yarp/node.h +0 -42
- data/include/yarp/pack.h +0 -141
- data/include/yarp/regexp.h +0 -19
- data/include/yarp/unescape.h +0 -44
- data/include/yarp/util/yp_buffer.h +0 -51
- data/include/yarp/util/yp_memchr.h +0 -14
- data/include/yarp/util/yp_state_stack.h +0 -24
- data/include/yarp/util/yp_string_list.h +0 -25
- data/include/yarp/version.h +0 -4
- data/include/yarp.h +0 -82
- data/src/enc/yp_big5.c +0 -52
- data/src/enc/yp_euc_jp.c +0 -58
- data/src/enc/yp_shift_jis.c +0 -56
- data/src/enc/yp_windows_31j.c +0 -56
- data/src/util/yp_buffer.c +0 -101
- data/src/util/yp_string_list.c +0 -29
data/src/pack.c
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#include "
|
|
1
|
+
#include "prism/pack.h"
|
|
2
2
|
|
|
3
3
|
#include <stdbool.h>
|
|
4
4
|
#include <errno.h>
|
|
@@ -6,25 +6,25 @@
|
|
|
6
6
|
static uintmax_t
|
|
7
7
|
strtoumaxc(const char **format);
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
PRISM_EXPORTED_FUNCTION pm_pack_result
|
|
10
|
+
pm_pack_parse(pm_pack_variant variant, const char **format, const char *format_end,
|
|
11
|
+
pm_pack_type *type, pm_pack_signed *signed_type, pm_pack_endian *endian, pm_pack_size *size,
|
|
12
|
+
pm_pack_length_type *length_type, uint64_t *length, pm_pack_encoding *encoding) {
|
|
13
13
|
|
|
14
|
-
if (*encoding ==
|
|
15
|
-
*encoding =
|
|
14
|
+
if (*encoding == PM_PACK_ENCODING_START) {
|
|
15
|
+
*encoding = PM_PACK_ENCODING_US_ASCII;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
if (*format == format_end) {
|
|
19
|
-
*type =
|
|
20
|
-
*signed_type =
|
|
21
|
-
*endian =
|
|
22
|
-
*size =
|
|
23
|
-
*length_type =
|
|
24
|
-
return
|
|
19
|
+
*type = PM_PACK_END;
|
|
20
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
21
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
22
|
+
*size = PM_PACK_SIZE_NA;
|
|
23
|
+
*length_type = PM_PACK_LENGTH_NA;
|
|
24
|
+
return PM_PACK_OK;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
*length_type =
|
|
27
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
28
28
|
*length = 1;
|
|
29
29
|
bool length_changed_allowed = true;
|
|
30
30
|
|
|
@@ -37,268 +37,268 @@ yp_pack_parse(yp_pack_variant variant, const char **format, const char *format_e
|
|
|
37
37
|
case '\v':
|
|
38
38
|
case '\f':
|
|
39
39
|
case '\r':
|
|
40
|
-
*type =
|
|
41
|
-
*signed_type =
|
|
42
|
-
*endian =
|
|
43
|
-
*size =
|
|
44
|
-
*length_type =
|
|
40
|
+
*type = PM_PACK_SPACE;
|
|
41
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
42
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
43
|
+
*size = PM_PACK_SIZE_NA;
|
|
44
|
+
*length_type = PM_PACK_LENGTH_NA;
|
|
45
45
|
*length = 0;
|
|
46
|
-
return
|
|
46
|
+
return PM_PACK_OK;
|
|
47
47
|
case '#':
|
|
48
48
|
while ((*format < format_end) && (**format != '\n')) {
|
|
49
49
|
(*format)++;
|
|
50
50
|
}
|
|
51
|
-
*type =
|
|
52
|
-
*signed_type =
|
|
53
|
-
*endian =
|
|
54
|
-
*size =
|
|
55
|
-
*length_type =
|
|
51
|
+
*type = PM_PACK_COMMENT;
|
|
52
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
53
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
54
|
+
*size = PM_PACK_SIZE_NA;
|
|
55
|
+
*length_type = PM_PACK_LENGTH_NA;
|
|
56
56
|
*length = 0;
|
|
57
|
-
return
|
|
57
|
+
return PM_PACK_OK;
|
|
58
58
|
case 'C':
|
|
59
|
-
*type =
|
|
60
|
-
*signed_type =
|
|
61
|
-
*endian =
|
|
62
|
-
*size =
|
|
59
|
+
*type = PM_PACK_INTEGER;
|
|
60
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
61
|
+
*endian = PM_PACK_AGNOSTIC_ENDIAN;
|
|
62
|
+
*size = PM_PACK_SIZE_8;
|
|
63
63
|
break;
|
|
64
64
|
case 'S':
|
|
65
|
-
*type =
|
|
66
|
-
*signed_type =
|
|
67
|
-
*endian =
|
|
68
|
-
*size =
|
|
65
|
+
*type = PM_PACK_INTEGER;
|
|
66
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
67
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
68
|
+
*size = PM_PACK_SIZE_16;
|
|
69
69
|
break;
|
|
70
70
|
case 'L':
|
|
71
|
-
*type =
|
|
72
|
-
*signed_type =
|
|
73
|
-
*endian =
|
|
74
|
-
*size =
|
|
71
|
+
*type = PM_PACK_INTEGER;
|
|
72
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
73
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
74
|
+
*size = PM_PACK_SIZE_32;
|
|
75
75
|
break;
|
|
76
76
|
case 'Q':
|
|
77
|
-
*type =
|
|
78
|
-
*signed_type =
|
|
79
|
-
*endian =
|
|
80
|
-
*size =
|
|
77
|
+
*type = PM_PACK_INTEGER;
|
|
78
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
79
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
80
|
+
*size = PM_PACK_SIZE_64;
|
|
81
81
|
break;
|
|
82
82
|
case 'J':
|
|
83
|
-
*type =
|
|
84
|
-
*signed_type =
|
|
85
|
-
*endian =
|
|
86
|
-
*size =
|
|
83
|
+
*type = PM_PACK_INTEGER;
|
|
84
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
85
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
86
|
+
*size = PM_PACK_SIZE_P;
|
|
87
87
|
break;
|
|
88
88
|
case 'c':
|
|
89
|
-
*type =
|
|
90
|
-
*signed_type =
|
|
91
|
-
*endian =
|
|
92
|
-
*size =
|
|
89
|
+
*type = PM_PACK_INTEGER;
|
|
90
|
+
*signed_type = PM_PACK_SIGNED;
|
|
91
|
+
*endian = PM_PACK_AGNOSTIC_ENDIAN;
|
|
92
|
+
*size = PM_PACK_SIZE_8;
|
|
93
93
|
break;
|
|
94
94
|
case 's':
|
|
95
|
-
*type =
|
|
96
|
-
*signed_type =
|
|
97
|
-
*endian =
|
|
98
|
-
*size =
|
|
95
|
+
*type = PM_PACK_INTEGER;
|
|
96
|
+
*signed_type = PM_PACK_SIGNED;
|
|
97
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
98
|
+
*size = PM_PACK_SIZE_16;
|
|
99
99
|
break;
|
|
100
100
|
case 'l':
|
|
101
|
-
*type =
|
|
102
|
-
*signed_type =
|
|
103
|
-
*endian =
|
|
104
|
-
*size =
|
|
101
|
+
*type = PM_PACK_INTEGER;
|
|
102
|
+
*signed_type = PM_PACK_SIGNED;
|
|
103
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
104
|
+
*size = PM_PACK_SIZE_32;
|
|
105
105
|
break;
|
|
106
106
|
case 'q':
|
|
107
|
-
*type =
|
|
108
|
-
*signed_type =
|
|
109
|
-
*endian =
|
|
110
|
-
*size =
|
|
107
|
+
*type = PM_PACK_INTEGER;
|
|
108
|
+
*signed_type = PM_PACK_SIGNED;
|
|
109
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
110
|
+
*size = PM_PACK_SIZE_64;
|
|
111
111
|
break;
|
|
112
112
|
case 'j':
|
|
113
|
-
*type =
|
|
114
|
-
*signed_type =
|
|
115
|
-
*endian =
|
|
116
|
-
*size =
|
|
113
|
+
*type = PM_PACK_INTEGER;
|
|
114
|
+
*signed_type = PM_PACK_SIGNED;
|
|
115
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
116
|
+
*size = PM_PACK_SIZE_P;
|
|
117
117
|
break;
|
|
118
118
|
case 'I':
|
|
119
|
-
*type =
|
|
120
|
-
*signed_type =
|
|
121
|
-
*endian =
|
|
122
|
-
*size =
|
|
119
|
+
*type = PM_PACK_INTEGER;
|
|
120
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
121
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
122
|
+
*size = PM_PACK_SIZE_INT;
|
|
123
123
|
break;
|
|
124
124
|
case 'i':
|
|
125
|
-
*type =
|
|
126
|
-
*signed_type =
|
|
127
|
-
*endian =
|
|
128
|
-
*size =
|
|
125
|
+
*type = PM_PACK_INTEGER;
|
|
126
|
+
*signed_type = PM_PACK_SIGNED;
|
|
127
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
128
|
+
*size = PM_PACK_SIZE_INT;
|
|
129
129
|
break;
|
|
130
130
|
case 'n':
|
|
131
|
-
*type =
|
|
132
|
-
*signed_type =
|
|
133
|
-
*endian =
|
|
134
|
-
*size =
|
|
131
|
+
*type = PM_PACK_INTEGER;
|
|
132
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
133
|
+
*endian = PM_PACK_BIG_ENDIAN;
|
|
134
|
+
*size = PM_PACK_SIZE_16;
|
|
135
135
|
length_changed_allowed = false;
|
|
136
136
|
break;
|
|
137
137
|
case 'N':
|
|
138
|
-
*type =
|
|
139
|
-
*signed_type =
|
|
140
|
-
*endian =
|
|
141
|
-
*size =
|
|
138
|
+
*type = PM_PACK_INTEGER;
|
|
139
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
140
|
+
*endian = PM_PACK_BIG_ENDIAN;
|
|
141
|
+
*size = PM_PACK_SIZE_32;
|
|
142
142
|
length_changed_allowed = false;
|
|
143
143
|
break;
|
|
144
144
|
case 'v':
|
|
145
|
-
*type =
|
|
146
|
-
*signed_type =
|
|
147
|
-
*endian =
|
|
148
|
-
*size =
|
|
145
|
+
*type = PM_PACK_INTEGER;
|
|
146
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
147
|
+
*endian = PM_PACK_LITTLE_ENDIAN;
|
|
148
|
+
*size = PM_PACK_SIZE_16;
|
|
149
149
|
length_changed_allowed = false;
|
|
150
150
|
break;
|
|
151
151
|
case 'V':
|
|
152
|
-
*type =
|
|
153
|
-
*signed_type =
|
|
154
|
-
*endian =
|
|
155
|
-
*size =
|
|
152
|
+
*type = PM_PACK_INTEGER;
|
|
153
|
+
*signed_type = PM_PACK_UNSIGNED;
|
|
154
|
+
*endian = PM_PACK_LITTLE_ENDIAN;
|
|
155
|
+
*size = PM_PACK_SIZE_32;
|
|
156
156
|
length_changed_allowed = false;
|
|
157
157
|
break;
|
|
158
158
|
case 'U':
|
|
159
|
-
*type =
|
|
160
|
-
*signed_type =
|
|
161
|
-
*endian =
|
|
162
|
-
*size =
|
|
159
|
+
*type = PM_PACK_UTF8;
|
|
160
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
161
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
162
|
+
*size = PM_PACK_SIZE_NA;
|
|
163
163
|
break;
|
|
164
164
|
case 'w':
|
|
165
|
-
*type =
|
|
166
|
-
*signed_type =
|
|
167
|
-
*endian =
|
|
168
|
-
*size =
|
|
165
|
+
*type = PM_PACK_BER;
|
|
166
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
167
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
168
|
+
*size = PM_PACK_SIZE_NA;
|
|
169
169
|
break;
|
|
170
170
|
case 'D':
|
|
171
171
|
case 'd':
|
|
172
|
-
*type =
|
|
173
|
-
*signed_type =
|
|
174
|
-
*endian =
|
|
175
|
-
*size =
|
|
172
|
+
*type = PM_PACK_FLOAT;
|
|
173
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
174
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
175
|
+
*size = PM_PACK_SIZE_64;
|
|
176
176
|
break;
|
|
177
177
|
case 'F':
|
|
178
178
|
case 'f':
|
|
179
|
-
*type =
|
|
180
|
-
*signed_type =
|
|
181
|
-
*endian =
|
|
182
|
-
*size =
|
|
179
|
+
*type = PM_PACK_FLOAT;
|
|
180
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
181
|
+
*endian = PM_PACK_NATIVE_ENDIAN;
|
|
182
|
+
*size = PM_PACK_SIZE_32;
|
|
183
183
|
break;
|
|
184
184
|
case 'E':
|
|
185
|
-
*type =
|
|
186
|
-
*signed_type =
|
|
187
|
-
*endian =
|
|
188
|
-
*size =
|
|
185
|
+
*type = PM_PACK_FLOAT;
|
|
186
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
187
|
+
*endian = PM_PACK_LITTLE_ENDIAN;
|
|
188
|
+
*size = PM_PACK_SIZE_64;
|
|
189
189
|
break;
|
|
190
190
|
case 'e':
|
|
191
|
-
*type =
|
|
192
|
-
*signed_type =
|
|
193
|
-
*endian =
|
|
194
|
-
*size =
|
|
191
|
+
*type = PM_PACK_FLOAT;
|
|
192
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
193
|
+
*endian = PM_PACK_LITTLE_ENDIAN;
|
|
194
|
+
*size = PM_PACK_SIZE_32;
|
|
195
195
|
break;
|
|
196
196
|
case 'G':
|
|
197
|
-
*type =
|
|
198
|
-
*signed_type =
|
|
199
|
-
*endian =
|
|
200
|
-
*size =
|
|
197
|
+
*type = PM_PACK_FLOAT;
|
|
198
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
199
|
+
*endian = PM_PACK_BIG_ENDIAN;
|
|
200
|
+
*size = PM_PACK_SIZE_64;
|
|
201
201
|
break;
|
|
202
202
|
case 'g':
|
|
203
|
-
*type =
|
|
204
|
-
*signed_type =
|
|
205
|
-
*endian =
|
|
206
|
-
*size =
|
|
203
|
+
*type = PM_PACK_FLOAT;
|
|
204
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
205
|
+
*endian = PM_PACK_BIG_ENDIAN;
|
|
206
|
+
*size = PM_PACK_SIZE_32;
|
|
207
207
|
break;
|
|
208
208
|
case 'A':
|
|
209
|
-
*type =
|
|
210
|
-
*signed_type =
|
|
211
|
-
*endian =
|
|
212
|
-
*size =
|
|
209
|
+
*type = PM_PACK_STRING_SPACE_PADDED;
|
|
210
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
211
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
212
|
+
*size = PM_PACK_SIZE_NA;
|
|
213
213
|
break;
|
|
214
214
|
case 'a':
|
|
215
|
-
*type =
|
|
216
|
-
*signed_type =
|
|
217
|
-
*endian =
|
|
218
|
-
*size =
|
|
215
|
+
*type = PM_PACK_STRING_NULL_PADDED;
|
|
216
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
217
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
218
|
+
*size = PM_PACK_SIZE_NA;
|
|
219
219
|
break;
|
|
220
220
|
case 'Z':
|
|
221
|
-
*type =
|
|
222
|
-
*signed_type =
|
|
223
|
-
*endian =
|
|
224
|
-
*size =
|
|
221
|
+
*type = PM_PACK_STRING_NULL_TERMINATED;
|
|
222
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
223
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
224
|
+
*size = PM_PACK_SIZE_NA;
|
|
225
225
|
break;
|
|
226
226
|
case 'B':
|
|
227
|
-
*type =
|
|
228
|
-
*signed_type =
|
|
229
|
-
*endian =
|
|
230
|
-
*size =
|
|
227
|
+
*type = PM_PACK_STRING_MSB;
|
|
228
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
229
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
230
|
+
*size = PM_PACK_SIZE_NA;
|
|
231
231
|
break;
|
|
232
232
|
case 'b':
|
|
233
|
-
*type =
|
|
234
|
-
*signed_type =
|
|
235
|
-
*endian =
|
|
236
|
-
*size =
|
|
233
|
+
*type = PM_PACK_STRING_LSB;
|
|
234
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
235
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
236
|
+
*size = PM_PACK_SIZE_NA;
|
|
237
237
|
break;
|
|
238
238
|
case 'H':
|
|
239
|
-
*type =
|
|
240
|
-
*signed_type =
|
|
241
|
-
*endian =
|
|
242
|
-
*size =
|
|
239
|
+
*type = PM_PACK_STRING_HEX_HIGH;
|
|
240
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
241
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
242
|
+
*size = PM_PACK_SIZE_NA;
|
|
243
243
|
break;
|
|
244
244
|
case 'h':
|
|
245
|
-
*type =
|
|
246
|
-
*signed_type =
|
|
247
|
-
*endian =
|
|
248
|
-
*size =
|
|
245
|
+
*type = PM_PACK_STRING_HEX_LOW;
|
|
246
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
247
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
248
|
+
*size = PM_PACK_SIZE_NA;
|
|
249
249
|
break;
|
|
250
250
|
case 'u':
|
|
251
|
-
*type =
|
|
252
|
-
*signed_type =
|
|
253
|
-
*endian =
|
|
254
|
-
*size =
|
|
251
|
+
*type = PM_PACK_STRING_UU;
|
|
252
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
253
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
254
|
+
*size = PM_PACK_SIZE_NA;
|
|
255
255
|
break;
|
|
256
256
|
case 'M':
|
|
257
|
-
*type =
|
|
258
|
-
*signed_type =
|
|
259
|
-
*endian =
|
|
260
|
-
*size =
|
|
257
|
+
*type = PM_PACK_STRING_MIME;
|
|
258
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
259
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
260
|
+
*size = PM_PACK_SIZE_NA;
|
|
261
261
|
break;
|
|
262
262
|
case 'm':
|
|
263
|
-
*type =
|
|
264
|
-
*signed_type =
|
|
265
|
-
*endian =
|
|
266
|
-
*size =
|
|
263
|
+
*type = PM_PACK_STRING_BASE64;
|
|
264
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
265
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
266
|
+
*size = PM_PACK_SIZE_NA;
|
|
267
267
|
break;
|
|
268
268
|
case 'P':
|
|
269
|
-
*type =
|
|
270
|
-
*signed_type =
|
|
271
|
-
*endian =
|
|
272
|
-
*size =
|
|
269
|
+
*type = PM_PACK_STRING_FIXED;
|
|
270
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
271
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
272
|
+
*size = PM_PACK_SIZE_NA;
|
|
273
273
|
break;
|
|
274
274
|
case 'p':
|
|
275
|
-
*type =
|
|
276
|
-
*signed_type =
|
|
277
|
-
*endian =
|
|
278
|
-
*size =
|
|
275
|
+
*type = PM_PACK_STRING_POINTER;
|
|
276
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
277
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
278
|
+
*size = PM_PACK_SIZE_NA;
|
|
279
279
|
break;
|
|
280
280
|
case '@':
|
|
281
|
-
*type =
|
|
282
|
-
*signed_type =
|
|
283
|
-
*endian =
|
|
284
|
-
*size =
|
|
281
|
+
*type = PM_PACK_MOVE;
|
|
282
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
283
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
284
|
+
*size = PM_PACK_SIZE_NA;
|
|
285
285
|
break;
|
|
286
286
|
case 'X':
|
|
287
|
-
*type =
|
|
288
|
-
*signed_type =
|
|
289
|
-
*endian =
|
|
290
|
-
*size =
|
|
287
|
+
*type = PM_PACK_BACK;
|
|
288
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
289
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
290
|
+
*size = PM_PACK_SIZE_NA;
|
|
291
291
|
break;
|
|
292
292
|
case 'x':
|
|
293
|
-
*type =
|
|
294
|
-
*signed_type =
|
|
295
|
-
*endian =
|
|
296
|
-
*size =
|
|
293
|
+
*type = PM_PACK_NULL;
|
|
294
|
+
*signed_type = PM_PACK_SIGNED_NA;
|
|
295
|
+
*endian = PM_PACK_ENDIAN_NA;
|
|
296
|
+
*size = PM_PACK_SIZE_NA;
|
|
297
297
|
break;
|
|
298
298
|
case '%':
|
|
299
|
-
return
|
|
299
|
+
return PM_PACK_ERROR_UNSUPPORTED_DIRECTIVE;
|
|
300
300
|
default:
|
|
301
|
-
return
|
|
301
|
+
return PM_PACK_ERROR_UNKNOWN_DIRECTIVE;
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
bool explicit_endian = false;
|
|
@@ -308,44 +308,44 @@ yp_pack_parse(yp_pack_variant variant, const char **format, const char *format_e
|
|
|
308
308
|
case '_':
|
|
309
309
|
case '!':
|
|
310
310
|
(*format)++;
|
|
311
|
-
if (*type !=
|
|
312
|
-
return
|
|
311
|
+
if (*type != PM_PACK_INTEGER || !length_changed_allowed) {
|
|
312
|
+
return PM_PACK_ERROR_BANG_NOT_ALLOWED;
|
|
313
313
|
}
|
|
314
314
|
switch (*size) {
|
|
315
|
-
case
|
|
316
|
-
case
|
|
317
|
-
case
|
|
318
|
-
case
|
|
315
|
+
case PM_PACK_SIZE_SHORT:
|
|
316
|
+
case PM_PACK_SIZE_INT:
|
|
317
|
+
case PM_PACK_SIZE_LONG:
|
|
318
|
+
case PM_PACK_SIZE_LONG_LONG:
|
|
319
319
|
break;
|
|
320
|
-
case
|
|
321
|
-
*size =
|
|
320
|
+
case PM_PACK_SIZE_16:
|
|
321
|
+
*size = PM_PACK_SIZE_SHORT;
|
|
322
322
|
break;
|
|
323
|
-
case
|
|
324
|
-
*size =
|
|
323
|
+
case PM_PACK_SIZE_32:
|
|
324
|
+
*size = PM_PACK_SIZE_LONG;
|
|
325
325
|
break;
|
|
326
|
-
case
|
|
327
|
-
*size =
|
|
326
|
+
case PM_PACK_SIZE_64:
|
|
327
|
+
*size = PM_PACK_SIZE_LONG_LONG;
|
|
328
328
|
break;
|
|
329
|
-
case
|
|
329
|
+
case PM_PACK_SIZE_P:
|
|
330
330
|
break;
|
|
331
331
|
default:
|
|
332
|
-
return
|
|
332
|
+
return PM_PACK_ERROR_BANG_NOT_ALLOWED;
|
|
333
333
|
}
|
|
334
334
|
break;
|
|
335
335
|
case '<':
|
|
336
336
|
(*format)++;
|
|
337
337
|
if (explicit_endian) {
|
|
338
|
-
return
|
|
338
|
+
return PM_PACK_ERROR_DOUBLE_ENDIAN;
|
|
339
339
|
}
|
|
340
|
-
*endian =
|
|
340
|
+
*endian = PM_PACK_LITTLE_ENDIAN;
|
|
341
341
|
explicit_endian = true;
|
|
342
342
|
break;
|
|
343
343
|
case '>':
|
|
344
344
|
(*format)++;
|
|
345
345
|
if (explicit_endian) {
|
|
346
|
-
return
|
|
346
|
+
return PM_PACK_ERROR_DOUBLE_ENDIAN;
|
|
347
347
|
}
|
|
348
|
-
*endian =
|
|
348
|
+
*endian = PM_PACK_BIG_ENDIAN;
|
|
349
349
|
explicit_endian = true;
|
|
350
350
|
break;
|
|
351
351
|
default:
|
|
@@ -355,64 +355,64 @@ yp_pack_parse(yp_pack_variant variant, const char **format, const char *format_e
|
|
|
355
355
|
|
|
356
356
|
exit_modifier_loop:
|
|
357
357
|
|
|
358
|
-
if (variant ==
|
|
358
|
+
if (variant == PM_PACK_VARIANT_UNPACK && *type == PM_PACK_MOVE) {
|
|
359
359
|
*length = 0;
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
if (*format < format_end) {
|
|
363
363
|
if (**format == '*') {
|
|
364
364
|
switch (*type) {
|
|
365
|
-
case
|
|
366
|
-
case
|
|
365
|
+
case PM_PACK_NULL:
|
|
366
|
+
case PM_PACK_BACK:
|
|
367
367
|
switch (variant) {
|
|
368
|
-
case
|
|
369
|
-
*length_type =
|
|
368
|
+
case PM_PACK_VARIANT_PACK:
|
|
369
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
370
370
|
break;
|
|
371
|
-
case
|
|
372
|
-
*length_type =
|
|
371
|
+
case PM_PACK_VARIANT_UNPACK:
|
|
372
|
+
*length_type = PM_PACK_LENGTH_MAX;
|
|
373
373
|
break;
|
|
374
374
|
}
|
|
375
375
|
*length = 0;
|
|
376
376
|
break;
|
|
377
377
|
|
|
378
|
-
case
|
|
378
|
+
case PM_PACK_MOVE:
|
|
379
379
|
switch (variant) {
|
|
380
|
-
case
|
|
381
|
-
*length_type =
|
|
380
|
+
case PM_PACK_VARIANT_PACK:
|
|
381
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
382
382
|
break;
|
|
383
|
-
case
|
|
384
|
-
*length_type =
|
|
383
|
+
case PM_PACK_VARIANT_UNPACK:
|
|
384
|
+
*length_type = PM_PACK_LENGTH_RELATIVE;
|
|
385
385
|
break;
|
|
386
386
|
}
|
|
387
387
|
*length = 0;
|
|
388
388
|
break;
|
|
389
389
|
|
|
390
|
-
case
|
|
391
|
-
*length_type =
|
|
390
|
+
case PM_PACK_STRING_UU:
|
|
391
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
392
392
|
*length = 0;
|
|
393
393
|
break;
|
|
394
394
|
|
|
395
|
-
case
|
|
395
|
+
case PM_PACK_STRING_FIXED:
|
|
396
396
|
switch (variant) {
|
|
397
|
-
case
|
|
398
|
-
*length_type =
|
|
397
|
+
case PM_PACK_VARIANT_PACK:
|
|
398
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
399
399
|
*length = 1;
|
|
400
400
|
break;
|
|
401
|
-
case
|
|
402
|
-
*length_type =
|
|
401
|
+
case PM_PACK_VARIANT_UNPACK:
|
|
402
|
+
*length_type = PM_PACK_LENGTH_MAX;
|
|
403
403
|
*length = 0;
|
|
404
404
|
break;
|
|
405
405
|
}
|
|
406
406
|
break;
|
|
407
407
|
|
|
408
|
-
case
|
|
409
|
-
case
|
|
410
|
-
*length_type =
|
|
408
|
+
case PM_PACK_STRING_MIME:
|
|
409
|
+
case PM_PACK_STRING_BASE64:
|
|
410
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
411
411
|
*length = 1;
|
|
412
412
|
break;
|
|
413
413
|
|
|
414
414
|
default:
|
|
415
|
-
*length_type =
|
|
415
|
+
*length_type = PM_PACK_LENGTH_MAX;
|
|
416
416
|
*length = 0;
|
|
417
417
|
break;
|
|
418
418
|
}
|
|
@@ -420,59 +420,59 @@ exit_modifier_loop:
|
|
|
420
420
|
(*format)++;
|
|
421
421
|
} else if (**format >= '0' && **format <= '9') {
|
|
422
422
|
errno = 0;
|
|
423
|
-
*length_type =
|
|
423
|
+
*length_type = PM_PACK_LENGTH_FIXED;
|
|
424
424
|
#if UINTMAX_MAX < UINT64_MAX
|
|
425
|
-
#error "
|
|
425
|
+
#error "prism's design assumes uintmax_t is at least as large as uint64_t"
|
|
426
426
|
#endif
|
|
427
427
|
uintmax_t length_max = strtoumaxc(format);
|
|
428
428
|
if (errno || length_max > UINT64_MAX) {
|
|
429
|
-
return
|
|
429
|
+
return PM_PACK_ERROR_LENGTH_TOO_BIG;
|
|
430
430
|
}
|
|
431
431
|
*length = (uint64_t) length_max;
|
|
432
432
|
}
|
|
433
433
|
}
|
|
434
434
|
|
|
435
435
|
switch (*type) {
|
|
436
|
-
case
|
|
436
|
+
case PM_PACK_UTF8:
|
|
437
437
|
/* if encoding is US-ASCII, upgrade to UTF-8 */
|
|
438
|
-
if (*encoding ==
|
|
439
|
-
*encoding =
|
|
438
|
+
if (*encoding == PM_PACK_ENCODING_US_ASCII) {
|
|
439
|
+
*encoding = PM_PACK_ENCODING_UTF_8;
|
|
440
440
|
}
|
|
441
441
|
break;
|
|
442
|
-
case
|
|
443
|
-
case
|
|
444
|
-
case
|
|
442
|
+
case PM_PACK_STRING_MIME:
|
|
443
|
+
case PM_PACK_STRING_BASE64:
|
|
444
|
+
case PM_PACK_STRING_UU:
|
|
445
445
|
/* keep US-ASCII (do nothing) */
|
|
446
446
|
break;
|
|
447
447
|
default:
|
|
448
448
|
/* fall back to BINARY */
|
|
449
|
-
*encoding =
|
|
449
|
+
*encoding = PM_PACK_ENCODING_ASCII_8BIT;
|
|
450
450
|
break;
|
|
451
451
|
}
|
|
452
452
|
|
|
453
|
-
return
|
|
453
|
+
return PM_PACK_OK;
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
-
|
|
457
|
-
|
|
456
|
+
PRISM_EXPORTED_FUNCTION size_t
|
|
457
|
+
pm_size_to_native(pm_pack_size size) {
|
|
458
458
|
switch (size) {
|
|
459
|
-
case
|
|
459
|
+
case PM_PACK_SIZE_SHORT:
|
|
460
460
|
return sizeof(short);
|
|
461
|
-
case
|
|
461
|
+
case PM_PACK_SIZE_INT:
|
|
462
462
|
return sizeof(int);
|
|
463
|
-
case
|
|
463
|
+
case PM_PACK_SIZE_LONG:
|
|
464
464
|
return sizeof(long);
|
|
465
|
-
case
|
|
465
|
+
case PM_PACK_SIZE_LONG_LONG:
|
|
466
466
|
return sizeof(long long);
|
|
467
|
-
case
|
|
467
|
+
case PM_PACK_SIZE_8:
|
|
468
468
|
return 1;
|
|
469
|
-
case
|
|
469
|
+
case PM_PACK_SIZE_16:
|
|
470
470
|
return 2;
|
|
471
|
-
case
|
|
471
|
+
case PM_PACK_SIZE_32:
|
|
472
472
|
return 4;
|
|
473
|
-
case
|
|
473
|
+
case PM_PACK_SIZE_64:
|
|
474
474
|
return 8;
|
|
475
|
-
case
|
|
475
|
+
case PM_PACK_SIZE_P:
|
|
476
476
|
return sizeof(void *);
|
|
477
477
|
default:
|
|
478
478
|
return 0;
|