ndtypes 0.2.0dev5 → 0.2.0dev6
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/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
|
}
|