1 | #include <stdlib.h> |
2 | #include <string.h> |
3 | #define YYBYACC 1 |
4 | #define YYMAJOR 1 |
5 | #define YYMINOR 9 |
6 | #define YYLEX yylex() |
7 | #define YYEMPTY -1 |
8 | #define yyclearin (yychar=(YYEMPTY)) |
9 | #define yyerrok (yyerrflag=0) |
10 | #define YYRECOVERING() (yyerrflag!=0) |
11 | #define yyparse knparse |
12 | #define yylex knlex |
13 | #define yyerror knerror |
14 | #define yychar knchar |
15 | #define yyval knval |
16 | #define yylval knlval |
17 | #define yydebug kndebug |
18 | #define yynerrs knnerrs |
19 | #define yyerrflag knerrflag |
20 | #define yyss knss |
21 | #define yysslim knsslim |
22 | #define yyssp knssp |
23 | #define yyvs knvs |
24 | #define yyvsp knvsp |
25 | #define yystacksize knstacksize |
26 | #define yylhs knlhs |
27 | #define yylen knlen |
28 | #define yydefred kndefred |
29 | #define yydgoto kndgoto |
30 | #define yysindex knsindex |
31 | #define yyrindex knrindex |
32 | #define yygindex kngindex |
33 | #define yytable kntable |
34 | #define yycheck kncheck |
35 | #define yyname knname |
36 | #define yyrule knrule |
37 | #define YYPREFIX "kn" |
38 | #line 21 "/usr/src/lib/libkeynote/keynote.y" |
39 | #ifndef YYSTYPE_DEFINED |
40 | #define YYSTYPE_DEFINED |
41 | typedef union { |
42 | char *string; |
43 | double doubval; |
44 | int intval; |
45 | int bool; |
46 | } YYSTYPE; |
47 | #endif /* YYSTYPE_DEFINED */ |
48 | #line 46 "/usr/src/lib/libkeynote/keynote.y" |
49 | #include <sys/types.h> |
50 | |
51 | #include <ctype.h> |
52 | #include <math.h> |
53 | #include <regex.h> |
54 | #include <stdio.h> |
55 | #include <stdlib.h> |
56 | #include <string.h> |
57 | |
58 | #include "keynote.h" |
59 | #include "assertion.h" |
60 | |
61 | static int *keynote_kth_array = NULL; |
62 | static int keylistcount = 0; |
63 | |
64 | static int resolve_assertion(char *); |
65 | static int keynote_init_kth(void); |
66 | static int isfloatstring(char *); |
67 | static int checkexception(int); |
68 | static char *my_lookup(char *); |
69 | static int intpow(int, int); |
70 | static int get_kth(int); |
71 | #line 72 "k.tab.c" |
72 | #define NUM 257 |
73 | #define KOF 258 |
74 | #define FLOAT 259 |
75 | #define STRING 260 |
76 | #define VARIABLE 261 |
77 | #define TRUE 262 |
78 | #define FALSE 263 |
79 | #define OPENPAREN 264 |
80 | #define CLOSEPAREN 265 |
81 | #define EQQ 266 |
82 | #define COMMA 267 |
83 | #define ACTSTR 268 |
84 | #define LOCINI 269 |
85 | #define KEYPRE 270 |
86 | #define KNVERSION 271 |
87 | #define DOTT 272 |
88 | #define SIGNERKEY 273 |
89 | #define HINT 274 |
90 | #define OPENBLOCK 275 |
91 | #define CLOSEBLOCK 276 |
92 | #define SIGNATUREENTRY 277 |
93 | #define PRIVATEKEY 278 |
94 | #define SEMICOLON 279 |
95 | #define EQ 280 |
96 | #define NE 281 |
97 | #define LT 282 |
98 | #define GT 283 |
99 | #define LE 284 |
100 | #define GE 285 |
101 | #define REGEXP 286 |
102 | #define OR 287 |
103 | #define AND 288 |
104 | #define NOT 289 |
105 | #define PLUS 290 |
106 | #define MINUS 291 |
107 | #define MULT 292 |
108 | #define DIV 293 |
109 | #define MOD 294 |
110 | #define EXP 295 |
111 | #define UNARYMINUS 296 |
112 | #define DEREF 297 |
113 | #define OPENNUM 298 |
114 | #define OPENFLT 299 |
115 | #define YYERRCODE 256 |
116 | const short knlhs[] = |
117 | { -1, |
118 | 17, 0, 19, 0, 21, 0, 22, 0, 23, 0, |
119 | 24, 0, 25, 0, 20, 20, 8, 8, 26, 11, |
120 | 27, 11, 11, 28, 29, 11, 12, 12, 10, 16, |
121 | 16, 30, 31, 30, 18, 9, 32, 9, 7, 7, |
122 | 6, 6, 3, 33, 3, 34, 3, 3, 3, 3, |
123 | 3, 3, 3, 2, 2, 2, 2, 2, 2, 4, |
124 | 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, |
125 | 5, 5, 5, 13, 13, 13, 13, 13, 13, 13, |
126 | 13, 13, 1, 1, 1, 1, 1, 1, 1, 14, |
127 | 14, 15, 15, 15, 15, |
128 | }; |
129 | const short knlen[] = |
130 | { 2, |
131 | 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, |
132 | 0, 3, 0, 3, 0, 1, 1, 1, 0, 4, |
133 | 0, 4, 3, 0, 0, 6, 1, 3, 1, 0, |
134 | 1, 3, 0, 5, 1, 0, 0, 4, 3, 1, |
135 | 1, 3, 3, 0, 4, 0, 4, 2, 1, 1, |
136 | 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, |
137 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, |
138 | 3, 1, 2, 3, 3, 3, 3, 3, 2, 3, |
139 | 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, |
140 | 1, 1, 3, 1, 2, |
141 | }; |
142 | const short kndefred[] = |
143 | { 0, |
144 | 3, 1, 5, 11, 7, 9, 13, 0, 0, 0, |
145 | 0, 0, 0, 0, 0, 72, 81, 92, 94, 52, |
146 | 53, 0, 0, 0, 0, 0, 0, 51, 49, 0, |
147 | 50, 0, 37, 35, 0, 0, 91, 4, 0, 2, |
148 | 31, 24, 0, 0, 17, 18, 0, 6, 12, 0, |
149 | 8, 10, 14, 0, 0, 0, 0, 48, 0, 70, |
150 | 79, 95, 73, 82, 0, 46, 44, 0, 0, 0, |
151 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
152 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
153 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
154 | 0, 0, 21, 19, 0, 43, 71, 80, 93, 0, |
155 | 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, |
156 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, |
157 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
158 | 0, 78, 90, 0, 0, 0, 0, 0, 0, 0, |
159 | 0, 25, 23, 0, 0, 0, 0, 45, 38, 0, |
160 | 0, 0, 20, 42, 34, 0, 0, 0, 26, 28, |
161 | }; |
162 | const short kndgoto[] = |
163 | { 8, |
164 | 28, 29, 30, 31, 32, 113, 33, 44, 34, 45, |
165 | 46, 167, 35, 47, 37, 40, 10, 38, 9, 48, |
166 | 11, 13, 14, 12, 15, 155, 154, 99, 161, 41, |
167 | 160, 80, 116, 115, |
168 | }; |
169 | const short knsindex[] = |
170 | { 254, |
171 | 0, 0, 0, 0, 0, 0, 0, 0, -240, -236, |
172 | -147, -249, -133, -133, -214, 0, 0, 0, 0, 0, |
173 | 0, -240, -240, -231, -133, -133, -133, 0, 0, -113, |
174 | 0, 205, 0, 0, 226, 221, 0, 0, -216, 0, |
175 | 0, 0, -147, -233, 0, 0, -241, 0, 0, -133, |
176 | 0, 0, 0, -250, -114, -100, 198, 0, -231, 0, |
177 | 0, 0, 0, 0, -135, 0, 0, -149, -149, -149, |
178 | -149, -149, -149, -149, -149, -149, -149, -149, -149, -174, |
179 | -155, -155, -155, -155, -155, -155, -155, -155, -155, -133, |
180 | -133, -133, -133, -133, -133, -133, -133, -150, -152, -233, |
181 | -141, -230, 0, 0, -230, 0, 0, 0, 0, -229, |
182 | -93, -240, 0, -241, -240, -240, -149, -149, 243, 243, |
183 | 243, 243, 243, 243, -106, -106, -179, -179, -179, 0, |
184 | -240, -155, -155, 249, 249, 249, 249, -88, -88, -165, |
185 | -165, 0, 0, -241, -241, -241, -241, -241, -241, -241, |
186 | 0, 0, 0, -147, -147, -143, -153, 0, 0, -236, |
187 | -133, -136, 0, 0, 0, -126, -118, -133, 0, 0,}; |
188 | const short knrindex[] = |
189 | { 0, |
190 | 0, 0, 0, 0, 0, 0, 0, 0, 163, 173, |
191 | 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
192 | 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, |
193 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
194 | 0, 0, 0, 206, 0, 0, 1, 0, 0, 0, |
195 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
196 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
197 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
198 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
199 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
200 | -209, -129, 0, 0, 0, 0, 0, 0, 0, 0, |
201 | 0, -58, 0, -54, 0, 0, 0, 0, -235, -142, |
202 | -131, -2, 5, 118, -29, 67, -71, -50, 16, 0, |
203 | 2, 0, 0, 124, 130, 134, 136, 88, 103, 37, |
204 | 52, 0, 0, 151, 154, 161, 171, 178, 181, 188, |
205 | 3, 0, 0, 0, 0, 0, -247, 0, 0, 0, |
206 | 0, 4, 0, 0, 0, -39, 0, 0, 0, 0,}; |
207 | const short kngindex[] = |
208 | { 0, |
209 | 0, 0, -14, 0, 21, 0, 0, -36, -83, -8, |
210 | 184, 60, -12, -9, 128, 0, 0, 0, 0, 0, |
211 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, |
212 | 0, 0, 0, 0, |
213 | }; |
214 | #define YYTABLESIZE 544 |
215 | const short kntable[] = |
216 | { 36, |
217 | 29, 36, 32, 22, 51, 52, 100, 54, 58, 56, |
218 | 49, 61, 57, 36, 106, 62, 16, 47, 17, 18, |
219 | 19, 20, 21, 22, 39, 16, 47, 17, 156, 56, |
220 | 90, 47, 59, 102, 109, 107, 66, 67, 56, 47, |
221 | 105, 90, 55, 56, 60, 53, 111, 159, 23, 98, |
222 | 24, 56, 56, 103, 104, 114, 25, 26, 27, 24, |
223 | 74, 75, 76, 77, 78, 79, 26, 27, 134, 135, |
224 | 136, 137, 138, 139, 140, 141, 142, 18, 18, 110, |
225 | 143, 144, 145, 146, 147, 148, 149, 150, 119, 120, |
226 | 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, |
227 | 157, 158, 36, 17, 131, 36, 36, 16, 132, 151, |
228 | 42, 152, 18, 19, 117, 79, 43, 162, 163, 111, |
229 | 61, 36, 59, 153, 18, 19, 18, 19, 50, 89, |
230 | 50, 59, 164, 54, 67, 133, 59, 110, 60, 112, |
231 | 168, 118, 54, 27, 59, 59, 169, 54, 26, 25, |
232 | 107, 104, 166, 63, 64, 54, 54, 29, 29, 166, |
233 | 65, 25, 36, 25, 108, 68, 69, 70, 71, 72, |
234 | 73, 108, 30, 66, 67, 74, 75, 76, 77, 78, |
235 | 79, 81, 82, 83, 84, 76, 77, 78, 79, 85, |
236 | 86, 87, 88, 66, 89, 15, 85, 86, 87, 88, |
237 | 40, 89, 66, 87, 88, 16, 89, 66, 66, 66, |
238 | 66, 66, 66, 66, 67, 66, 66, 36, 66, 66, |
239 | 66, 66, 66, 67, 41, 27, 101, 170, 67, 67, |
240 | 67, 67, 67, 67, 67, 64, 67, 67, 165, 67, |
241 | 67, 67, 67, 67, 64, 0, 0, 0, 0, 64, |
242 | 64, 64, 64, 64, 64, 64, 0, 64, 64, 0, |
243 | 64, 64, 55, 33, 0, 29, 0, 29, 22, 57, |
244 | 0, 55, 0, 0, 0, 0, 55, 36, 57, 0, |
245 | 68, 0, 0, 57, 55, 55, 0, 29, 29, 68, |
246 | 22, 57, 57, 0, 68, 68, 68, 68, 68, 68, |
247 | 68, 76, 68, 68, 0, 68, 68, 68, 68, 68, |
248 | 76, 0, 0, 0, 0, 76, 77, 0, 76, 76, |
249 | 76, 76, 0, 76, 76, 77, 76, 76, 76, 76, |
250 | 77, 65, 0, 77, 77, 77, 77, 0, 77, 77, |
251 | 65, 77, 77, 77, 77, 65, 65, 65, 65, 65, |
252 | 65, 65, 74, 65, 65, 0, 65, 65, 0, 0, |
253 | 0, 74, 0, 0, 0, 0, 74, 75, 0, 74, |
254 | 74, 74, 74, 0, 74, 74, 75, 74, 74, 0, |
255 | 0, 75, 58, 0, 75, 75, 75, 75, 60, 75, |
256 | 75, 58, 75, 75, 61, 0, 58, 60, 62, 0, |
257 | 63, 0, 60, 61, 58, 58, 0, 62, 61, 63, |
258 | 60, 60, 62, 0, 63, 83, 61, 61, 84, 0, |
259 | 62, 62, 63, 63, 83, 85, 0, 84, 0, 83, |
260 | 0, 0, 84, 0, 85, 86, 0, 83, 83, 85, |
261 | 84, 84, 87, 0, 86, 88, 0, 85, 85, 86, |
262 | 0, 87, 89, 0, 88, 0, 87, 86, 86, 88, |
263 | 0, 89, 109, 0, 87, 87, 89, 88, 88, 90, |
264 | 0, 0, 0, 0, 89, 89, 0, 91, 92, 93, |
265 | 94, 95, 96, 97, 68, 69, 70, 71, 72, 73, |
266 | 0, 0, 90, 0, 74, 75, 76, 77, 78, 79, |
267 | 91, 92, 93, 94, 95, 96, 97, 81, 82, 83, |
268 | 84, 0, 0, 0, 0, 85, 86, 87, 88, 0, |
269 | 89, 1, 2, 3, 4, 0, 5, 0, 0, 0, |
270 | 6, 7, 74, 75, 76, 77, 78, 79, 85, 86, |
271 | 87, 88, 0, 89, |
272 | }; |
273 | const short kncheck[] = |
274 | { 9, |
275 | 0, 0, 0, 0, 13, 14, 43, 22, 23, 22, |
276 | 260, 24, 22, 23, 265, 25, 257, 265, 259, 260, |
277 | 261, 262, 263, 264, 261, 257, 274, 259, 112, 265, |
278 | 272, 279, 264, 43, 265, 265, 287, 288, 274, 287, |
279 | 50, 272, 22, 279, 24, 260, 59, 131, 289, 266, |
280 | 291, 287, 288, 287, 288, 65, 297, 298, 299, 291, |
281 | 290, 291, 292, 293, 294, 295, 298, 299, 81, 82, |
282 | 83, 84, 85, 86, 87, 88, 89, 287, 288, 59, |
283 | 90, 91, 92, 93, 94, 95, 96, 97, 68, 69, |
284 | 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, |
285 | 115, 116, 112, 259, 279, 115, 116, 257, 264, 260, |
286 | 258, 264, 260, 261, 264, 295, 264, 154, 155, 132, |
287 | 133, 131, 265, 265, 260, 261, 260, 261, 264, 295, |
288 | 264, 274, 276, 265, 288, 291, 279, 117, 118, 275, |
289 | 267, 291, 274, 299, 287, 288, 265, 279, 298, 297, |
290 | 265, 288, 161, 26, 27, 287, 288, 287, 288, 168, |
291 | 274, 297, 0, 297, 265, 280, 281, 282, 283, 284, |
292 | 285, 265, 0, 287, 288, 290, 291, 292, 293, 294, |
293 | 295, 282, 283, 284, 285, 292, 293, 294, 295, 290, |
294 | 291, 292, 293, 265, 295, 0, 290, 291, 292, 293, |
295 | 279, 295, 274, 292, 293, 0, 295, 279, 280, 281, |
296 | 282, 283, 284, 285, 265, 287, 288, 276, 290, 291, |
297 | 292, 293, 294, 274, 279, 265, 43, 168, 279, 280, |
298 | 281, 282, 283, 284, 285, 265, 287, 288, 160, 290, |
299 | 291, 292, 293, 294, 274, -1, -1, -1, -1, 279, |
300 | 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, |
301 | 290, 291, 265, 261, -1, 265, -1, 267, 265, 265, |
302 | -1, 274, -1, -1, -1, -1, 279, 276, 274, -1, |
303 | 265, -1, -1, 279, 287, 288, -1, 287, 288, 274, |
304 | 287, 287, 288, -1, 279, 280, 281, 282, 283, 284, |
305 | 285, 265, 287, 288, -1, 290, 291, 292, 293, 294, |
306 | 274, -1, -1, -1, -1, 279, 265, -1, 282, 283, |
307 | 284, 285, -1, 287, 288, 274, 290, 291, 292, 293, |
308 | 279, 265, -1, 282, 283, 284, 285, -1, 287, 288, |
309 | 274, 290, 291, 292, 293, 279, 280, 281, 282, 283, |
310 | 284, 285, 265, 287, 288, -1, 290, 291, -1, -1, |
311 | -1, 274, -1, -1, -1, -1, 279, 265, -1, 282, |
312 | 283, 284, 285, -1, 287, 288, 274, 290, 291, -1, |
313 | -1, 279, 265, -1, 282, 283, 284, 285, 265, 287, |
314 | 288, 274, 290, 291, 265, -1, 279, 274, 265, -1, |
315 | 265, -1, 279, 274, 287, 288, -1, 274, 279, 274, |
316 | 287, 288, 279, -1, 279, 265, 287, 288, 265, -1, |
317 | 287, 288, 287, 288, 274, 265, -1, 274, -1, 279, |
318 | -1, -1, 279, -1, 274, 265, -1, 287, 288, 279, |
319 | 287, 288, 265, -1, 274, 265, -1, 287, 288, 279, |
320 | -1, 274, 265, -1, 274, -1, 279, 287, 288, 279, |
321 | -1, 274, 265, -1, 287, 288, 279, 287, 288, 272, |
322 | -1, -1, -1, -1, 287, 288, -1, 280, 281, 282, |
323 | 283, 284, 285, 286, 280, 281, 282, 283, 284, 285, |
324 | -1, -1, 272, -1, 290, 291, 292, 293, 294, 295, |
325 | 280, 281, 282, 283, 284, 285, 286, 282, 283, 284, |
326 | 285, -1, -1, -1, -1, 290, 291, 292, 293, -1, |
327 | 295, 268, 269, 270, 271, -1, 273, -1, -1, -1, |
328 | 277, 278, 290, 291, 292, 293, 294, 295, 290, 291, |
329 | 292, 293, -1, 295, |
330 | }; |
331 | #define YYFINAL 8 |
332 | #ifndef YYDEBUG |
333 | #define YYDEBUG 0 |
334 | #endif |
335 | #define YYMAXTOKEN 299 |
336 | #if YYDEBUG |
337 | const char * const knname[] = |
338 | { |
339 | "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
340 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
341 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
342 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
343 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
344 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
345 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"NUM","KOF","FLOAT","STRING", |
346 | "VARIABLE","TRUE","FALSE","OPENPAREN","CLOSEPAREN","EQQ","COMMA","ACTSTR", |
347 | "LOCINI","KEYPRE","KNVERSION","DOTT","SIGNERKEY","HINT","OPENBLOCK", |
348 | "CLOSEBLOCK","SIGNATUREENTRY","PRIVATEKEY","SEMICOLON","EQ","NE","LT","GT","LE", |
349 | "GE","REGEXP","OR","AND","NOT","PLUS","MINUS","MULT","DIV","MOD","EXP", |
350 | "UNARYMINUS","DEREF","OPENNUM","OPENFLT", |
351 | }; |
352 | const char * const knrule[] = |
353 | {"$accept : grammarswitch", |
354 | "$$1 :", |
355 | "grammarswitch : LOCINI $$1 localinit", |
356 | "$$2 :", |
357 | "grammarswitch : ACTSTR $$2 program", |
358 | "$$3 :", |
359 | "grammarswitch : KEYPRE $$3 keypredicate", |
360 | "$$4 :", |
361 | "grammarswitch : SIGNERKEY $$4 key", |
362 | "$$5 :", |
363 | "grammarswitch : SIGNATUREENTRY $$5 key", |
364 | "$$6 :", |
365 | "grammarswitch : KNVERSION $$6 STRING", |
366 | "$$7 :", |
367 | "grammarswitch : PRIVATEKEY $$7 STRING", |
368 | "keypredicate :", |
369 | "keypredicate : notemptykeypredicate", |
370 | "notemptykeypredicate : key", |
371 | "notemptykeypredicate : keyexp", |
372 | "$$8 :", |
373 | "keyexp : notemptykeypredicate AND $$8 notemptykeypredicate", |
374 | "$$9 :", |
375 | "keyexp : notemptykeypredicate OR $$9 notemptykeypredicate", |
376 | "keyexp : OPENPAREN keyexp CLOSEPAREN", |
377 | "$$10 :", |
378 | "$$11 :", |
379 | "keyexp : KOF $$10 OPENPAREN $$11 keylist CLOSEPAREN", |
380 | "keylist : key", |
381 | "keylist : key COMMA keylist", |
382 | "key : str", |
383 | "localinit :", |
384 | "localinit : localconstants", |
385 | "localconstants : VARIABLE EQQ STRING", |
386 | "$$12 :", |
387 | "localconstants : VARIABLE EQQ STRING $$12 localconstants", |
388 | "program : prog", |
389 | "prog :", |
390 | "$$13 :", |
391 | "prog : notemptyprog $$13 SEMICOLON prog", |
392 | "notemptyprog : expr HINT afterhint", |
393 | "notemptyprog : expr", |
394 | "afterhint : str", |
395 | "afterhint : OPENBLOCK prog CLOSEBLOCK", |
396 | "expr : OPENPAREN expr CLOSEPAREN", |
397 | "$$14 :", |
398 | "expr : expr AND $$14 expr", |
399 | "$$15 :", |
400 | "expr : expr OR $$15 expr", |
401 | "expr : NOT expr", |
402 | "expr : numexp", |
403 | "expr : floatexp", |
404 | "expr : stringexp", |
405 | "expr : TRUE", |
406 | "expr : FALSE", |
407 | "numexp : numex LT numex", |
408 | "numexp : numex GT numex", |
409 | "numexp : numex EQ numex", |
410 | "numexp : numex LE numex", |
411 | "numexp : numex GE numex", |
412 | "numexp : numex NE numex", |
413 | "floatexp : floatex LT floatex", |
414 | "floatexp : floatex GT floatex", |
415 | "floatexp : floatex LE floatex", |
416 | "floatexp : floatex GE floatex", |
417 | "numex : numex PLUS numex", |
418 | "numex : numex MINUS numex", |
419 | "numex : numex MULT numex", |
420 | "numex : numex DIV numex", |
421 | "numex : numex MOD numex", |
422 | "numex : numex EXP numex", |
423 | "numex : MINUS numex", |
424 | "numex : OPENPAREN numex CLOSEPAREN", |
425 | "numex : NUM", |
426 | "numex : OPENNUM strnotconcat", |
427 | "floatex : floatex PLUS floatex", |
428 | "floatex : floatex MINUS floatex", |
429 | "floatex : floatex MULT floatex", |
430 | "floatex : floatex DIV floatex", |
431 | "floatex : floatex EXP floatex", |
432 | "floatex : MINUS floatex", |
433 | "floatex : OPENPAREN floatex CLOSEPAREN", |
434 | "floatex : FLOAT", |
435 | "floatex : OPENFLT strnotconcat", |
436 | "stringexp : str EQ str", |
437 | "stringexp : str NE str", |
438 | "stringexp : str LT str", |
439 | "stringexp : str GT str", |
440 | "stringexp : str LE str", |
441 | "stringexp : str GE str", |
442 | "stringexp : str REGEXP str", |
443 | "str : str DOTT str", |
444 | "str : strnotconcat", |
445 | "strnotconcat : STRING", |
446 | "strnotconcat : OPENPAREN str CLOSEPAREN", |
447 | "strnotconcat : VARIABLE", |
448 | "strnotconcat : DEREF str", |
449 | }; |
450 | #endif |
451 | #ifdef YYSTACKSIZE |
452 | #undef YYMAXDEPTH |
453 | #define YYMAXDEPTH YYSTACKSIZE |
454 | #else |
455 | #ifdef YYMAXDEPTH |
456 | #define YYSTACKSIZE YYMAXDEPTH |
457 | #else |
458 | #define YYSTACKSIZE 10000 |
459 | #define YYMAXDEPTH 10000 |
460 | #endif |
461 | #endif |
462 | #define YYINITSTACKSIZE 200 |
463 | |
464 | int yydebug; |
465 | int yynerrs; |
466 | int yyerrflag; |
467 | int yychar; |
468 | short *yyssp; |
469 | YYSTYPE *yyvsp; |
470 | YYSTYPE yyval; |
471 | YYSTYPE yylval; |
472 | short *yyss; |
473 | short *yysslim; |
474 | YYSTYPE *yyvs; |
475 | unsigned int yystacksize; |
476 | int yyparse(void); |
477 | #line 646 "/usr/src/lib/libkeynote/keynote.y" |
478 | |
479 | |
480 | |
481 | |
482 | |
483 | static int |
484 | resolve_assertion(char *s) |
485 | { |
486 | int i, alg = KEYNOTE_ALGORITHM_NONE, p = 0; |
487 | void *key = (void *) s; |
488 | struct assertion *as; |
489 | struct keylist *kl; |
490 | |
491 | kl = keynote_keylist_find(keynote_current_assertion->as_keylist, s); |
492 | if (kl != NULL) |
493 | { |
494 | alg = kl->key_alg; |
495 | key = kl->key_key; |
496 | } |
497 | |
498 | for (i = 0;; i++) |
499 | { |
500 | as = keynote_find_assertion(key, i, alg); |
501 | if (as == NULL) |
502 | return p; |
503 | |
504 | if (as->as_kresult == KRESULT_DONE) |
505 | if (p < as->as_result) |
506 | p = as->as_result; |
507 | |
508 | |
509 | if (p == (keynote_current_session->ks_values_num - 1)) |
510 | return p; |
511 | } |
512 | |
513 | return 0; |
514 | } |
515 | |
516 | |
517 | |
518 | |
519 | static char * |
520 | my_lookup(char *s) |
521 | { |
522 | struct keynote_session *ks = keynote_current_session; |
523 | char *ret; |
524 | |
525 | if (!strcmp(s, "_MIN_TRUST")) |
526 | { |
527 | keynote_used_variable = 1; |
528 | return ks->ks_values[0]; |
529 | } |
530 | else |
531 | { |
532 | if (!strcmp(s, "_MAX_TRUST")) |
533 | { |
534 | keynote_used_variable = 1; |
535 | return ks->ks_values[ks->ks_values_num - 1]; |
536 | } |
537 | else |
538 | { |
539 | if (!strcmp(s, "_VALUES")) |
540 | { |
541 | keynote_used_variable = 1; |
542 | return keynote_env_lookup("_VALUES", ks->ks_env_table, |
543 | HASHTABLESIZE); |
544 | } |
545 | else |
546 | { |
547 | if (!strcmp(s, "_ACTION_AUTHORIZERS")) |
548 | { |
549 | keynote_used_variable = 1; |
550 | return keynote_env_lookup("_ACTION_AUTHORIZERS", |
551 | ks->ks_env_table, HASHTABLESIZE); |
552 | } |
553 | } |
554 | } |
555 | } |
556 | |
557 | |
558 | if (keynote_temp_list != NULL) |
559 | { |
560 | ret = keynote_env_lookup(s, &keynote_temp_list, 1); |
561 | if (ret != NULL) |
562 | return ret; |
563 | else |
564 | if (keynote_errno != 0) |
565 | return NULL; |
566 | } |
567 | |
568 | |
569 | if (keynote_init_list != NULL) |
570 | { |
571 | ret = keynote_env_lookup(s, &keynote_init_list, 1); |
572 | if (ret != NULL) |
573 | return ret; |
574 | else |
575 | if (keynote_errno != 0) |
576 | return NULL; |
577 | } |
578 | |
579 | if (ks != NULL) |
580 | { |
581 | |
582 | ret = keynote_env_lookup(s, ks->ks_env_table, HASHTABLESIZE); |
583 | if (ret != NULL) |
584 | { |
585 | keynote_used_variable = 1; |
586 | return ret; |
587 | } |
588 | else |
589 | if (keynote_errno != 0) |
590 | return NULL; |
591 | } |
592 | |
593 | |
594 | if ((ks != NULL) && (ks->ks_env_regex != NULL)) |
595 | { |
596 | ret = keynote_env_lookup(s, &(ks->ks_env_regex), 1); |
597 | if (ret != NULL) |
598 | { |
599 | keynote_used_variable = 1; |
600 | return ret; |
601 | } |
602 | |
603 | return NULL; |
604 | } |
605 | |
606 | return NULL; |
607 | } |
608 | |
609 | |
610 | |
611 | |
612 | |
613 | static int |
614 | checkexception(int i) |
615 | { |
616 | if (keynote_exceptionflag) |
617 | { |
618 | keynote_exceptionflag = 0; |
619 | return 0; |
620 | } |
621 | else |
622 | return i; |
623 | } |
624 | |
625 | |
626 | |
627 | |
628 | |
629 | static int |
630 | intpow(int x, int y) |
631 | { |
632 | int s = 1; |
633 | |
634 | |
635 | |
636 | |
637 | |
638 | if (y < 0) |
639 | return 0; |
640 | |
641 | while (y) |
642 | { |
643 | if (y & 1) |
644 | s *= x; |
645 | |
646 | y >>= 1; |
647 | x *= x; |
648 | } |
649 | |
650 | return s; |
651 | } |
652 | |
653 | |
654 | |
655 | |
656 | static int |
657 | isfloatstring(char *s) |
658 | { |
659 | int i, point = 0; |
660 | |
661 | for (i = strlen(s) - 1; i >= 0; i--) |
662 | if (!isdigit((unsigned char)s[i])) |
663 | { |
664 | if (s[i] == '.') |
665 | { |
666 | if (point == 1) |
667 | return 0; |
668 | else |
669 | point = 1; |
670 | } |
671 | else |
672 | return 0; |
673 | } |
674 | |
675 | return 1; |
676 | } |
677 | |
678 | |
679 | |
680 | |
681 | static int |
682 | keynote_init_kth(void) |
683 | { |
684 | int i = keynote_current_session->ks_values_num; |
685 | |
686 | if (i == -1) |
687 | return -1; |
688 | |
689 | keynote_kth_array = calloc(i, sizeof(int)); |
690 | if (keynote_kth_array == NULL) |
691 | { |
692 | keynote_errno = ERROR_MEMORY; |
693 | return -1; |
694 | } |
695 | |
696 | return RESULT_TRUE; |
697 | } |
698 | |
699 | |
700 | |
701 | |
702 | static int |
703 | get_kth(int k) |
704 | { |
705 | int i; |
706 | |
707 | for (i = keynote_current_session->ks_values_num - 1; i >= 0; i--) |
708 | { |
709 | k -= keynote_kth_array[i]; |
710 | |
711 | if (k <= 0) |
712 | return i; |
713 | } |
714 | |
715 | return 0; |
716 | } |
717 | |
718 | |
719 | |
720 | |
721 | void |
722 | keynote_cleanup_kth(void) |
723 | { |
724 | if (keynote_kth_array != NULL) |
725 | { |
726 | free(keynote_kth_array); |
727 | keynote_kth_array = NULL; |
728 | } |
729 | } |
730 | |
731 | void |
732 | knerror(char *s) |
733 | {} |
734 | #line 727 "k.tab.c" |
735 | |
736 | static int yygrowstack(void) |
737 | { |
738 | unsigned int newsize; |
739 | long sslen; |
740 | short *newss; |
741 | YYSTYPE *newvs; |
742 | |
743 | if ((newsize = yystacksize) == 0) |
744 | newsize = YYINITSTACKSIZE; |
745 | else if (newsize >= YYMAXDEPTH) |
746 | return -1; |
747 | else if ((newsize *= 2) > YYMAXDEPTH) |
748 | newsize = YYMAXDEPTH; |
749 | sslen = yyssp - yyss; |
750 | #ifdef SIZE_MAX |
751 | #define YY_SIZE_MAX SIZE_MAX |
752 | #else |
753 | #define YY_SIZE_MAX 0xffffffffU |
754 | #endif |
755 | if (newsize && YY_SIZE_MAX / newsize < sizeof *newss) |
756 | goto bail; |
757 | newss = (short *)realloc(yyss, newsize * sizeof *newss); |
758 | if (newss == NULL) |
759 | goto bail; |
760 | yyss = newss; |
761 | yyssp = newss + sslen; |
762 | if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs) |
763 | goto bail; |
764 | newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs); |
765 | if (newvs == NULL) |
766 | goto bail; |
767 | yyvs = newvs; |
768 | yyvsp = newvs + sslen; |
769 | yystacksize = newsize; |
770 | yysslim = yyss + newsize - 1; |
771 | return 0; |
772 | bail: |
773 | if (yyss) |
774 | free(yyss); |
775 | if (yyvs) |
776 | free(yyvs); |
777 | yyss = yyssp = NULL; |
778 | yyvs = yyvsp = NULL; |
779 | yystacksize = 0; |
780 | return -1; |
781 | } |
782 | |
783 | #define YYABORT goto yyabort |
784 | #define YYREJECT goto yyabort |
785 | #define YYACCEPT goto yyaccept |
786 | #define YYERROR goto yyerrlab |
787 | int |
788 | yyparse(void) |
789 | { |
790 | int yym, yyn, yystate; |
791 | #if YYDEBUG |
792 | const char *yys; |
793 | |
794 | if ((yys = getenv("YYDEBUG"))) |
795 | { |
796 | yyn = *yys; |
797 | if (yyn >= '0' && yyn <= '9') |
798 | yydebug = yyn - '0'; |
799 | } |
800 | #endif /* YYDEBUG */ |
801 | |
802 | yynerrs = 0; |
803 | yyerrflag = 0; |
804 | yychar = (-1); |
805 | |
806 | if (yyss == NULL && yygrowstack()) goto yyoverflow; |
| 1 | Assuming 'knss' is not equal to NULL | |
|
807 | yyssp = yyss; |
808 | yyvsp = yyvs; |
809 | *yyssp = yystate = 0; |
810 | |
811 | yyloop: |
812 | if ((yyn = yydefred[yystate]) != 0) goto yyreduce; |
| |
| 19 | | Assuming the condition is true | |
|
| |
| 21 | | Control jumps to line 919 | |
|
| 30 | | Assuming the condition is true | |
|
| |
| 32 | | Control jumps to line 919 | |
|
813 | if (yychar < 0) |
| |
814 | { |
815 | if ((yychar = yylex()) < 0) yychar = 0; |
| 4 | | Assuming the condition is false | |
|
816 | #if YYDEBUG |
817 | if (yydebug) |
818 | { |
819 | yys = 0; |
820 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
821 | if (!yys) yys = "illegal-symbol"; |
822 | printf("%sdebug: state %d, reading %d (%s)\n", |
823 | YYPREFIX, yystate, yychar, yys); |
824 | } |
825 | #endif |
826 | } |
827 | if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && |
| 5 | | Assuming 'yyn' is not equal to 0 | |
|
| 6 | | Assuming the condition is false | |
|
828 | yyn <= YYTABLESIZE && yycheck[yyn] == yychar) |
829 | { |
830 | #if YYDEBUG |
831 | if (yydebug) |
832 | printf("%sdebug: state %d, shifting to state %d\n", |
833 | YYPREFIX, yystate, yytable[yyn]); |
834 | #endif |
835 | if (yyssp >= yysslim && yygrowstack()) |
836 | { |
837 | goto yyoverflow; |
838 | } |
839 | *++yyssp = yystate = yytable[yyn]; |
840 | *++yyvsp = yylval; |
841 | yychar = (-1); |
842 | if (yyerrflag > 0) --yyerrflag; |
843 | goto yyloop; |
844 | } |
845 | if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && |
| |
846 | yyn <= YYTABLESIZE && yycheck[yyn] == yychar) |
847 | { |
848 | yyn = yytable[yyn]; |
849 | goto yyreduce; |
850 | } |
851 | if (yyerrflag) goto yyinrecovery; |
| 8 | | Assuming 'knerrflag' is 0 | |
|
| |
852 | #if defined(__GNUC__) |
853 | goto yynewerror; |
| 10 | | Control jumps to line 856 | |
|
854 | #endif |
855 | yynewerror: |
856 | yyerror("syntax error"); |
857 | #if defined(__GNUC__) |
858 | goto yyerrlab; |
| 11 | | Control jumps to line 861 | |
|
859 | #endif |
860 | yyerrlab: |
861 | ++yynerrs; |
862 | yyinrecovery: |
863 | if (yyerrflag < 3) |
| |
864 | { |
865 | yyerrflag = 3; |
866 | for (;;) |
867 | { |
868 | if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && |
| 13 | | Assuming 'yyn' is not equal to 0 | |
|
| 14 | | Assuming the condition is true | |
|
869 | yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) |
| 15 | | Assuming 'yyn' is <= YYTABLESIZE | |
|
| 16 | | Assuming the condition is true | |
|
870 | { |
871 | #if YYDEBUG |
872 | if (yydebug) |
873 | printf("%sdebug: state %d, error recovery shifting\ |
874 | to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); |
875 | #endif |
876 | if (yyssp >= yysslim && yygrowstack()) |
| 17 | | Assuming 'knssp' is < 'knsslim' | |
|
877 | { |
878 | goto yyoverflow; |
879 | } |
880 | *++yyssp = yystate = yytable[yyn]; |
881 | *++yyvsp = yylval; |
882 | goto yyloop; |
| 18 | | Control jumps to line 812 | |
|
883 | } |
884 | else |
885 | { |
886 | #if YYDEBUG |
887 | if (yydebug) |
888 | printf("%sdebug: error recovery discarding state %d\n", |
889 | YYPREFIX, *yyssp); |
890 | #endif |
891 | if (yyssp <= yyss) goto yyabort; |
892 | --yyssp; |
893 | --yyvsp; |
894 | } |
895 | } |
896 | } |
897 | else |
898 | { |
899 | if (yychar == 0) goto yyabort; |
900 | #if YYDEBUG |
901 | if (yydebug) |
902 | { |
903 | yys = 0; |
904 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
905 | if (!yys) yys = "illegal-symbol"; |
906 | printf("%sdebug: state %d, error recovery discards token %d (%s)\n", |
907 | YYPREFIX, yystate, yychar, yys); |
908 | } |
909 | #endif |
910 | yychar = (-1); |
911 | goto yyloop; |
912 | } |
913 | yyreduce: |
914 | #if YYDEBUG |
915 | if (yydebug) |
916 | printf("%sdebug: state %d, reducing by rule %d (%s)\n", |
917 | YYPREFIX, yystate, yyn, yyrule[yyn]); |
918 | #endif |
919 | yym = yylen[yyn]; |
920 | if (yym) |
| |
| |
| |
| |
921 | yyval = yyvsp[1-yym]; |
922 | else |
923 | memset(&yyval, 0, sizeof yyval); |
924 | switch (yyn) |
| 24 | | 'Default' branch taken. Execution continues on line 1734 | |
|
| 35 | | Control jumps to 'case 90:' at line 1637 | |
|
925 | { |
926 | case 1: |
927 | #line 71 "/usr/src/lib/libkeynote/keynote.y" |
928 | { keynote_exceptionflag = keynote_donteval = 0; } |
929 | break; |
930 | case 3: |
931 | #line 73 "/usr/src/lib/libkeynote/keynote.y" |
932 | { keynote_exceptionflag = keynote_donteval = 0; } |
933 | break; |
934 | case 5: |
935 | #line 74 "/usr/src/lib/libkeynote/keynote.y" |
936 | { keynote_exceptionflag = keynote_donteval = 0; } |
937 | break; |
938 | case 7: |
939 | #line 76 "/usr/src/lib/libkeynote/keynote.y" |
940 | { keynote_exceptionflag = keynote_donteval = 0; } |
941 | break; |
942 | case 9: |
943 | #line 77 "/usr/src/lib/libkeynote/keynote.y" |
944 | { keynote_exceptionflag = keynote_donteval = 0; } |
945 | break; |
946 | case 11: |
947 | #line 79 "/usr/src/lib/libkeynote/keynote.y" |
948 | { keynote_exceptionflag = keynote_donteval = 0; } |
949 | break; |
950 | case 12: |
951 | #line 80 "/usr/src/lib/libkeynote/keynote.y" |
952 | { keynote_lex_remove(yyvsp[0].string); |
953 | if (strcmp(yyvsp[0].string, KEYNOTE_VERSION_STRING)) |
954 | keynote_errno = ERROR_SYNTAX; |
955 | free(yyvsp[0].string); |
956 | } |
957 | break; |
958 | case 13: |
959 | #line 85 "/usr/src/lib/libkeynote/keynote.y" |
960 | { keynote_exceptionflag = keynote_donteval = 0; } |
961 | break; |
962 | case 14: |
963 | #line 86 "/usr/src/lib/libkeynote/keynote.y" |
964 | { keynote_lex_remove(yyvsp[0].string); |
965 | keynote_privkey = yyvsp[0].string; |
966 | } |
967 | break; |
968 | case 15: |
969 | #line 90 "/usr/src/lib/libkeynote/keynote.y" |
970 | { keynote_returnvalue = 0; |
971 | return 0; |
972 | } |
973 | break; |
974 | case 16: |
975 | #line 93 "/usr/src/lib/libkeynote/keynote.y" |
976 | { keynote_returnvalue = yyvsp[0].intval; |
977 | return 0; |
978 | } |
979 | break; |
980 | case 17: |
981 | #line 97 "/usr/src/lib/libkeynote/keynote.y" |
982 | { yyval.intval = yyvsp[0].intval; } |
983 | break; |
984 | case 18: |
985 | #line 98 "/usr/src/lib/libkeynote/keynote.y" |
986 | { yyval.intval = yyvsp[0].intval; } |
987 | break; |
988 | case 19: |
989 | #line 100 "/usr/src/lib/libkeynote/keynote.y" |
990 | { if ((yyvsp[-1].intval == 0) && !keynote_justrecord) |
991 | keynote_donteval = 1; |
992 | } |
993 | break; |
994 | case 20: |
995 | #line 103 "/usr/src/lib/libkeynote/keynote.y" |
996 | { if (yyvsp[-3].intval > yyvsp[0].intval) |
997 | yyval.intval = yyvsp[0].intval; |
998 | else |
999 | yyval.intval = yyvsp[-3].intval; |
1000 | keynote_donteval = 0; |
1001 | } |
1002 | break; |
1003 | case 21: |
1004 | #line 109 "/usr/src/lib/libkeynote/keynote.y" |
1005 | { if ((yyvsp[-1].intval == (keynote_current_session->ks_values_num - 1)) && !keynote_justrecord) |
1006 | keynote_donteval = 1; |
1007 | } |
1008 | break; |
1009 | case 22: |
1010 | #line 112 "/usr/src/lib/libkeynote/keynote.y" |
1011 | { if (yyvsp[-3].intval >= yyvsp[0].intval) |
1012 | yyval.intval = yyvsp[-3].intval; |
1013 | else |
1014 | yyval.intval = yyvsp[0].intval; |
1015 | keynote_donteval = 0; |
1016 | } |
1017 | break; |
1018 | case 23: |
1019 | #line 118 "/usr/src/lib/libkeynote/keynote.y" |
1020 | { yyval.intval = yyvsp[-1].intval; } |
1021 | break; |
1022 | case 24: |
1023 | #line 119 "/usr/src/lib/libkeynote/keynote.y" |
1024 | { keylistcount = 0; } |
1025 | break; |
1026 | case 25: |
1027 | #line 119 "/usr/src/lib/libkeynote/keynote.y" |
1028 | { |
1029 | if (!keynote_justrecord && !keynote_donteval) |
1030 | if (keynote_init_kth() == -1) |
1031 | return -1; |
1032 | } |
1033 | break; |
1034 | case 26: |
1035 | #line 124 "/usr/src/lib/libkeynote/keynote.y" |
1036 | { |
1037 | if (keylistcount < yyvsp[-5].intval) |
1038 | { |
1039 | keynote_errno = ERROR_SYNTAX; |
1040 | return -1; |
1041 | } |
1042 | |
1043 | if (!keynote_justrecord && !keynote_donteval) |
1044 | yyval.intval = get_kth(yyvsp[-5].intval); |
1045 | else |
1046 | yyval.intval = 0; |
1047 | } |
1048 | break; |
1049 | case 27: |
1050 | #line 138 "/usr/src/lib/libkeynote/keynote.y" |
1051 | { |
1052 | if (!keynote_justrecord && !keynote_donteval) |
1053 | if ((yyvsp[0].intval < keynote_current_session->ks_values_num) && (yyvsp[0].intval >= 0)) |
1054 | keynote_kth_array[yyvsp[0].intval]++; |
1055 | |
1056 | keylistcount++; |
1057 | } |
1058 | break; |
1059 | case 28: |
1060 | #line 146 "/usr/src/lib/libkeynote/keynote.y" |
1061 | { |
1062 | if (!keynote_justrecord && !keynote_donteval) |
1063 | if ((yyvsp[-2].intval < keynote_current_session->ks_values_num) && (yyvsp[-2].intval >= 0)) |
1064 | keynote_kth_array[yyvsp[-2].intval]++; |
1065 | |
1066 | keylistcount++; |
1067 | } |
1068 | break; |
1069 | case 29: |
1070 | #line 154 "/usr/src/lib/libkeynote/keynote.y" |
1071 | { |
1072 | if (keynote_donteval) |
1073 | yyval.intval = 0; |
1074 | else |
1075 | { |
1076 | keynote_lex_remove(yyvsp[0].string); |
1077 | if (keynote_justrecord) |
1078 | { |
1079 | if (keynote_keylist_add(&keynote_keypred_keylist, |
1080 | yyvsp[0].string) == -1) |
1081 | { |
1082 | free(yyvsp[0].string); |
1083 | return -1; |
1084 | } |
1085 | |
1086 | yyval.intval = 0; |
1087 | } |
1088 | else |
1089 | switch (keynote_in_action_authorizers(yyvsp[0].string, KEYNOTE_ALGORITHM_UNSPEC)) |
1090 | { |
1091 | case -1: |
1092 | free(yyvsp[0].string); |
1093 | return -1; |
1094 | |
1095 | case RESULT_TRUE: |
1096 | free(yyvsp[0].string); |
1097 | yyval.intval = keynote_current_session->ks_values_num - |
1098 | 1; |
1099 | break; |
1100 | |
1101 | default: |
1102 | yyval.intval = resolve_assertion(yyvsp[0].string); |
1103 | free(yyvsp[0].string); |
1104 | break; |
1105 | } |
1106 | } |
1107 | } |
1108 | break; |
1109 | case 32: |
1110 | #line 196 "/usr/src/lib/libkeynote/keynote.y" |
1111 | { |
1112 | int i; |
1113 | |
1114 | keynote_lex_remove(yyvsp[-2].string); |
1115 | keynote_lex_remove(yyvsp[0].string); |
1116 | |
1117 | |
1118 | |
1119 | |
1120 | if (yyvsp[-2].string[0] == '_') |
1121 | { |
1122 | free(yyvsp[-2].string); |
1123 | free(yyvsp[0].string); |
1124 | keynote_errno = ERROR_SYNTAX; |
1125 | return -1; |
1126 | } |
1127 | |
1128 | |
1129 | if (keynote_env_lookup(yyvsp[-2].string, &keynote_init_list, 1) != NULL) |
1130 | { |
1131 | free(yyvsp[-2].string); |
1132 | free(yyvsp[0].string); |
1133 | keynote_errno = ERROR_SYNTAX; |
1134 | return -1; |
1135 | } |
1136 | |
1137 | i = keynote_env_add(yyvsp[-2].string, yyvsp[0].string, &keynote_init_list, 1, 0); |
1138 | free(yyvsp[-2].string); |
1139 | free(yyvsp[0].string); |
1140 | |
1141 | if (i != RESULT_TRUE) |
1142 | return -1; |
1143 | } |
1144 | break; |
1145 | case 33: |
1146 | #line 230 "/usr/src/lib/libkeynote/keynote.y" |
1147 | { |
1148 | int i; |
1149 | |
1150 | keynote_lex_remove(yyvsp[-2].string); |
1151 | keynote_lex_remove(yyvsp[0].string); |
1152 | |
1153 | |
1154 | |
1155 | |
1156 | if (yyvsp[-2].string[0] == '_') |
1157 | { |
1158 | free(yyvsp[-2].string); |
1159 | free(yyvsp[0].string); |
1160 | keynote_errno = ERROR_SYNTAX; |
1161 | return -1; |
1162 | } |
1163 | |
1164 | |
1165 | if (keynote_env_lookup(yyvsp[-2].string, &keynote_init_list, 1) != NULL) |
1166 | { |
1167 | free(yyvsp[-2].string); |
1168 | free(yyvsp[0].string); |
1169 | keynote_errno = ERROR_SYNTAX; |
1170 | return -1; |
1171 | } |
1172 | |
1173 | i = keynote_env_add(yyvsp[-2].string, yyvsp[0].string, &keynote_init_list, 1, 0); |
1174 | free(yyvsp[-2].string); |
1175 | free(yyvsp[0].string); |
1176 | |
1177 | if (i != RESULT_TRUE) |
1178 | return -1; |
1179 | } |
1180 | break; |
1181 | case 35: |
1182 | #line 264 "/usr/src/lib/libkeynote/keynote.y" |
1183 | { |
1184 | keynote_returnvalue = yyvsp[0].intval; |
1185 | return 0; |
1186 | } |
1187 | break; |
1188 | case 36: |
1189 | #line 269 "/usr/src/lib/libkeynote/keynote.y" |
1190 | { yyval.intval = 0; } |
1191 | break; |
1192 | case 37: |
1193 | #line 270 "/usr/src/lib/libkeynote/keynote.y" |
1194 | { |
1195 | |
1196 | |
1197 | |
1198 | |
1199 | keynote_env_cleanup(&keynote_temp_list, 1); |
1200 | } |
1201 | break; |
1202 | case 38: |
1203 | #line 277 "/usr/src/lib/libkeynote/keynote.y" |
1204 | { |
1205 | if (yyvsp[-3].intval > yyvsp[0].intval) |
1206 | yyval.intval = yyvsp[-3].intval; |
1207 | else |
1208 | yyval.intval = yyvsp[0].intval; |
1209 | } |
1210 | break; |
1211 | case 39: |
1212 | #line 285 "/usr/src/lib/libkeynote/keynote.y" |
1213 | { |
1214 | if (checkexception(yyvsp[-2].bool)) |
1215 | yyval.intval = yyvsp[0].intval; |
1216 | else |
1217 | yyval.intval = 0; |
1218 | } |
1219 | break; |
1220 | case 40: |
1221 | #line 292 "/usr/src/lib/libkeynote/keynote.y" |
1222 | { |
1223 | if (checkexception(yyvsp[0].bool)) |
1224 | yyval.intval = keynote_current_session->ks_values_num - 1; |
1225 | else |
1226 | yyval.intval = 0; |
1227 | } |
1228 | break; |
1229 | case 41: |
1230 | #line 299 "/usr/src/lib/libkeynote/keynote.y" |
1231 | { if (keynote_exceptionflag || keynote_donteval) |
1232 | yyval.intval = 0; |
1233 | else |
1234 | { |
1235 | keynote_lex_remove(yyvsp[0].string); |
1236 | |
1237 | yyval.intval = keynote_retindex(yyvsp[0].string); |
1238 | if (yyval.intval == -1) |
1239 | yyval.intval = 0; |
1240 | |
1241 | free(yyvsp[0].string); |
1242 | } |
1243 | } |
1244 | break; |
1245 | case 42: |
1246 | #line 312 "/usr/src/lib/libkeynote/keynote.y" |
1247 | { yyval.intval = yyvsp[-1].intval; } |
1248 | break; |
1249 | case 43: |
1250 | #line 315 "/usr/src/lib/libkeynote/keynote.y" |
1251 | { yyval.bool = yyvsp[-1].bool; } |
1252 | break; |
1253 | case 44: |
1254 | #line 316 "/usr/src/lib/libkeynote/keynote.y" |
1255 | { if (yyvsp[-1].bool == 0) |
1256 | keynote_donteval = 1; |
1257 | } |
1258 | break; |
1259 | case 45: |
1260 | #line 318 "/usr/src/lib/libkeynote/keynote.y" |
1261 | { yyval.bool = (yyvsp[-3].bool && yyvsp[0].bool); |
1262 | keynote_donteval = 0; |
1263 | } |
1264 | break; |
1265 | case 46: |
1266 | #line 321 "/usr/src/lib/libkeynote/keynote.y" |
1267 | { if (yyvsp[-1].bool) |
1268 | keynote_donteval = 1; |
1269 | } |
1270 | break; |
1271 | case 47: |
1272 | #line 323 "/usr/src/lib/libkeynote/keynote.y" |
1273 | { yyval.bool = (yyvsp[-3].bool || yyvsp[0].bool); |
1274 | keynote_donteval = 0; |
1275 | } |
1276 | break; |
1277 | case 48: |
1278 | #line 326 "/usr/src/lib/libkeynote/keynote.y" |
1279 | { yyval.bool = !(yyvsp[0].bool); } |
1280 | break; |
1281 | case 49: |
1282 | #line 327 "/usr/src/lib/libkeynote/keynote.y" |
1283 | { yyval.bool = yyvsp[0].bool; } |
1284 | break; |
1285 | case 50: |
1286 | #line 328 "/usr/src/lib/libkeynote/keynote.y" |
1287 | { yyval.bool = yyvsp[0].bool; } |
1288 | break; |
1289 | case 51: |
1290 | #line 329 "/usr/src/lib/libkeynote/keynote.y" |
1291 | { yyval.bool = yyvsp[0].bool; } |
1292 | break; |
1293 | case 52: |
1294 | #line 330 "/usr/src/lib/libkeynote/keynote.y" |
1295 | { yyval.bool = 1; } |
1296 | break; |
1297 | case 53: |
1298 | #line 331 "/usr/src/lib/libkeynote/keynote.y" |
1299 | { yyval.bool = 0; } |
1300 | break; |
1301 | case 54: |
1302 | #line 333 "/usr/src/lib/libkeynote/keynote.y" |
1303 | { yyval.bool = yyvsp[-2].intval < yyvsp[0].intval; } |
1304 | break; |
1305 | case 55: |
1306 | #line 334 "/usr/src/lib/libkeynote/keynote.y" |
1307 | { yyval.bool = yyvsp[-2].intval > yyvsp[0].intval; } |
1308 | break; |
1309 | case 56: |
1310 | #line 335 "/usr/src/lib/libkeynote/keynote.y" |
1311 | { yyval.bool = yyvsp[-2].intval == yyvsp[0].intval; } |
1312 | break; |
1313 | case 57: |
1314 | #line 336 "/usr/src/lib/libkeynote/keynote.y" |
1315 | { yyval.bool = yyvsp[-2].intval <= yyvsp[0].intval; } |
1316 | break; |
1317 | case 58: |
1318 | #line 337 "/usr/src/lib/libkeynote/keynote.y" |
1319 | { yyval.bool = yyvsp[-2].intval >= yyvsp[0].intval; } |
1320 | break; |
1321 | case 59: |
1322 | #line 338 "/usr/src/lib/libkeynote/keynote.y" |
1323 | { yyval.bool = yyvsp[-2].intval != yyvsp[0].intval; } |
1324 | break; |
1325 | case 60: |
1326 | #line 340 "/usr/src/lib/libkeynote/keynote.y" |
1327 | { yyval.bool = yyvsp[-2].doubval < yyvsp[0].doubval; } |
1328 | break; |
1329 | case 61: |
1330 | #line 341 "/usr/src/lib/libkeynote/keynote.y" |
1331 | { yyval.bool = yyvsp[-2].doubval > yyvsp[0].doubval; } |
1332 | break; |
1333 | case 62: |
1334 | #line 342 "/usr/src/lib/libkeynote/keynote.y" |
1335 | { yyval.bool = yyvsp[-2].doubval <= yyvsp[0].doubval; } |
1336 | break; |
1337 | case 63: |
1338 | #line 343 "/usr/src/lib/libkeynote/keynote.y" |
1339 | { yyval.bool = yyvsp[-2].doubval >= yyvsp[0].doubval; } |
1340 | break; |
1341 | case 64: |
1342 | #line 345 "/usr/src/lib/libkeynote/keynote.y" |
1343 | { yyval.intval = yyvsp[-2].intval + yyvsp[0].intval; } |
1344 | break; |
1345 | case 65: |
1346 | #line 346 "/usr/src/lib/libkeynote/keynote.y" |
1347 | { yyval.intval = yyvsp[-2].intval - yyvsp[0].intval; } |
1348 | break; |
1349 | case 66: |
1350 | #line 347 "/usr/src/lib/libkeynote/keynote.y" |
1351 | { yyval.intval = yyvsp[-2].intval * yyvsp[0].intval; } |
1352 | break; |
1353 | case 67: |
1354 | #line 348 "/usr/src/lib/libkeynote/keynote.y" |
1355 | { if (yyvsp[0].intval == 0) |
1356 | { |
1357 | if (!keynote_donteval) |
1358 | keynote_exceptionflag = 1; |
1359 | } |
1360 | else |
1361 | yyval.intval = (yyvsp[-2].intval / yyvsp[0].intval); |
1362 | } |
1363 | break; |
1364 | case 68: |
1365 | #line 356 "/usr/src/lib/libkeynote/keynote.y" |
1366 | { if (yyvsp[0].intval == 0) |
1367 | { |
1368 | if (!keynote_donteval) |
1369 | keynote_exceptionflag = 1; |
1370 | } |
1371 | else |
1372 | yyval.intval = yyvsp[-2].intval % yyvsp[0].intval; |
1373 | } |
1374 | break; |
1375 | case 69: |
1376 | #line 364 "/usr/src/lib/libkeynote/keynote.y" |
1377 | { yyval.intval = intpow(yyvsp[-2].intval, yyvsp[0].intval); } |
1378 | break; |
1379 | case 70: |
1380 | #line 365 "/usr/src/lib/libkeynote/keynote.y" |
1381 | { yyval.intval = -(yyvsp[0].intval); } |
1382 | break; |
1383 | case 71: |
1384 | #line 366 "/usr/src/lib/libkeynote/keynote.y" |
1385 | { yyval.intval = yyvsp[-1].intval; } |
1386 | break; |
1387 | case 72: |
1388 | #line 367 "/usr/src/lib/libkeynote/keynote.y" |
1389 | { yyval.intval = yyvsp[0].intval; } |
1390 | break; |
1391 | case 73: |
1392 | #line 368 "/usr/src/lib/libkeynote/keynote.y" |
1393 | { if (keynote_exceptionflag || |
1394 | keynote_donteval) |
1395 | yyval.intval = 0; |
1396 | else |
1397 | { |
1398 | keynote_lex_remove(yyvsp[0].string); |
1399 | |
1400 | if (!isfloatstring(yyvsp[0].string)) |
1401 | yyval.intval = 0; |
1402 | else |
1403 | yyval.intval = (int) floor(atof(yyvsp[0].string)); |
1404 | free(yyvsp[0].string); |
1405 | } |
1406 | } |
1407 | break; |
1408 | case 74: |
1409 | #line 383 "/usr/src/lib/libkeynote/keynote.y" |
1410 | { yyval.doubval = (yyvsp[-2].doubval + yyvsp[0].doubval); } |
1411 | break; |
1412 | case 75: |
1413 | #line 384 "/usr/src/lib/libkeynote/keynote.y" |
1414 | { yyval.doubval = (yyvsp[-2].doubval - yyvsp[0].doubval); } |
1415 | break; |
1416 | case 76: |
1417 | #line 385 "/usr/src/lib/libkeynote/keynote.y" |
1418 | { yyval.doubval = (yyvsp[-2].doubval * yyvsp[0].doubval); } |
1419 | break; |
1420 | case 77: |
1421 | #line 386 "/usr/src/lib/libkeynote/keynote.y" |
1422 | { if (yyvsp[0].doubval == 0) |
1423 | { |
1424 | if (!keynote_donteval) |
1425 | keynote_exceptionflag = 1; |
1426 | } |
1427 | else |
1428 | yyval.doubval = (yyvsp[-2].doubval / yyvsp[0].doubval); |
1429 | } |
1430 | break; |
1431 | case 78: |
1432 | #line 394 "/usr/src/lib/libkeynote/keynote.y" |
1433 | { if (!keynote_exceptionflag && |
1434 | !keynote_donteval) |
1435 | yyval.doubval = pow(yyvsp[-2].doubval, yyvsp[0].doubval); |
1436 | } |
1437 | break; |
1438 | case 79: |
1439 | #line 398 "/usr/src/lib/libkeynote/keynote.y" |
1440 | { yyval.doubval = -(yyvsp[0].doubval); } |
1441 | break; |
1442 | case 80: |
1443 | #line 399 "/usr/src/lib/libkeynote/keynote.y" |
1444 | { yyval.doubval = yyvsp[-1].doubval; } |
1445 | break; |
1446 | case 81: |
1447 | #line 400 "/usr/src/lib/libkeynote/keynote.y" |
1448 | { yyval.doubval = yyvsp[0].doubval; } |
1449 | break; |
1450 | case 82: |
1451 | #line 401 "/usr/src/lib/libkeynote/keynote.y" |
1452 | { |
1453 | if (keynote_exceptionflag || |
1454 | keynote_donteval) |
1455 | yyval.doubval = 0.0; |
1456 | else |
1457 | { |
1458 | keynote_lex_remove(yyvsp[0].string); |
1459 | |
1460 | if (!isfloatstring(yyvsp[0].string)) |
1461 | yyval.doubval = 0.0; |
1462 | else |
1463 | yyval.doubval = atof(yyvsp[0].string); |
1464 | free(yyvsp[0].string); |
1465 | } |
1466 | } |
1467 | break; |
1468 | case 83: |
1469 | #line 417 "/usr/src/lib/libkeynote/keynote.y" |
1470 | { |
1471 | if (keynote_exceptionflag || keynote_donteval) |
1472 | yyval.bool = 0; |
1473 | else |
1474 | { |
1475 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) == 0 ? 1 : 0; |
1476 | keynote_lex_remove(yyvsp[-2].string); |
1477 | keynote_lex_remove(yyvsp[0].string); |
1478 | free(yyvsp[-2].string); |
1479 | free(yyvsp[0].string); |
1480 | } |
1481 | } |
1482 | break; |
1483 | case 84: |
1484 | #line 429 "/usr/src/lib/libkeynote/keynote.y" |
1485 | { |
1486 | if (keynote_exceptionflag || keynote_donteval) |
1487 | yyval.bool = 0; |
1488 | else |
1489 | { |
1490 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) != 0 ? 1 : 0; |
1491 | keynote_lex_remove(yyvsp[-2].string); |
1492 | keynote_lex_remove(yyvsp[0].string); |
1493 | free(yyvsp[-2].string); |
1494 | free(yyvsp[0].string); |
1495 | } |
1496 | } |
1497 | break; |
1498 | case 85: |
1499 | #line 441 "/usr/src/lib/libkeynote/keynote.y" |
1500 | { |
1501 | if (keynote_exceptionflag || keynote_donteval) |
1502 | yyval.bool = 0; |
1503 | else |
1504 | { |
1505 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) < 0 ? 1 : 0; |
1506 | keynote_lex_remove(yyvsp[-2].string); |
1507 | keynote_lex_remove(yyvsp[0].string); |
1508 | free(yyvsp[-2].string); |
1509 | free(yyvsp[0].string); |
1510 | } |
1511 | } |
1512 | break; |
1513 | case 86: |
1514 | #line 453 "/usr/src/lib/libkeynote/keynote.y" |
1515 | { |
1516 | if (keynote_exceptionflag || keynote_donteval) |
1517 | yyval.bool = 0; |
1518 | else |
1519 | { |
1520 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) > 0 ? 1 : 0; |
1521 | keynote_lex_remove(yyvsp[-2].string); |
1522 | keynote_lex_remove(yyvsp[0].string); |
1523 | free(yyvsp[-2].string); |
1524 | free(yyvsp[0].string); |
1525 | } |
1526 | } |
1527 | break; |
1528 | case 87: |
1529 | #line 465 "/usr/src/lib/libkeynote/keynote.y" |
1530 | { |
1531 | if (keynote_exceptionflag || keynote_donteval) |
1532 | yyval.bool = 0; |
1533 | else |
1534 | { |
1535 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) <= 0 ? 1 : 0; |
1536 | keynote_lex_remove(yyvsp[-2].string); |
1537 | keynote_lex_remove(yyvsp[0].string); |
1538 | free(yyvsp[-2].string); |
1539 | free(yyvsp[0].string); |
1540 | } |
1541 | } |
1542 | break; |
1543 | case 88: |
1544 | #line 477 "/usr/src/lib/libkeynote/keynote.y" |
1545 | { |
1546 | if (keynote_exceptionflag || keynote_donteval) |
1547 | yyval.bool = 0; |
1548 | else |
1549 | { |
1550 | yyval.bool = strcmp(yyvsp[-2].string, yyvsp[0].string) >= 0 ? 1 : 0; |
1551 | keynote_lex_remove(yyvsp[-2].string); |
1552 | keynote_lex_remove(yyvsp[0].string); |
1553 | free(yyvsp[-2].string); |
1554 | free(yyvsp[0].string); |
1555 | } |
1556 | } |
1557 | break; |
1558 | case 89: |
1559 | #line 490 "/usr/src/lib/libkeynote/keynote.y" |
1560 | { |
1561 | regmatch_t pmatch[32]; |
1562 | char grp[10], *gr; |
1563 | regex_t preg; |
1564 | int i; |
1565 | |
1566 | if (keynote_exceptionflag || keynote_donteval) |
1567 | yyval.bool = 0; |
1568 | else |
1569 | { |
1570 | keynote_lex_remove(yyvsp[-2].string); |
1571 | keynote_lex_remove(yyvsp[0].string); |
1572 | |
1573 | memset(pmatch, 0, sizeof(pmatch)); |
1574 | memset(grp, 0, sizeof(grp)); |
1575 | |
1576 | if (regcomp(&preg, yyvsp[0].string, REG_EXTENDED)) |
1577 | { |
1578 | free(yyvsp[-2].string); |
1579 | free(yyvsp[0].string); |
1580 | keynote_exceptionflag = 1; |
1581 | } |
1582 | else |
1583 | { |
1584 | |
1585 | keynote_env_cleanup(&keynote_temp_list, 1); |
1586 | |
1587 | free(yyvsp[0].string); |
1588 | i = regexec(&preg, yyvsp[-2].string, 32, pmatch, 0); |
1589 | yyval.bool = (i == 0 ? 1 : 0); |
1590 | if (i == 0) |
1591 | { |
1592 | snprintf(grp, sizeof grp, "%lu", |
1593 | (unsigned long)preg.re_nsub); |
1594 | if (keynote_env_add("_0", grp, &keynote_temp_list, |
1595 | 1, 0) != RESULT_TRUE) |
1596 | { |
1597 | free(yyvsp[-2].string); |
1598 | regfree(&preg); |
1599 | return -1; |
1600 | } |
1601 | |
1602 | for (i = 1; i < 32 && pmatch[i].rm_so != -1; i++) |
1603 | { |
1604 | gr = calloc(pmatch[i].rm_eo - pmatch[i].rm_so + |
1605 | 1, sizeof(char)); |
1606 | if (gr == NULL) |
1607 | { |
1608 | free(yyvsp[-2].string); |
1609 | regfree(&preg); |
1610 | keynote_errno = ERROR_MEMORY; |
1611 | return -1; |
1612 | } |
1613 | |
1614 | strncpy(gr, yyvsp[-2].string + pmatch[i].rm_so, |
1615 | pmatch[i].rm_eo - pmatch[i].rm_so); |
1616 | gr[pmatch[i].rm_eo - pmatch[i].rm_so] = '\0'; |
1617 | snprintf(grp, sizeof grp, "_%d", i); |
1618 | if (keynote_env_add(grp, gr, &keynote_temp_list, |
1619 | 1, 0) == -1) |
1620 | { |
1621 | free(yyvsp[-2].string); |
1622 | regfree(&preg); |
1623 | free(gr); |
1624 | return -1; |
1625 | } |
1626 | else |
1627 | free(gr); |
1628 | } |
1629 | } |
1630 | |
1631 | regfree(&preg); |
1632 | free(yyvsp[-2].string); |
1633 | } |
1634 | } |
1635 | } |
1636 | break; |
1637 | case 90: |
1638 | #line 567 "/usr/src/lib/libkeynote/keynote.y" |
1639 | { if (keynote_exceptionflag || keynote_donteval) |
| 36 | | Assuming 'keynote_exceptionflag' is 0 | |
|
| 37 | | Assuming 'keynote_donteval' is 0 | |
|
| |
1640 | yyval.string = NULL; |
1641 | else |
1642 | { |
1643 | int len = strlen(yyvsp[-2].string) + strlen(yyvsp[0].string) + 1; |
| 39 | | Null pointer passed as 1st argument to string length function |
|
1644 | yyval.string = calloc(len, sizeof(char)); |
1645 | keynote_lex_remove(yyvsp[-2].string); |
1646 | keynote_lex_remove(yyvsp[0].string); |
1647 | if (yyval.string == NULL) |
1648 | { |
1649 | free(yyvsp[-2].string); |
1650 | free(yyvsp[0].string); |
1651 | keynote_errno = ERROR_MEMORY; |
1652 | return -1; |
1653 | } |
1654 | snprintf(yyval.string, len, "%s%s", yyvsp[-2].string, yyvsp[0].string); |
1655 | free(yyvsp[-2].string); |
1656 | free(yyvsp[0].string); |
1657 | if (keynote_lex_add(yyval.string, LEXTYPE_CHAR) == -1) |
1658 | return -1; |
1659 | } |
1660 | } |
1661 | break; |
1662 | case 91: |
1663 | #line 589 "/usr/src/lib/libkeynote/keynote.y" |
1664 | { yyval.string = yyvsp[0].string; } |
1665 | break; |
1666 | case 92: |
1667 | #line 591 "/usr/src/lib/libkeynote/keynote.y" |
1668 | { yyval.string = yyvsp[0].string; } |
1669 | break; |
1670 | case 93: |
1671 | #line 592 "/usr/src/lib/libkeynote/keynote.y" |
1672 | { yyval.string = yyvsp[-1].string; } |
1673 | break; |
1674 | case 94: |
1675 | #line 593 "/usr/src/lib/libkeynote/keynote.y" |
1676 | { if (keynote_exceptionflag || keynote_donteval) |
1677 | yyval.string = NULL; |
1678 | else |
1679 | { |
1680 | yyval.string = my_lookup(yyvsp[0].string); |
1681 | keynote_lex_remove(yyvsp[0].string); |
1682 | free(yyvsp[0].string); |
1683 | if (yyval.string == NULL) |
1684 | { |
1685 | if (keynote_errno) |
1686 | return -1; |
1687 | yyval.string = strdup(""); |
1688 | } |
1689 | else |
1690 | yyval.string = strdup(yyval.string); |
1691 | |
1692 | if (yyval.string == NULL) |
1693 | { |
1694 | keynote_errno = ERROR_MEMORY; |
1695 | return -1; |
1696 | } |
1697 | |
1698 | if (keynote_lex_add(yyval.string, LEXTYPE_CHAR) == -1) |
1699 | return -1; |
1700 | } |
1701 | } |
1702 | break; |
1703 | case 95: |
1704 | #line 619 "/usr/src/lib/libkeynote/keynote.y" |
1705 | { if (keynote_exceptionflag || keynote_donteval) |
1706 | yyval.string = NULL; |
1707 | else |
1708 | { |
1709 | yyval.string = my_lookup(yyvsp[0].string); |
1710 | keynote_lex_remove(yyvsp[0].string); |
1711 | free(yyvsp[0].string); |
1712 | if (yyval.string == NULL) |
1713 | { |
1714 | if (keynote_errno) |
1715 | return -1; |
1716 | yyval.string = strdup(""); |
1717 | } |
1718 | else |
1719 | yyval.string = strdup(yyval.string); |
1720 | |
1721 | if (yyval.string == NULL) |
1722 | { |
1723 | keynote_errno = ERROR_MEMORY; |
1724 | return -1; |
1725 | } |
1726 | |
1727 | if (keynote_lex_add(yyval.string, LEXTYPE_CHAR) == -1) |
1728 | return -1; |
1729 | } |
1730 | } |
1731 | break; |
1732 | #line 1725 "k.tab.c" |
1733 | } |
1734 | yyssp -= yym; |
1735 | yystate = *yyssp; |
1736 | yyvsp -= yym; |
1737 | yym = yylhs[yyn]; |
1738 | if (yystate == 0 && yym == 0) |
| 25 | | Assuming 'yystate' is not equal to 0 | |
|
1739 | { |
1740 | #if YYDEBUG |
1741 | if (yydebug) |
1742 | printf("%sdebug: after reduction, shifting from state 0 to\ |
1743 | state %d\n", YYPREFIX, YYFINAL); |
1744 | #endif |
1745 | yystate = YYFINAL; |
1746 | *++yyssp = YYFINAL; |
1747 | *++yyvsp = yyval; |
1748 | if (yychar < 0) |
1749 | { |
1750 | if ((yychar = yylex()) < 0) yychar = 0; |
1751 | #if YYDEBUG |
1752 | if (yydebug) |
1753 | { |
1754 | yys = 0; |
1755 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
1756 | if (!yys) yys = "illegal-symbol"; |
1757 | printf("%sdebug: state %d, reading %d (%s)\n", |
1758 | YYPREFIX, YYFINAL, yychar, yys); |
1759 | } |
1760 | #endif |
1761 | } |
1762 | if (yychar == 0) goto yyaccept; |
1763 | goto yyloop; |
1764 | } |
1765 | if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && |
| |
1766 | yyn <= YYTABLESIZE && yycheck[yyn] == yystate) |
1767 | yystate = yytable[yyn]; |
1768 | else |
1769 | yystate = yydgoto[yym]; |
1770 | #if YYDEBUG |
1771 | if (yydebug) |
1772 | printf("%sdebug: after reduction, shifting from state %d \ |
1773 | to state %d\n", YYPREFIX, *yyssp, yystate); |
1774 | #endif |
1775 | if (yyssp >= yysslim && yygrowstack()) |
| 27 | | Assuming 'knssp' is < 'knsslim' | |
|
1776 | { |
1777 | goto yyoverflow; |
1778 | } |
1779 | *++yyssp = yystate; |
1780 | *++yyvsp = yyval; |
| 28 | | Null pointer value stored to field 'string' | |
|
1781 | goto yyloop; |
| 29 | | Control jumps to line 812 | |
|
1782 | yyoverflow: |
1783 | yyerror("yacc stack overflow"); |
1784 | yyabort: |
1785 | if (yyss) |
1786 | free(yyss); |
1787 | if (yyvs) |
1788 | free(yyvs); |
1789 | yyss = yyssp = NULL; |
1790 | yyvs = yyvsp = NULL; |
1791 | yystacksize = 0; |
1792 | return (1); |
1793 | yyaccept: |
1794 | if (yyss) |
1795 | free(yyss); |
1796 | if (yyvs) |
1797 | free(yyvs); |
1798 | yyss = yyssp = NULL; |
1799 | yyvs = yyvsp = NULL; |
1800 | yystacksize = 0; |
1801 | return (0); |
1802 | } |