ndtypes 0.2.0dev5 → 0.2.0dev6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +12 -0
- data/Rakefile +8 -0
- data/ext/ruby_ndtypes/GPATH +0 -0
- data/ext/ruby_ndtypes/GRTAGS +0 -0
- data/ext/ruby_ndtypes/GTAGS +0 -0
- data/ext/ruby_ndtypes/extconf.rb +1 -1
- data/ext/ruby_ndtypes/include/ndtypes.h +231 -122
- data/ext/ruby_ndtypes/include/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/lib/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/lib/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/Makefile +87 -0
- data/ext/ruby_ndtypes/ndtypes/config.h +68 -0
- data/ext/ruby_ndtypes/ndtypes/config.log +477 -0
- data/ext/ruby_ndtypes/ndtypes/config.status +1027 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_static/style.css +7 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_templates/layout.html +2 -0
- data/ext/ruby_ndtypes/ndtypes/doc/conf.py +40 -4
- data/ext/ruby_ndtypes/ndtypes/doc/images/xndlogo.png +0 -0
- data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/types.rst +1 -1
- data/ext/ruby_ndtypes/ndtypes/doc/requirements.txt +2 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile +287 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.in +20 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.vc +22 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.c +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile +73 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.c +246 -229
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.h +15 -11
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.y +38 -28
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.c +91 -91
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.l +4 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.c +8 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/context.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.c +263 -182
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/encodings.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.c +67 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.c +1112 -1000
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.h +69 -58
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.y +150 -99
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.c +185 -15
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.c +301 -276
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.l +9 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.c +729 -228
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.c +768 -403
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h.in +231 -122
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.c +176 -84
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.h +26 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.c +57 -35
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.c +420 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.c +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile +48 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.c +200 -116
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.c +46 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.c +58 -27
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.c +3 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.h +12 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile +55 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.in +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.vc +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/runtest.c +274 -172
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test.h +24 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_array.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_buffer.c +14 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_match.c +32 -30
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse.c +37 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_error.c +36 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_roundtrip.c +16 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_record.c +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typecheck.c +706 -253
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_unify.c +132 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.c +703 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.c +335 -127
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndt_randtype.py +88 -71
- data/ext/ruby_ndtypes/ndtypes/python/ndt_support.py +0 -1
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/__init__.py +10 -13
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/_ndtypes.c +395 -314
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/pyndtypes.h +15 -33
- data/ext/ruby_ndtypes/ndtypes/python/test_ndtypes.py +340 -132
- data/ext/ruby_ndtypes/ndtypes/setup.py +11 -2
- data/ext/ruby_ndtypes/ruby_ndtypes.c +364 -241
- data/ext/ruby_ndtypes/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/ruby_ndtypes_internal.h +0 -1
- data/lib/ndtypes.rb +11 -0
- data/lib/ndtypes/version.rb +2 -2
- data/lib/ruby_ndtypes.so +0 -0
- data/ndtypes.gemspec +3 -0
- data/spec/ndtypes_spec.rb +6 -0
- metadata +98 -4
- data/ext/ruby_ndtypes/gc_guard.c +0 -36
- data/ext/ruby_ndtypes/gc_guard.h +0 -12
Binary file
|
@@ -128,13 +128,27 @@ mk_attr_from_seq(char *name, ndt_string_seq_t *seq, ndt_context_t *ctx)
|
|
128
128
|
/* Parser functions for creating types */
|
129
129
|
/*****************************************************************************/
|
130
130
|
|
131
|
-
|
131
|
+
/*
|
132
|
+
* NOTE: These functions should be considered internal. Many of these
|
133
|
+
* deallocate "const ndt_t *type" for convenience in grammar.y.
|
134
|
+
*/
|
135
|
+
|
136
|
+
const ndt_t *
|
137
|
+
mk_module(char *name, const ndt_t *type, ndt_context_t *ctx)
|
138
|
+
{
|
139
|
+
const ndt_t *t = ndt_module(name, type, ctx);
|
140
|
+
ndt_decref(type);
|
141
|
+
return t;
|
142
|
+
}
|
143
|
+
|
144
|
+
const ndt_t *
|
132
145
|
mk_function(ndt_type_seq_t *in, ndt_type_seq_t *out, ndt_context_t *ctx)
|
133
146
|
{
|
134
|
-
ndt_t *types[NDT_MAX_ARGS];
|
147
|
+
const ndt_t *types[NDT_MAX_ARGS];
|
135
148
|
int64_t nin = in->len;
|
136
149
|
int64_t nout = out->len;
|
137
150
|
int64_t nargs, i;
|
151
|
+
const ndt_t *t;
|
138
152
|
|
139
153
|
nargs = nin + nout;
|
140
154
|
|
@@ -148,30 +162,72 @@ mk_function(ndt_type_seq_t *in, ndt_type_seq_t *out, ndt_context_t *ctx)
|
|
148
162
|
|
149
163
|
for (i = 0; i < nin; i++) {
|
150
164
|
types[i] = in->ptr[i];
|
165
|
+
ndt_incref(types[i]);
|
151
166
|
}
|
152
167
|
|
153
168
|
for (i = 0; i < nout; i++) {
|
154
169
|
types[nin+i] = out->ptr[i];
|
170
|
+
ndt_incref(types[nin+i]);
|
155
171
|
}
|
156
172
|
|
157
|
-
|
158
|
-
|
159
|
-
ndt_free(out->ptr);
|
160
|
-
ndt_free(out);
|
173
|
+
ndt_type_seq_del(in);
|
174
|
+
ndt_type_seq_del(out);
|
161
175
|
|
162
|
-
|
176
|
+
t = ndt_function(types, nargs, nin, nout, ctx);
|
177
|
+
|
178
|
+
ndt_type_array_clear(types, nargs);
|
179
|
+
return t;
|
163
180
|
}
|
164
181
|
|
165
|
-
ndt_t *
|
166
|
-
|
182
|
+
const ndt_t *
|
183
|
+
mk_ellipsis_dim(char *name, const ndt_t *type, ndt_context_t *ctx)
|
167
184
|
{
|
168
|
-
ndt_t *t =
|
185
|
+
const ndt_t *t = ndt_ellipsis_dim(name, type, ctx);
|
186
|
+
ndt_decref(type);
|
187
|
+
return t;
|
188
|
+
}
|
189
|
+
|
190
|
+
const ndt_t *
|
191
|
+
mk_symbolic_dim(char *name, const ndt_t *type, ndt_context_t *ctx)
|
192
|
+
{
|
193
|
+
const ndt_t *t = ndt_symbolic_dim(name, type, ctx);
|
194
|
+
ndt_decref(type);
|
195
|
+
return t;
|
196
|
+
}
|
197
|
+
|
198
|
+
const ndt_t *
|
199
|
+
mk_array(const ndt_t *type, bool opt, ndt_context_t *ctx)
|
200
|
+
{
|
201
|
+
const ndt_t *t = ndt_array(type, opt, ctx);
|
202
|
+
ndt_decref(type);
|
203
|
+
return t;
|
204
|
+
}
|
205
|
+
|
206
|
+
const ndt_t *
|
207
|
+
mk_constr(char *name, const ndt_t *type, bool opt, ndt_context_t *ctx)
|
208
|
+
{
|
209
|
+
const ndt_t *t = ndt_constr(name, type, opt, ctx);
|
210
|
+
ndt_decref(type);
|
211
|
+
return t;
|
212
|
+
}
|
213
|
+
|
214
|
+
const ndt_t *
|
215
|
+
mk_ref(const ndt_t *type, bool opt, ndt_context_t *ctx)
|
216
|
+
{
|
217
|
+
const ndt_t *t = ndt_ref(type, opt, ctx);
|
218
|
+
ndt_decref(type);
|
219
|
+
return t;
|
220
|
+
}
|
169
221
|
|
170
|
-
|
222
|
+
const ndt_t *
|
223
|
+
mk_fortran(const ndt_t *type, ndt_context_t *ctx)
|
224
|
+
{
|
225
|
+
const ndt_t *t = ndt_to_fortran(type, ctx);
|
226
|
+
ndt_decref(type);
|
171
227
|
return t;
|
172
228
|
}
|
173
229
|
|
174
|
-
ndt_t *
|
230
|
+
const ndt_t *
|
175
231
|
mk_contig(char *name, ndt_t *type, ndt_context_t *ctx)
|
176
232
|
{
|
177
233
|
enum ndt_contig tag = RequireNA;
|
@@ -187,7 +243,7 @@ mk_contig(char *name, ndt_t *type, ndt_context_t *ctx)
|
|
187
243
|
if (tag == RequireNA) {
|
188
244
|
ndt_err_format(ctx, NDT_ParseError,
|
189
245
|
"valid contiguity modifiers are 'C' or 'F'");
|
190
|
-
|
246
|
+
ndt_decref(type);
|
191
247
|
return NULL;
|
192
248
|
}
|
193
249
|
|
@@ -199,13 +255,13 @@ mk_contig(char *name, ndt_t *type, ndt_context_t *ctx)
|
|
199
255
|
if (!ndt_is_c_contiguous(type)) {
|
200
256
|
ndt_err_format(ctx, NDT_ParseError,
|
201
257
|
"valid contiguity modifiers are 'C' or 'F'");
|
202
|
-
|
258
|
+
ndt_decref(type);
|
203
259
|
return NULL;
|
204
260
|
}
|
205
261
|
|
206
262
|
if (tag == RequireF) {
|
207
|
-
t = ndt_to_fortran(type, ctx);
|
208
|
-
|
263
|
+
t = (ndt_t *)ndt_to_fortran(type, ctx);
|
264
|
+
ndt_decref(type);
|
209
265
|
if (t == NULL) {
|
210
266
|
return NULL;
|
211
267
|
}
|
@@ -227,32 +283,36 @@ mk_contig(char *name, ndt_t *type, ndt_context_t *ctx)
|
|
227
283
|
default: {
|
228
284
|
ndt_err_format(ctx, NDT_ParseError,
|
229
285
|
"'C' or 'F' can only be applied to fixed or symbolic dimensions");
|
230
|
-
|
286
|
+
ndt_decref(type);
|
231
287
|
return NULL;
|
232
288
|
}
|
233
289
|
}
|
234
290
|
}
|
235
291
|
|
236
|
-
ndt_t *
|
237
|
-
mk_fixed_dim_from_shape(char *v, ndt_t *type, ndt_context_t *ctx)
|
292
|
+
const ndt_t *
|
293
|
+
mk_fixed_dim_from_shape(char *v, const ndt_t *type, ndt_context_t *ctx)
|
238
294
|
{
|
295
|
+
const ndt_t *t;
|
239
296
|
int64_t shape;
|
240
297
|
|
241
298
|
shape = ndt_strtoll(v, 0, INT64_MAX, ctx);
|
242
299
|
ndt_free(v);
|
243
300
|
|
244
301
|
if (ndt_err_occurred(ctx)) {
|
245
|
-
|
302
|
+
ndt_decref(type);
|
246
303
|
return NULL;
|
247
304
|
}
|
248
305
|
|
249
|
-
|
306
|
+
t = ndt_fixed_dim(type, shape, INT64_MAX, ctx);
|
307
|
+
ndt_decref(type);
|
308
|
+
return t;
|
250
309
|
}
|
251
310
|
|
252
|
-
ndt_t *
|
253
|
-
mk_fixed_dim_from_attrs(ndt_attr_seq_t *attrs, ndt_t *type, ndt_context_t *ctx)
|
311
|
+
const ndt_t *
|
312
|
+
mk_fixed_dim_from_attrs(ndt_attr_seq_t *attrs, const ndt_t *type, ndt_context_t *ctx)
|
254
313
|
{
|
255
314
|
static const attr_spec kwlist = {1, 2, {"shape", "step"}, {AttrInt64, AttrInt64}};
|
315
|
+
const ndt_t *t;
|
256
316
|
int64_t shape;
|
257
317
|
int64_t step = INT64_MAX;
|
258
318
|
int ret;
|
@@ -260,81 +320,100 @@ mk_fixed_dim_from_attrs(ndt_attr_seq_t *attrs, ndt_t *type, ndt_context_t *ctx)
|
|
260
320
|
ret = ndt_parse_attr(&kwlist, ctx, attrs, &shape, &step);
|
261
321
|
ndt_attr_seq_del(attrs);
|
262
322
|
if (ret < 0) {
|
263
|
-
|
323
|
+
ndt_decref(type);
|
264
324
|
return NULL;
|
265
325
|
}
|
266
326
|
|
267
|
-
|
327
|
+
t = ndt_fixed_dim(type, shape, step, ctx);
|
328
|
+
ndt_decref(type);
|
329
|
+
return t;
|
268
330
|
}
|
269
331
|
|
270
|
-
ndt_t *
|
271
|
-
mk_var_dim(
|
332
|
+
const ndt_t *
|
333
|
+
mk_var_dim(ndt_attr_seq_t *attrs, const ndt_t *type, bool opt, ndt_context_t *ctx)
|
272
334
|
{
|
273
335
|
static const attr_spec kwlist = {1, 2, {"offsets", "_noffsets"}, {AttrInt32List, AttrInt64}};
|
336
|
+
const ndt_t *t;
|
274
337
|
|
275
338
|
if (attrs) {
|
276
|
-
|
277
|
-
|
278
|
-
|
339
|
+
ndt_offsets_t *offsets;
|
340
|
+
int32_t *ptr;
|
341
|
+
int64_t n;
|
279
342
|
int ret;
|
280
343
|
|
281
|
-
ret = ndt_parse_attr(&kwlist, ctx, attrs, &
|
344
|
+
ret = ndt_parse_attr(&kwlist, ctx, attrs, &ptr, &n);
|
282
345
|
ndt_attr_seq_del(attrs);
|
283
346
|
if (ret < 0) {
|
284
|
-
|
347
|
+
ndt_decref(type);
|
285
348
|
return NULL;
|
286
349
|
}
|
287
350
|
|
288
|
-
if (
|
351
|
+
if (n > INT32_MAX) {
|
289
352
|
ndt_err_format(ctx, NDT_ValueError, "too many offsets");
|
290
|
-
|
291
|
-
|
353
|
+
ndt_free(ptr);
|
354
|
+
ndt_decref(type);
|
292
355
|
return NULL;
|
293
356
|
}
|
294
357
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
if (m->ndims >= NDT_MAX_DIM) {
|
300
|
-
ndt_err_format(ctx, NDT_RuntimeError, "too many dimensions");
|
301
|
-
ndt_del(type);
|
302
|
-
ndt_free(offsets);
|
303
|
-
return NULL;
|
304
|
-
}
|
305
|
-
m->noffsets[m->ndims] = (int32_t)noffsets;
|
306
|
-
m->offsets[m->ndims] = offsets;
|
307
|
-
m->ndims++;
|
308
|
-
|
309
|
-
t = ndt_var_dim(type, ExternalOffsets, (int32_t)noffsets, offsets, 0, NULL, ctx);
|
358
|
+
offsets = ndt_offsets_from_ptr(ptr, (int32_t)n, ctx);
|
359
|
+
if (offsets == NULL) {
|
360
|
+
ndt_decref(type);
|
361
|
+
return NULL;
|
310
362
|
}
|
311
363
|
|
312
|
-
|
364
|
+
t = ndt_var_dim(type, offsets, 0, NULL, opt, ctx);
|
365
|
+
ndt_decref_offsets(offsets);
|
313
366
|
}
|
314
367
|
else {
|
315
|
-
|
368
|
+
t = ndt_abstract_var_dim(type, opt, ctx);
|
316
369
|
}
|
370
|
+
|
371
|
+
ndt_decref(type);
|
372
|
+
return t;
|
317
373
|
}
|
318
374
|
|
319
|
-
ndt_t *
|
320
|
-
mk_var_ellipsis(ndt_t *type, ndt_context_t *ctx)
|
375
|
+
const ndt_t *
|
376
|
+
mk_var_ellipsis(const ndt_t *type, ndt_context_t *ctx)
|
321
377
|
{
|
322
|
-
|
378
|
+
const ndt_t *t;
|
379
|
+
char *s;
|
323
380
|
|
381
|
+
s = ndt_strdup("var", ctx);
|
324
382
|
if (s == NULL) {
|
383
|
+
ndt_decref(type);
|
325
384
|
return NULL;
|
326
385
|
}
|
327
386
|
|
328
|
-
|
387
|
+
t = ndt_ellipsis_dim(s, type, ctx);
|
388
|
+
ndt_decref(type);
|
389
|
+
return t;
|
390
|
+
}
|
391
|
+
|
392
|
+
const ndt_t *
|
393
|
+
mk_array_ellipsis(const ndt_t *type, ndt_context_t *ctx)
|
394
|
+
{
|
395
|
+
const ndt_t *t;
|
396
|
+
char *s;
|
397
|
+
|
398
|
+
s = ndt_strdup("array", ctx);
|
399
|
+
if (s == NULL) {
|
400
|
+
ndt_decref(type);
|
401
|
+
return NULL;
|
402
|
+
}
|
403
|
+
|
404
|
+
t = ndt_ellipsis_dim(s, type, ctx);
|
405
|
+
ndt_decref(type);
|
406
|
+
return t;
|
329
407
|
}
|
330
408
|
|
331
409
|
ndt_field_t *
|
332
|
-
mk_field(char *name, ndt_t *type, ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
410
|
+
mk_field(char *name, const ndt_t *type, ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
333
411
|
{
|
334
412
|
static const attr_spec kwlist = {0, 2, {"align", "pack"}, {AttrUint16Opt, AttrUint16Opt}};
|
335
413
|
uint16_opt_t align = {None, 0};
|
336
414
|
uint16_opt_t pack = {None, 0};
|
337
415
|
uint16_opt_t pad = {None, 0};
|
416
|
+
ndt_field_t *f;
|
338
417
|
|
339
418
|
if (attrs) {
|
340
419
|
int ret = ndt_parse_attr(&kwlist, ctx, attrs, &align, &pack);
|
@@ -342,22 +421,24 @@ mk_field(char *name, ndt_t *type, ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
|
342
421
|
|
343
422
|
if (ret < 0) {
|
344
423
|
ndt_free(name);
|
345
|
-
|
424
|
+
ndt_decref(type);
|
346
425
|
return NULL;
|
347
426
|
}
|
348
427
|
}
|
349
428
|
|
350
|
-
|
429
|
+
f = ndt_field(name, type, align, pack, pad, ctx);
|
430
|
+
ndt_decref(type);
|
431
|
+
return f;
|
351
432
|
}
|
352
433
|
|
353
|
-
ndt_t *
|
434
|
+
const ndt_t *
|
354
435
|
mk_tuple(enum ndt_variadic flag, ndt_field_seq_t *fields,
|
355
|
-
ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
436
|
+
ndt_attr_seq_t *attrs, bool opt, ndt_context_t *ctx)
|
356
437
|
{
|
357
438
|
static const attr_spec kwlist = {0, 2, {"align", "pack"}, {AttrUint16Opt, AttrUint16Opt}};
|
358
439
|
uint16_opt_t align = {None, 0};
|
359
440
|
uint16_opt_t pack = {None, 0};
|
360
|
-
ndt_t *t;
|
441
|
+
const ndt_t *t;
|
361
442
|
|
362
443
|
fields = ndt_field_seq_finalize(fields);
|
363
444
|
|
@@ -372,22 +453,22 @@ mk_tuple(enum ndt_variadic flag, ndt_field_seq_t *fields,
|
|
372
453
|
}
|
373
454
|
|
374
455
|
if (fields == NULL) {
|
375
|
-
return ndt_tuple(flag, NULL, 0, align, pack, ctx);
|
456
|
+
return ndt_tuple(flag, NULL, 0, align, pack, opt, ctx);
|
376
457
|
}
|
377
458
|
|
378
|
-
t = ndt_tuple(flag, fields->ptr, fields->len, align, pack, ctx);
|
379
|
-
|
459
|
+
t = ndt_tuple(flag, fields->ptr, fields->len, align, pack, opt, ctx);
|
460
|
+
ndt_field_seq_del(fields);
|
380
461
|
return t;
|
381
462
|
}
|
382
463
|
|
383
|
-
ndt_t *
|
464
|
+
const ndt_t *
|
384
465
|
mk_record(enum ndt_variadic flag, ndt_field_seq_t *fields,
|
385
|
-
ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
466
|
+
ndt_attr_seq_t *attrs, bool opt, ndt_context_t *ctx)
|
386
467
|
{
|
387
468
|
static const attr_spec kwlist = {0, 2, {"align", "pack"}, {AttrUint16Opt, AttrUint16Opt}};
|
388
469
|
uint16_opt_t align = {None, 0};
|
389
470
|
uint16_opt_t pack = {None, 0};
|
390
|
-
ndt_t *t;
|
471
|
+
const ndt_t *t;
|
391
472
|
|
392
473
|
fields = ndt_field_seq_finalize(fields);
|
393
474
|
|
@@ -402,28 +483,39 @@ mk_record(enum ndt_variadic flag, ndt_field_seq_t *fields,
|
|
402
483
|
}
|
403
484
|
|
404
485
|
if (fields == NULL) {
|
405
|
-
return ndt_record(flag, NULL, 0, align, pack, ctx);
|
486
|
+
return ndt_record(flag, NULL, 0, align, pack, opt, ctx);
|
406
487
|
}
|
407
488
|
|
408
|
-
t = ndt_record(flag, fields->ptr, fields->len, align, pack, ctx);
|
409
|
-
|
489
|
+
t = ndt_record(flag, fields->ptr, fields->len, align, pack, opt, ctx);
|
490
|
+
ndt_field_seq_del(fields);
|
491
|
+
return t;
|
492
|
+
}
|
493
|
+
|
494
|
+
const ndt_t *
|
495
|
+
mk_union(ndt_field_seq_t *fields, bool opt, ndt_context_t *ctx)
|
496
|
+
{
|
497
|
+
const ndt_t *t;
|
498
|
+
|
499
|
+
fields = ndt_field_seq_finalize(fields);
|
500
|
+
t = ndt_union(fields->ptr, fields->len, opt, ctx);
|
501
|
+
ndt_field_seq_del(fields);
|
410
502
|
return t;
|
411
503
|
}
|
412
504
|
|
413
|
-
ndt_t *
|
414
|
-
mk_categorical(ndt_value_seq_t *seq, ndt_context_t *ctx)
|
505
|
+
const ndt_t *
|
506
|
+
mk_categorical(ndt_value_seq_t *seq, bool opt, ndt_context_t *ctx)
|
415
507
|
{
|
416
|
-
ndt_t *t;
|
508
|
+
const ndt_t *t;
|
417
509
|
|
418
510
|
seq = ndt_value_seq_finalize(seq);
|
419
|
-
t = ndt_categorical(seq->ptr, seq->len, ctx);
|
511
|
+
t = ndt_categorical(seq->ptr, seq->len, opt, ctx);
|
420
512
|
|
421
513
|
ndt_free(seq);
|
422
514
|
return t;
|
423
515
|
}
|
424
516
|
|
425
|
-
ndt_t *
|
426
|
-
mk_fixed_string(char *v, enum ndt_encoding encoding, ndt_context_t *ctx)
|
517
|
+
const ndt_t *
|
518
|
+
mk_fixed_string(char *v, enum ndt_encoding encoding, bool opt, ndt_context_t *ctx)
|
427
519
|
{
|
428
520
|
int64_t size;
|
429
521
|
|
@@ -434,11 +526,11 @@ mk_fixed_string(char *v, enum ndt_encoding encoding, ndt_context_t *ctx)
|
|
434
526
|
return NULL;
|
435
527
|
}
|
436
528
|
|
437
|
-
return ndt_fixed_string(size, encoding, ctx);
|
529
|
+
return ndt_fixed_string(size, encoding, opt, ctx);
|
438
530
|
}
|
439
531
|
|
440
|
-
ndt_t *
|
441
|
-
mk_fixed_bytes(ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
532
|
+
const ndt_t *
|
533
|
+
mk_fixed_bytes(ndt_attr_seq_t *attrs, bool opt, ndt_context_t *ctx)
|
442
534
|
{
|
443
535
|
static const attr_spec kwlist = {1, 2, {"size", "align"}, {AttrInt64, AttrUint16Opt}};
|
444
536
|
uint16_opt_t align = {None, 0};
|
@@ -452,11 +544,11 @@ mk_fixed_bytes(ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
|
452
544
|
}
|
453
545
|
}
|
454
546
|
|
455
|
-
return ndt_fixed_bytes(datasize, align, ctx);
|
547
|
+
return ndt_fixed_bytes(datasize, align, opt, ctx);
|
456
548
|
}
|
457
549
|
|
458
|
-
ndt_t *
|
459
|
-
mk_bytes(ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
550
|
+
const ndt_t *
|
551
|
+
mk_bytes(ndt_attr_seq_t *attrs, bool opt, ndt_context_t *ctx)
|
460
552
|
{
|
461
553
|
static const attr_spec kwlist = {0, 1, {"align"}, {AttrUint16Opt}};
|
462
554
|
uint16_opt_t target_align = {None, 0};
|
@@ -469,5 +561,5 @@ mk_bytes(ndt_attr_seq_t *attrs, ndt_context_t *ctx)
|
|
469
561
|
}
|
470
562
|
}
|
471
563
|
|
472
|
-
return ndt_bytes(target_align, ctx);
|
564
|
+
return ndt_bytes(target_align, opt, ctx);
|
473
565
|
}
|