ndtypes 0.2.0dev4

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.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +50 -0
  3. data/Gemfile +2 -0
  4. data/History.md +0 -0
  5. data/README.md +19 -0
  6. data/Rakefile +125 -0
  7. data/ext/ruby_ndtypes/extconf.rb +55 -0
  8. data/ext/ruby_ndtypes/gc_guard.c +36 -0
  9. data/ext/ruby_ndtypes/gc_guard.h +12 -0
  10. data/ext/ruby_ndtypes/ndtypes/AUTHORS.txt +5 -0
  11. data/ext/ruby_ndtypes/ndtypes/INSTALL.txt +101 -0
  12. data/ext/ruby_ndtypes/ndtypes/LICENSE.txt +29 -0
  13. data/ext/ruby_ndtypes/ndtypes/MANIFEST.in +3 -0
  14. data/ext/ruby_ndtypes/ndtypes/Makefile.in +87 -0
  15. data/ext/ruby_ndtypes/ndtypes/README.rst +47 -0
  16. data/ext/ruby_ndtypes/ndtypes/config.guess +1530 -0
  17. data/ext/ruby_ndtypes/ndtypes/config.h.in +67 -0
  18. data/ext/ruby_ndtypes/ndtypes/config.sub +1782 -0
  19. data/ext/ruby_ndtypes/ndtypes/configure +5260 -0
  20. data/ext/ruby_ndtypes/ndtypes/configure.ac +161 -0
  21. data/ext/ruby_ndtypes/ndtypes/doc/Makefile +14 -0
  22. data/ext/ruby_ndtypes/ndtypes/doc/_static/copybutton.js +66 -0
  23. data/ext/ruby_ndtypes/ndtypes/doc/conf.py +26 -0
  24. data/ext/ruby_ndtypes/ndtypes/doc/grammar/grammar.rst +27 -0
  25. data/ext/ruby_ndtypes/ndtypes/doc/index.rst +56 -0
  26. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/context.rst +131 -0
  27. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/encodings.rst +68 -0
  28. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/fields-values.rst +175 -0
  29. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/functions.rst +72 -0
  30. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/index.rst +43 -0
  31. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/init.rst +48 -0
  32. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/io.rst +100 -0
  33. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/memory.rst +124 -0
  34. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/predicates.rst +110 -0
  35. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/typedef.rst +31 -0
  36. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/types.rst +594 -0
  37. data/ext/ruby_ndtypes/ndtypes/doc/libndtypes/util.rst +166 -0
  38. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/buffer-protocol.rst +27 -0
  39. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/index.rst +21 -0
  40. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/pattern-matching.rst +330 -0
  41. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/quickstart.rst +144 -0
  42. data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/types.rst +544 -0
  43. data/ext/ruby_ndtypes/ndtypes/doc/releases/index.rst +35 -0
  44. data/ext/ruby_ndtypes/ndtypes/install-sh +527 -0
  45. data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.in +271 -0
  46. data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.vc +269 -0
  47. data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.c +230 -0
  48. data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.c +268 -0
  49. data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.h +109 -0
  50. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile.in +73 -0
  51. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile.vc +70 -0
  52. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/README.txt +16 -0
  53. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.c +2179 -0
  54. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.h +134 -0
  55. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.y +428 -0
  56. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.c +2543 -0
  57. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.h +735 -0
  58. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.l +176 -0
  59. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.c +543 -0
  60. data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.c +110 -0
  61. data/ext/ruby_ndtypes/ndtypes/libndtypes/context.c +228 -0
  62. data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.c +634 -0
  63. data/ext/ruby_ndtypes/ndtypes/libndtypes/encodings.c +116 -0
  64. data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.c +288 -0
  65. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.c +3067 -0
  66. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.h +180 -0
  67. data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.y +417 -0
  68. data/ext/ruby_ndtypes/ndtypes/libndtypes/io.c +1658 -0
  69. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.c +2773 -0
  70. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.h +734 -0
  71. data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.l +222 -0
  72. data/ext/ruby_ndtypes/ndtypes/libndtypes/match.c +1132 -0
  73. data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.c +2323 -0
  74. data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h.in +893 -0
  75. data/ext/ruby_ndtypes/ndtypes/libndtypes/overflow.h +161 -0
  76. data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.c +473 -0
  77. data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.h +92 -0
  78. data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.c +246 -0
  79. data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.c +269 -0
  80. data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.h +197 -0
  81. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile.in +48 -0
  82. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile.vc +46 -0
  83. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.c +1007 -0
  84. data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.c +442 -0
  85. data/ext/ruby_ndtypes/ndtypes/libndtypes/slice.h +42 -0
  86. data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.c +238 -0
  87. data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.h +50 -0
  88. data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.c +371 -0
  89. data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.h +100 -0
  90. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.in +55 -0
  91. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.vc +45 -0
  92. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/alloc_fail.c +82 -0
  93. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/alloc_fail.h +49 -0
  94. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/runtest.c +1657 -0
  95. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test.h +85 -0
  96. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_array.c +115 -0
  97. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_buffer.c +137 -0
  98. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_indent.c +201 -0
  99. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_match.c +2397 -0
  100. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_numba.c +57 -0
  101. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse.c +349 -0
  102. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_error.c +27839 -0
  103. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_roundtrip.c +350 -0
  104. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_record.c +231 -0
  105. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typecheck.c +375 -0
  106. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typedef.c +65 -0
  107. data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/valgrind.supp +30 -0
  108. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/bench.c +79 -0
  109. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/indent.c +94 -0
  110. data/ext/ruby_ndtypes/ndtypes/libndtypes/tools/print_ast.c +96 -0
  111. data/ext/ruby_ndtypes/ndtypes/libndtypes/util.c +474 -0
  112. data/ext/ruby_ndtypes/ndtypes/libndtypes/values.c +228 -0
  113. data/ext/ruby_ndtypes/ndtypes/python/bench.py +49 -0
  114. data/ext/ruby_ndtypes/ndtypes/python/ndt_randtype.py +409 -0
  115. data/ext/ruby_ndtypes/ndtypes/python/ndt_support.py +14 -0
  116. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/__init__.py +70 -0
  117. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/_ndtypes.c +1332 -0
  118. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/docstrings.h +319 -0
  119. data/ext/ruby_ndtypes/ndtypes/python/ndtypes/pyndtypes.h +154 -0
  120. data/ext/ruby_ndtypes/ndtypes/python/test_ndtypes.py +1977 -0
  121. data/ext/ruby_ndtypes/ndtypes/setup.py +288 -0
  122. data/ext/ruby_ndtypes/ndtypes/vcbuild/INSTALL.txt +41 -0
  123. data/ext/ruby_ndtypes/ndtypes/vcbuild/runtest32.bat +15 -0
  124. data/ext/ruby_ndtypes/ndtypes/vcbuild/runtest64.bat +13 -0
  125. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcbuild32.bat +38 -0
  126. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcbuild64.bat +38 -0
  127. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcclean.bat +13 -0
  128. data/ext/ruby_ndtypes/ndtypes/vcbuild/vcdistclean.bat +14 -0
  129. data/ext/ruby_ndtypes/ruby_ndtypes.c +1003 -0
  130. data/ext/ruby_ndtypes/ruby_ndtypes.h +37 -0
  131. data/ext/ruby_ndtypes/ruby_ndtypes_internal.h +28 -0
  132. data/lib/ndtypes.rb +45 -0
  133. data/lib/ndtypes/errors.rb +2 -0
  134. data/lib/ndtypes/version.rb +6 -0
  135. data/ndtypes.gemspec +47 -0
  136. data/spec/gc_table_spec.rb +10 -0
  137. data/spec/ndtypes_spec.rb +289 -0
  138. data/spec/spec_helper.rb +241 -0
  139. metadata +242 -0
@@ -0,0 +1,180 @@
1
+ /* A Bison parser, made by GNU Bison 3.0.4. */
2
+
3
+ /* Bison interface for Yacc-like parsers in C
4
+
5
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
+
20
+ /* As a special exception, you may create a larger work that contains
21
+ part or all of the Bison parser skeleton and distribute that work
22
+ under terms of your choice, so long as that work isn't itself a
23
+ parser generator using the skeleton or a modified version thereof
24
+ as a parser skeleton. Alternatively, if you modify or redistribute
25
+ the parser skeleton itself, you may (at your option) remove this
26
+ special exception, which will cause the skeleton and the resulting
27
+ Bison output files to be licensed under the GNU General Public
28
+ License without this special exception.
29
+
30
+ This special exception was added by the Free Software Foundation in
31
+ version 2.2 of Bison. */
32
+
33
+ #ifndef YY_NDT_YY_GRAMMAR_H_INCLUDED
34
+ # define YY_NDT_YY_GRAMMAR_H_INCLUDED
35
+ /* Debug traces. */
36
+ #ifndef YYDEBUG
37
+ # define YYDEBUG 0
38
+ #endif
39
+ #if YYDEBUG
40
+ extern int ndt_yydebug;
41
+ #endif
42
+ /* "%code requires" blocks. */
43
+ #line 57 "grammar.y" /* yacc.c:1909 */
44
+
45
+ #include "ndtypes.h"
46
+ #include "seq.h"
47
+ #include "attr.h"
48
+ #include "parsefuncs.h"
49
+ #define YY_TYPEDEF_YY_SCANNER_T
50
+ typedef void * yyscan_t;
51
+
52
+ #line 53 "grammar.h" /* yacc.c:1909 */
53
+
54
+ /* Token type. */
55
+ #ifndef YYTOKENTYPE
56
+ # define YYTOKENTYPE
57
+ enum yytokentype
58
+ {
59
+ ENDMARKER = 0,
60
+ ANY_KIND = 258,
61
+ SCALAR_KIND = 259,
62
+ VOID = 260,
63
+ BOOL = 261,
64
+ SIGNED_KIND = 262,
65
+ INT8 = 263,
66
+ INT16 = 264,
67
+ INT32 = 265,
68
+ INT64 = 266,
69
+ UNSIGNED_KIND = 267,
70
+ UINT8 = 268,
71
+ UINT16 = 269,
72
+ UINT32 = 270,
73
+ UINT64 = 271,
74
+ FLOAT_KIND = 272,
75
+ FLOAT16 = 273,
76
+ FLOAT32 = 274,
77
+ FLOAT64 = 275,
78
+ COMPLEX_KIND = 276,
79
+ COMPLEX32 = 277,
80
+ COMPLEX64 = 278,
81
+ COMPLEX128 = 279,
82
+ CATEGORICAL = 280,
83
+ NA = 281,
84
+ INTPTR = 282,
85
+ UINTPTR = 283,
86
+ SIZE = 284,
87
+ CHAR = 285,
88
+ STRING = 286,
89
+ FIXED_STRING_KIND = 287,
90
+ FIXED_STRING = 288,
91
+ BYTES = 289,
92
+ FIXED_BYTES_KIND = 290,
93
+ FIXED_BYTES = 291,
94
+ REF = 292,
95
+ FIXED = 293,
96
+ VAR = 294,
97
+ COMMA = 295,
98
+ COLON = 296,
99
+ LPAREN = 297,
100
+ RPAREN = 298,
101
+ LBRACE = 299,
102
+ RBRACE = 300,
103
+ LBRACK = 301,
104
+ RBRACK = 302,
105
+ STAR = 303,
106
+ ELLIPSIS = 304,
107
+ RARROW = 305,
108
+ EQUAL = 306,
109
+ LESS = 307,
110
+ GREATER = 308,
111
+ QUESTIONMARK = 309,
112
+ BANG = 310,
113
+ AMPERSAND = 311,
114
+ BAR = 312,
115
+ ERRTOKEN = 313,
116
+ INTEGER = 314,
117
+ FLOATNUMBER = 315,
118
+ STRINGLIT = 316,
119
+ NAME_LOWER = 317,
120
+ NAME_UPPER = 318,
121
+ NAME_OTHER = 319
122
+ };
123
+ #endif
124
+
125
+ /* Value type. */
126
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
127
+
128
+ union YYSTYPE
129
+ {
130
+ #line 86 "grammar.y" /* yacc.c:1909 */
131
+
132
+ ndt_t *ndt;
133
+ ndt_field_t *field;
134
+ ndt_field_seq_t *field_seq;
135
+ ndt_value_t *typed_value;
136
+ ndt_value_seq_t *typed_value_seq;
137
+ ndt_attr_t *attribute;
138
+ ndt_attr_seq_t *attribute_seq;
139
+ enum ndt_variadic variadic_flag;
140
+ enum ndt_encoding encoding;
141
+ uint32_t uint32;
142
+ char *string;
143
+ ndt_string_seq_t *string_seq;
144
+ ndt_type_seq_t *type_seq;
145
+
146
+ #line 147 "grammar.h" /* yacc.c:1909 */
147
+ };
148
+
149
+ typedef union YYSTYPE YYSTYPE;
150
+ # define YYSTYPE_IS_TRIVIAL 1
151
+ # define YYSTYPE_IS_DECLARED 1
152
+ #endif
153
+
154
+ /* Location type. */
155
+ #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
156
+ typedef struct YYLTYPE YYLTYPE;
157
+ struct YYLTYPE
158
+ {
159
+ int first_line;
160
+ int first_column;
161
+ int last_line;
162
+ int last_column;
163
+ };
164
+ # define YYLTYPE_IS_DECLARED 1
165
+ # define YYLTYPE_IS_TRIVIAL 1
166
+ #endif
167
+
168
+
169
+
170
+ int ndt_yyparse (yyscan_t scanner, ndt_t **ast, ndt_meta_t *meta, ndt_context_t *ctx);
171
+ /* "%code provides" blocks. */
172
+ #line 66 "grammar.y" /* yacc.c:1909 */
173
+
174
+ #define YY_DECL extern int ndt_yylexfunc(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner, ndt_context_t *ctx)
175
+ extern int ndt_yylexfunc(YYSTYPE *, YYLTYPE *, yyscan_t, ndt_context_t *);
176
+ void yyerror(YYLTYPE *loc, yyscan_t scanner, ndt_t **ast, ndt_meta_t *meta, ndt_context_t *ctx, const char *msg);
177
+
178
+ #line 179 "grammar.h" /* yacc.c:1909 */
179
+
180
+ #endif /* !YY_NDT_YY_GRAMMAR_H_INCLUDED */
@@ -0,0 +1,417 @@
1
+ %{
2
+ /*
3
+ * BSD 3-Clause License
4
+ *
5
+ * Copyright (c) 2017-2018, plures
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
15
+ * this list of conditions and the following disclaimer in the documentation
16
+ * and/or other materials provided with the distribution.
17
+ *
18
+ * 3. Neither the name of the copyright holder nor the names of its
19
+ * contributors may be used to endorse or promote products derived from
20
+ * this software without specific prior written permission.
21
+ *
22
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ */
33
+
34
+
35
+ #include "grammar.h"
36
+
37
+
38
+ void
39
+ yyerror(YYLTYPE *loc, yyscan_t scanner, ndt_t **ast, ndt_meta_t *meta,
40
+ ndt_context_t *ctx, const char *msg)
41
+ {
42
+ (void)scanner;
43
+ (void)ast;
44
+ (void)meta;
45
+
46
+ ndt_err_format(ctx, NDT_ParseError, "%d:%d: %s", loc->first_line,
47
+ loc->first_column, msg);
48
+ }
49
+
50
+ int
51
+ yylex(YYSTYPE *val, YYLTYPE *loc, yyscan_t scanner, ndt_context_t *ctx)
52
+ {
53
+ return ndt_yylexfunc(val, loc, scanner, ctx);
54
+ }
55
+ %}
56
+
57
+ %code requires {
58
+ #include "ndtypes.h"
59
+ #include "seq.h"
60
+ #include "attr.h"
61
+ #include "parsefuncs.h"
62
+ #define YY_TYPEDEF_YY_SCANNER_T
63
+ typedef void * yyscan_t;
64
+ }
65
+
66
+ %code provides {
67
+ #define YY_DECL extern int ndt_yylexfunc(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner, ndt_context_t *ctx)
68
+ extern int ndt_yylexfunc(YYSTYPE *, YYLTYPE *, yyscan_t, ndt_context_t *);
69
+ void yyerror(YYLTYPE *loc, yyscan_t scanner, ndt_t **ast, ndt_meta_t *meta, ndt_context_t *ctx, const char *msg);
70
+ }
71
+
72
+ %pure-parser
73
+ %error-verbose
74
+
75
+ %locations
76
+ %initial-action {
77
+ @$.first_line = 1;
78
+ @$.first_column = 1;
79
+ @$.last_line = 1;
80
+ @$.last_column = 1;
81
+ }
82
+
83
+ %lex-param {yyscan_t scanner} {ndt_context_t *ctx}
84
+ %parse-param {yyscan_t scanner} {ndt_t **ast} {ndt_meta_t *meta} {ndt_context_t *ctx}
85
+
86
+ %union {
87
+ ndt_t *ndt;
88
+ ndt_field_t *field;
89
+ ndt_field_seq_t *field_seq;
90
+ ndt_value_t *typed_value;
91
+ ndt_value_seq_t *typed_value_seq;
92
+ ndt_attr_t *attribute;
93
+ ndt_attr_seq_t *attribute_seq;
94
+ enum ndt_variadic variadic_flag;
95
+ enum ndt_encoding encoding;
96
+ uint32_t uint32;
97
+ char *string;
98
+ ndt_string_seq_t *string_seq;
99
+ ndt_type_seq_t *type_seq;
100
+ }
101
+
102
+ %start input
103
+ %type <ndt> input
104
+ %type <ndt> datashape
105
+ %type <ndt> datashape_or_module
106
+ %type <ndt> datashape_with_ellipsis
107
+ %type <ndt> fixed_ellipsis
108
+ %type <ndt> dimensions
109
+ %type <ndt> dimensions_nooption
110
+ %type <ndt> dimensions_tail
111
+ %type <ndt> dtype
112
+ %type <ndt> scalar
113
+ %type <ndt> signed
114
+ %type <ndt> unsigned
115
+ %type <ndt> ieee_float
116
+ %type <ndt> ieee_complex
117
+ %type <ndt> alias
118
+ %type <ndt> character
119
+ %type <ndt> string
120
+ %type <ndt> fixed_string
121
+ %type <ndt> bytes
122
+ %type <ndt> fixed_bytes
123
+ %type <ndt> ref
124
+
125
+ %type <ndt> tuple_type
126
+ %type <field> tuple_field
127
+ %type <field_seq> tuple_field_seq
128
+
129
+ %type <ndt> record_type
130
+ %type <field> record_field
131
+ %type <field_seq> record_field_seq
132
+ %type <string> record_field_name
133
+
134
+ %type <ndt> categorical
135
+ %type <typed_value> typed_value
136
+ %type <typed_value_seq> typed_value_seq
137
+
138
+ %type <string> untyped_value
139
+ %type <string_seq> untyped_value_seq
140
+
141
+ %type <type_seq> type_seq
142
+ %type <type_seq> type_seq_or_void
143
+
144
+ %type <attribute> attribute
145
+ %type <attribute_seq> attribute_seq
146
+
147
+ %type <attribute_seq> arguments_opt
148
+
149
+ %type <ndt> function_type
150
+
151
+ %type <uint32> endian_opt
152
+ %type <encoding> encoding
153
+ %type <variadic_flag> variadic_flag
154
+ %type <variadic_flag> comma_variadic_flag
155
+
156
+ %token
157
+ ANY_KIND
158
+ SCALAR_KIND
159
+ VOID
160
+ BOOL
161
+ SIGNED_KIND INT8 INT16 INT32 INT64
162
+ UNSIGNED_KIND UINT8 UINT16 UINT32 UINT64
163
+ FLOAT_KIND FLOAT16 FLOAT32 FLOAT64
164
+ COMPLEX_KIND COMPLEX32 COMPLEX64 COMPLEX128
165
+ CATEGORICAL NA
166
+ INTPTR UINTPTR SIZE
167
+ CHAR
168
+ STRING FIXED_STRING_KIND FIXED_STRING
169
+ BYTES FIXED_BYTES_KIND FIXED_BYTES
170
+ REF
171
+
172
+ FIXED VAR
173
+
174
+ COMMA COLON LPAREN RPAREN LBRACE RBRACE LBRACK RBRACK STAR ELLIPSIS
175
+ RARROW EQUAL LESS GREATER QUESTIONMARK BANG AMPERSAND BAR
176
+ ERRTOKEN
177
+
178
+ %token <string>
179
+ INTEGER FLOATNUMBER STRINGLIT
180
+ NAME_LOWER NAME_UPPER NAME_OTHER
181
+
182
+ %token ENDMARKER 0 "end of file"
183
+
184
+ %destructor { ndt_del($$); } <ndt>
185
+ %destructor { ndt_field_del($$); } <field>
186
+ %destructor { ndt_field_seq_del($$); } <field_seq>
187
+ %destructor { ndt_value_del($$); } <typed_value>
188
+ %destructor { ndt_value_seq_del($$); } <typed_value_seq>
189
+ %destructor { ndt_attr_del($$); } <attribute>
190
+ %destructor { ndt_attr_seq_del($$); } <attribute_seq>
191
+ %destructor { ndt_free($$); } <string>
192
+ %destructor { ndt_string_seq_del($$); } <string_seq>
193
+ %destructor { ndt_type_seq_del($$); } <type_seq>
194
+
195
+ %%
196
+
197
+ input:
198
+ datashape_or_module ENDMARKER { $$ = $1; *ast = $$; YYACCEPT; }
199
+
200
+ /* types (optionally with module qualifier) */
201
+ datashape_or_module:
202
+ datashape_with_ellipsis { $$ = $1; }
203
+ | function_type { $$ = $1; }
204
+ | NAME_UPPER COLON COLON datashape_with_ellipsis { $$ = ndt_module($1, $4, ctx); if ($$ == NULL) YYABORT; }
205
+
206
+ /* types */
207
+ datashape_with_ellipsis:
208
+ datashape { $$ = $1; }
209
+ | fixed_ellipsis { $$ = $1; }
210
+ | NAME_UPPER LBRACK fixed_ellipsis RBRACK { $$ = mk_contig($1, $3, ctx); if ($$ == NULL) YYABORT; }
211
+ | VAR ELLIPSIS STAR dtype { $$ = mk_var_ellipsis($4, ctx); if ($$ == NULL) YYABORT; }
212
+ | VAR ELLIPSIS STAR QUESTIONMARK dtype { $$ = mk_var_ellipsis(ndt_option($5), ctx); if ($$ == NULL) YYABORT; }
213
+
214
+ fixed_ellipsis:
215
+ ELLIPSIS STAR dimensions_tail { $$ = ndt_ellipsis_dim(NULL, $3, ctx); if ($$ == NULL) YYABORT; }
216
+ | NAME_UPPER ELLIPSIS STAR dimensions_tail { $$ = ndt_ellipsis_dim($1, $4, ctx); if ($$ == NULL) YYABORT; }
217
+
218
+ datashape:
219
+ dimensions { $$ = $1; }
220
+ | dtype { $$ = $1; }
221
+ | QUESTIONMARK dtype { $$ = ndt_option($2); if ($$ == NULL) YYABORT; }
222
+
223
+ dimensions:
224
+ dimensions_nooption { $$ = $1; }
225
+ | QUESTIONMARK dimensions_nooption { $$ = ndt_option($2); if ($$ == NULL) YYABORT; }
226
+ | NAME_UPPER LBRACK dimensions RBRACK { $$ = mk_contig($1, $3, ctx); if ($$ == NULL) YYABORT; }
227
+ | BANG dimensions { $$ = mk_fortran($2, ctx); if ($$ == NULL) YYABORT; }
228
+
229
+ dimensions_nooption:
230
+ INTEGER STAR dimensions_tail { $$ = mk_fixed_dim_from_shape($1, $3, ctx); if ($$ == NULL) YYABORT; }
231
+ | FIXED LPAREN attribute_seq RPAREN STAR dimensions_tail { $$ = mk_fixed_dim_from_attrs($3, $6, ctx); if ($$ == NULL) YYABORT; }
232
+ | NAME_UPPER STAR dimensions_tail { $$ = ndt_symbolic_dim($1, $3, ctx); if ($$ == NULL) YYABORT; }
233
+ | VAR arguments_opt STAR dimensions_tail { $$ = mk_var_dim(meta, $2, $4, ctx); if ($$ == NULL) YYABORT; }
234
+
235
+ dimensions_tail:
236
+ dtype { $$ = $1; }
237
+ | QUESTIONMARK dtype { $$ = ndt_option($2); if ($$ == NULL) YYABORT; }
238
+ | dimensions { $$ = $1; }
239
+
240
+ dtype:
241
+ ANY_KIND { $$ = ndt_any_kind(ctx); if ($$ == NULL) YYABORT; }
242
+ | SCALAR_KIND { $$ = ndt_scalar_kind(ctx); if ($$ == NULL) YYABORT; }
243
+ | scalar { $$ = $1; }
244
+ | tuple_type { $$ = $1; }
245
+ | record_type { $$ = $1; }
246
+ | NAME_LOWER { $$ = ndt_nominal($1, NULL, ctx); if ($$ == NULL) YYABORT; }
247
+ | NAME_UPPER LPAREN datashape RPAREN { $$ = ndt_constr($1, $3, ctx); if ($$ == NULL) YYABORT; }
248
+ | NAME_UPPER LPAREN attribute_seq RPAREN { (void)$1; (void)$3; ndt_free($1); ndt_attr_seq_del($3); $$ = NULL;
249
+ ndt_err_format(ctx, NDT_NotImplementedError, "general attributes are not implemented");
250
+ YYABORT; }
251
+ | NAME_UPPER { $$ = ndt_typevar($1, ctx); if ($$ == NULL) YYABORT; }
252
+
253
+ scalar:
254
+ endian_opt BOOL { $$ = ndt_primitive(Bool, $1, ctx); if ($$ == NULL) YYABORT; }
255
+ | SIGNED_KIND { $$ = ndt_signed_kind(ctx); if ($$ == NULL) YYABORT; }
256
+ | signed { $$ = $1; }
257
+ | UNSIGNED_KIND { $$ = ndt_unsigned_kind(ctx); if ($$ == NULL) YYABORT; }
258
+ | unsigned { $$ = $1; }
259
+ | FLOAT_KIND { $$ = ndt_float_kind(ctx); if ($$ == NULL) YYABORT; }
260
+ | ieee_float { $$ = $1; }
261
+ | COMPLEX_KIND { $$ = ndt_complex_kind(ctx); if ($$ == NULL) YYABORT; }
262
+ | ieee_complex { $$ = $1; }
263
+ | alias { $$ = $1; }
264
+ | character { $$ = $1; }
265
+ | string { $$ = $1; }
266
+ | FIXED_STRING_KIND { $$ = ndt_fixed_string_kind(ctx); if ($$ == NULL) YYABORT; }
267
+ | fixed_string { $$ = $1; }
268
+ | bytes { $$ = $1; }
269
+ | FIXED_BYTES_KIND { $$ = ndt_fixed_bytes_kind(ctx); if ($$ == NULL) YYABORT; }
270
+ | fixed_bytes { $$ = $1; }
271
+ | categorical { $$ = $1; }
272
+ | ref { $$ = $1; }
273
+
274
+ signed:
275
+ endian_opt INT8 { $$ = ndt_primitive(Int8, $1, ctx); if ($$ == NULL) YYABORT; }
276
+ | endian_opt INT16 { $$ = ndt_primitive(Int16, $1, ctx); if ($$ == NULL) YYABORT; }
277
+ | endian_opt INT32 { $$ = ndt_primitive(Int32, $1, ctx); if ($$ == NULL) YYABORT; }
278
+ | endian_opt INT64 { $$ = ndt_primitive(Int64, $1, ctx); if ($$ == NULL) YYABORT; }
279
+
280
+ unsigned:
281
+ endian_opt UINT8 { $$ = ndt_primitive(Uint8, $1, ctx); if ($$ == NULL) YYABORT; }
282
+ | endian_opt UINT16 { $$ = ndt_primitive(Uint16, $1, ctx); if ($$ == NULL) YYABORT; }
283
+ | endian_opt UINT32 { $$ = ndt_primitive(Uint32, $1, ctx); if ($$ == NULL) YYABORT; }
284
+ | endian_opt UINT64 { $$ = ndt_primitive(Uint64, $1, ctx); if ($$ == NULL) YYABORT; }
285
+
286
+ ieee_float:
287
+ endian_opt FLOAT16 { $$ = ndt_primitive(Float16, $1, ctx); if ($$ == NULL) YYABORT; }
288
+ | endian_opt FLOAT32 { $$ = ndt_primitive(Float32, $1, ctx); if ($$ == NULL) YYABORT; }
289
+ | endian_opt FLOAT64 { $$ = ndt_primitive(Float64, $1, ctx); if ($$ == NULL) YYABORT; }
290
+
291
+ ieee_complex:
292
+ endian_opt COMPLEX32 { $$ = ndt_primitive(Complex32, $1, ctx); if ($$ == NULL) YYABORT; }
293
+ | endian_opt COMPLEX64 { $$ = ndt_primitive(Complex64, $1, ctx); if ($$ == NULL) YYABORT; }
294
+ | endian_opt COMPLEX128 { $$ = ndt_primitive(Complex128, $1, ctx); if ($$ == NULL) YYABORT; }
295
+
296
+ alias:
297
+ /* machine dependent */
298
+ endian_opt INTPTR { $$ = ndt_from_alias(Intptr, $1, ctx); if ($$ == NULL) YYABORT; }
299
+ | endian_opt UINTPTR { $$ = ndt_from_alias(Uintptr, $1, ctx); if ($$ == NULL) YYABORT; }
300
+ | endian_opt SIZE { $$ = ndt_from_alias(Size, $1, ctx); if ($$ == NULL) YYABORT; }
301
+
302
+ character:
303
+ CHAR { $$ = ndt_char(Utf32, ctx); if ($$ == NULL) YYABORT; }
304
+ | CHAR LPAREN encoding RPAREN { $$ = ndt_char($3, ctx); if ($$ == NULL) YYABORT; }
305
+
306
+ string:
307
+ STRING { $$ = ndt_string(ctx); if ($$ == NULL) YYABORT; }
308
+
309
+ fixed_string:
310
+ FIXED_STRING LPAREN INTEGER RPAREN { $$ = mk_fixed_string($3, Utf8, ctx); if ($$ == NULL) YYABORT; }
311
+ | FIXED_STRING LPAREN INTEGER COMMA encoding RPAREN { $$ = mk_fixed_string($3, $5, ctx); if ($$ == NULL) YYABORT; }
312
+
313
+ endian_opt:
314
+ %empty { $$ = 0; }
315
+ | EQUAL { $$ = NDT_SYS_BIG_ENDIAN ? NDT_BIG_ENDIAN : NDT_LITTLE_ENDIAN; }
316
+ | LESS { $$ = NDT_LITTLE_ENDIAN; }
317
+ | GREATER { $$ = NDT_BIG_ENDIAN; }
318
+ | BAR { $$ = 0; }
319
+
320
+ encoding:
321
+ STRINGLIT { $$ = encoding_from_string($1, ctx); if (ndt_err_occurred(ctx)) YYABORT; }
322
+
323
+ bytes:
324
+ BYTES arguments_opt { $$ = mk_bytes($2, ctx); if ($$ == NULL) YYABORT; }
325
+
326
+ fixed_bytes:
327
+ FIXED_BYTES LPAREN attribute_seq RPAREN { $$ = mk_fixed_bytes($3, ctx); if ($$ == NULL) YYABORT; }
328
+
329
+ ref:
330
+ REF LPAREN datashape RPAREN { $$ = ndt_ref($3, ctx); if ($$ == NULL) YYABORT; }
331
+ | AMPERSAND datashape { $$ = ndt_ref($2, ctx); if ($$ == NULL) YYABORT; }
332
+
333
+ categorical:
334
+ CATEGORICAL LPAREN typed_value_seq RPAREN { $$ = mk_categorical($3, ctx); if ($$ == NULL) YYABORT; }
335
+
336
+ typed_value_seq:
337
+ typed_value { $$ = ndt_value_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
338
+ | typed_value_seq COMMA typed_value { $$ = ndt_value_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }
339
+
340
+ typed_value:
341
+ INTEGER { $$ = ndt_value_from_number(ValInt64, $1, ctx); if ($$ == NULL) YYABORT; }
342
+ | FLOATNUMBER { $$ = ndt_value_from_number(ValFloat64, $1, ctx); if ($$ == NULL) YYABORT; }
343
+ | STRINGLIT { $$ = ndt_value_from_string($1, ctx); if ($$ == NULL) YYABORT; }
344
+ | NA { $$ = ndt_value_na(ctx); if ($$ == NULL) YYABORT; }
345
+
346
+ variadic_flag:
347
+ %empty { $$ = Nonvariadic; }
348
+ | ELLIPSIS { $$ = Variadic; }
349
+
350
+ comma_variadic_flag:
351
+ %empty { $$ = Nonvariadic; }
352
+ | COMMA { $$ = Nonvariadic; }
353
+ | COMMA ELLIPSIS { $$ = Variadic; }
354
+
355
+ tuple_type:
356
+ LPAREN variadic_flag RPAREN { $$ = mk_tuple($2, NULL, NULL, ctx); if ($$ == NULL) YYABORT; }
357
+ | LPAREN tuple_field_seq comma_variadic_flag RPAREN { $$ = mk_tuple($3, $2, NULL, ctx); if ($$ == NULL) YYABORT; }
358
+ | LPAREN tuple_field_seq COMMA attribute_seq RPAREN { $$ = mk_tuple(Nonvariadic, $2, $4, ctx); if ($$ == NULL) YYABORT; }
359
+
360
+ tuple_field_seq:
361
+ tuple_field { $$ = ndt_field_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
362
+ | tuple_field_seq COMMA tuple_field { $$ = ndt_field_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }
363
+
364
+ tuple_field:
365
+ datashape { $$ = mk_field(NULL, $1, NULL, ctx); if ($$ == NULL) YYABORT; }
366
+ | datashape BAR attribute_seq BAR { $$ = mk_field(NULL, $1, $3, ctx); if ($$ == NULL) YYABORT; }
367
+
368
+ record_type:
369
+ LBRACE variadic_flag RBRACE { $$ = mk_record($2, NULL, NULL, ctx); if ($$ == NULL) YYABORT; }
370
+ | LBRACE record_field_seq comma_variadic_flag RBRACE { $$ = mk_record($3, $2, NULL, ctx); if ($$ == NULL) YYABORT; }
371
+ | LBRACE record_field_seq COMMA attribute_seq RBRACE { $$ = mk_record(Nonvariadic, $2, $4, ctx); if ($$ == NULL) YYABORT; }
372
+
373
+ record_field_seq:
374
+ record_field { $$ = ndt_field_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
375
+ | record_field_seq COMMA record_field { $$ = ndt_field_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }
376
+
377
+ record_field:
378
+ record_field_name COLON datashape { $$ = mk_field($1, $3, NULL, ctx); if ($$ == NULL) YYABORT; }
379
+ | record_field_name COLON datashape BAR attribute_seq BAR { $$ = mk_field($1, $3, $5, ctx); if ($$ == NULL) YYABORT; }
380
+
381
+ record_field_name:
382
+ NAME_LOWER { $$ = $1; if ($$ == NULL) YYABORT; }
383
+ | NAME_UPPER { $$ = $1; if ($$ == NULL) YYABORT; }
384
+ | NAME_OTHER { $$ = $1; if ($$ == NULL) YYABORT; }
385
+
386
+ arguments_opt:
387
+ %empty { $$ = NULL; }
388
+ | LPAREN attribute_seq RPAREN { $$ = $2; if ($$ == NULL) YYABORT; }
389
+
390
+ attribute_seq:
391
+ attribute { $$ = ndt_attr_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
392
+ | attribute_seq COMMA attribute { $$ = ndt_attr_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }
393
+
394
+ attribute:
395
+ NAME_LOWER EQUAL untyped_value { $$ = mk_attr($1, $3, ctx); if ($$ == NULL) YYABORT; }
396
+ | NAME_LOWER EQUAL LBRACK untyped_value_seq RBRACK { $$ = mk_attr_from_seq($1, $4, ctx); if ($$ == NULL) YYABORT; }
397
+
398
+ untyped_value_seq:
399
+ untyped_value { $$ = ndt_string_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
400
+ | untyped_value_seq COMMA untyped_value { $$ = ndt_string_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }
401
+
402
+ untyped_value:
403
+ NAME_LOWER { $$ = $1; if ($$ == NULL) YYABORT; }
404
+ | INTEGER { $$ = $1; if ($$ == NULL) YYABORT; }
405
+ | FLOATNUMBER { $$ = $1; if ($$ == NULL) YYABORT; }
406
+ | STRINGLIT { $$ = $1; if ($$ == NULL) YYABORT; }
407
+
408
+ function_type:
409
+ type_seq_or_void RARROW type_seq_or_void { $$ = mk_function($1, $3, ctx); if ($$ == NULL) YYABORT; }
410
+
411
+ type_seq_or_void:
412
+ type_seq { $$ = $1; if ($$ == NULL) YYABORT; }
413
+ | VOID { $$ = ndt_type_seq_empty(ctx); if ($$ == NULL) YYABORT; }
414
+
415
+ type_seq:
416
+ datashape_with_ellipsis { $$ = ndt_type_seq_new($1, ctx); if ($$ == NULL) YYABORT; }
417
+ | type_seq COMMA datashape_with_ellipsis { $$ = ndt_type_seq_append($1, $3, ctx); if ($$ == NULL) YYABORT; }