This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix for [perl #40267] PerlIO::scalar doesn't respect readonly-ness
[perl5.git] / madly.act
1 case 2:
2 #line 102 "madly.y"
3     { (yyval.ival) = (yyvsp[-1].ival); newPROG(block_end((yyvsp[-1].ival),(yyvsp[0].opval))); ;}
4     break;
5
6   case 3:
7 #line 107 "madly.y"
8     { if (PL_copline > (line_t)((yyvsp[-3].tkval))->tk_lval.ival)
9                               PL_copline = (line_t)((yyvsp[-3].tkval))->tk_lval.ival;
10                           (yyval.opval) = block_end((yyvsp[-2].ival), (yyvsp[-1].opval));
11                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
12                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
13                         ;}
14     break;
15
16   case 4:
17 #line 116 "madly.y"
18     { (yyval.ival) = block_start(TRUE); ;}
19     break;
20
21   case 5:
22 #line 120 "madly.y"
23     { (yyval.ival) = (I32) allocmy("$_"); ;}
24     break;
25
26   case 6:
27 #line 124 "madly.y"
28     {
29                     PL_expect = XSTATE; (yyval.ival) = block_start(TRUE);
30                 ;}
31     break;
32
33   case 7:
34 #line 131 "madly.y"
35     { if (PL_copline > (line_t)((yyvsp[-3].tkval))->tk_lval.ival)
36                               PL_copline = (line_t)((yyvsp[-3].tkval))->tk_lval.ival;
37                           (yyval.opval) = block_end((yyvsp[-2].ival), (yyvsp[-1].opval));
38                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
39                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
40                         ;}
41     break;
42
43   case 8:
44 #line 140 "madly.y"
45     { (yyval.ival) = block_start(FALSE); ;}
46     break;
47
48   case 9:
49 #line 144 "madly.y"
50     { (yyval.ival) = PL_savestack_ix; ;}
51     break;
52
53   case 10:
54 #line 148 "madly.y"
55     { (yyval.opval) = Nullop; ;}
56     break;
57
58   case 11:
59 #line 151 "madly.y"
60     { (yyval.opval) = append_list(OP_LINESEQ,
61                                 (LISTOP*)(yyvsp[-1].opval), (LISTOP*)(yyvsp[0].opval)); ;}
62     break;
63
64   case 12:
65 #line 154 "madly.y"
66     {   LEAVE_SCOPE((yyvsp[-1].ival));
67                             (yyval.opval) = append_list(OP_LINESEQ,
68                                 (LISTOP*)(yyvsp[-2].opval), (LISTOP*)(yyvsp[0].opval));
69                             PL_pad_reset_pending = TRUE;
70                             if ((yyvsp[-2].opval) && (yyvsp[0].opval)) PL_hints |= HINT_BLOCK_SCOPE; ;}
71     break;
72
73   case 13:
74 #line 163 "madly.y"
75     { (yyval.opval) = newSTATEOP(0, ((yyvsp[-1].tkval))->tk_lval.pval, (yyvsp[0].opval));
76                           token_getmad((yyvsp[-1].tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;}
77     break;
78
79   case 15:
80 #line 167 "madly.y"
81     { (yyval.opval) = (yyvsp[0].opval); ;}
82     break;
83
84   case 16:
85 #line 169 "madly.y"
86     { (yyval.opval) = newSTATEOP(0, ((yyvsp[-1].tkval))->tk_lval.pval, (yyvsp[0].opval)); ;}
87     break;
88
89   case 17:
90 #line 171 "madly.y"
91     {
92                           if (((yyvsp[-1].tkval))->tk_lval.pval) {
93                               (yyval.opval) = newSTATEOP(0, ((yyvsp[-1].tkval))->tk_lval.pval, newOP(OP_NULL, 0));
94                               token_getmad((yyvsp[-1].tkval),(yyval.opval),'L');
95                               token_getmad((yyvsp[0].tkval),((LISTOP*)(yyval.opval))->op_first,';');
96                           }
97                           else {
98                               (yyval.opval) = newOP(OP_NULL, 0);
99                               PL_copline = NOLINE;
100                               token_free((yyvsp[-1].tkval));
101                               token_getmad((yyvsp[0].tkval),(yyval.opval),';');
102                           }
103                           PL_expect = XSTATE;
104                         ;}
105     break;
106
107   case 18:
108 #line 186 "madly.y"
109     { OP* op;
110                           (yyval.opval) = newSTATEOP(0, ((yyvsp[-2].tkval))->tk_lval.pval, (yyvsp[-1].opval));
111                           PL_expect = XSTATE;
112                           /* sideff might already have a nexstate */
113                           op = ((LISTOP*)(yyval.opval))->op_first;
114                           if (op) {
115                               while (op->op_sibling &&
116                                  op->op_sibling->op_type == OP_NEXTSTATE)
117                                     op = op->op_sibling;
118                               token_getmad((yyvsp[-2].tkval),op,'L');
119                               token_getmad((yyvsp[0].tkval),op,';');
120                           }
121                         ;}
122     break;
123
124   case 19:
125 #line 203 "madly.y"
126     { (yyval.opval) = Nullop; ;}
127     break;
128
129   case 20:
130 #line 205 "madly.y"
131     { (yyval.opval) = (yyvsp[0].opval); ;}
132     break;
133
134   case 21:
135 #line 207 "madly.y"
136     { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[0].opval), (yyvsp[-2].opval));
137                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'i');
138                         ;}
139     break;
140
141   case 22:
142 #line 211 "madly.y"
143     { (yyval.opval) = newLOGOP(OP_OR, 0, (yyvsp[0].opval), (yyvsp[-2].opval));
144                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'i');
145                         ;}
146     break;
147
148   case 23:
149 #line 215 "madly.y"
150     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((yyvsp[0].opval)), (yyvsp[-2].opval));
151                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'w');
152                         ;}
153     break;
154
155   case 24:
156 #line 219 "madly.y"
157     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (yyvsp[0].opval), (yyvsp[-2].opval));
158                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'w');
159                         ;}
160     break;
161
162   case 25:
163 #line 223 "madly.y"
164     { (yyval.opval) = newFOROP(0, Nullch, (line_t)((yyvsp[-1].tkval))->tk_lval.ival,
165                                         Nullop, (yyvsp[0].opval), (yyvsp[-2].opval), Nullop);
166                           token_getmad((yyvsp[-1].tkval),((LISTOP*)(yyval.opval))->op_first->op_sibling,'w');
167                         ;}
168     break;
169
170   case 26:
171 #line 231 "madly.y"
172     { (yyval.opval) = Nullop; ;}
173     break;
174
175   case 27:
176 #line 233 "madly.y"
177     { ((yyvsp[0].opval))->op_flags |= OPf_PARENS; (yyval.opval) = scope((yyvsp[0].opval));
178                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
179                         ;}
180     break;
181
182   case 28:
183 #line 237 "madly.y"
184     { PL_copline = (line_t)((yyvsp[-5].tkval))->tk_lval.ival;
185                             (yyval.opval) = newCONDOP(0, (yyvsp[-3].opval), scope((yyvsp[-1].opval)), (yyvsp[0].opval));
186                             PL_hints |= HINT_BLOCK_SCOPE;
187                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'I');
188                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'(');
189                           token_getmad((yyvsp[-2].tkval),(yyval.opval),')');
190                         ;}
191     break;
192
193   case 29:
194 #line 248 "madly.y"
195     { PL_copline = (line_t)((yyvsp[-6].tkval))->tk_lval.ival;
196                             (yyval.opval) = block_end((yyvsp[-4].ival),
197                                    newCONDOP(0, (yyvsp[-3].opval), scope((yyvsp[-1].opval)), (yyvsp[0].opval)));
198                           token_getmad((yyvsp[-6].tkval),(yyval.opval),'I');
199                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'(');
200                           token_getmad((yyvsp[-2].tkval),(yyval.opval),')');
201                         ;}
202     break;
203
204   case 30:
205 #line 256 "madly.y"
206     { PL_copline = (line_t)((yyvsp[-6].tkval))->tk_lval.ival;
207                             (yyval.opval) = block_end((yyvsp[-4].ival),
208                                    newCONDOP(0, (yyvsp[-3].opval), scope((yyvsp[-1].opval)), (yyvsp[0].opval)));
209                           token_getmad((yyvsp[-6].tkval),(yyval.opval),'I');
210                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'(');
211                           token_getmad((yyvsp[-2].tkval),(yyval.opval),')');
212                         ;}
213     break;
214
215   case 31:
216 #line 267 "madly.y"
217     { (yyval.opval) = block_end((yyvsp[-3].ival),
218                 newWHENOP((yyvsp[-2].opval), scope((yyvsp[0].opval)))); ;}
219     break;
220
221   case 32:
222 #line 270 "madly.y"
223     { (yyval.opval) = newWHENOP(0, scope((yyvsp[0].opval))); ;}
224     break;
225
226   case 33:
227 #line 275 "madly.y"
228     { (yyval.opval) = Nullop; ;}
229     break;
230
231   case 34:
232 #line 277 "madly.y"
233     { (yyval.opval) = scope((yyvsp[0].opval));
234                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
235                         ;}
236     break;
237
238   case 35:
239 #line 284 "madly.y"
240     { OP *innerop;
241                           PL_copline = (line_t)(yyvsp[-7].tkval);
242                             (yyval.opval) = block_end((yyvsp[-5].ival),
243                                    newSTATEOP(0, ((yyvsp[-8].tkval))->tk_lval.pval,
244                                      innerop = newWHILEOP(0, 1, (LOOP*)Nullop,
245                                                 ((yyvsp[-7].tkval))->tk_lval.ival, (yyvsp[-4].opval), (yyvsp[-1].opval), (yyvsp[0].opval), (yyvsp[-2].ival))));
246                           token_getmad((yyvsp[-8].tkval),innerop,'L');
247                           token_getmad((yyvsp[-7].tkval),innerop,'W');
248                           token_getmad((yyvsp[-6].tkval),innerop,'(');
249                           token_getmad((yyvsp[-3].tkval),innerop,')');
250                         ;}
251     break;
252
253   case 36:
254 #line 297 "madly.y"
255     { OP *innerop;
256                           PL_copline = (line_t)(yyvsp[-7].tkval);
257                             (yyval.opval) = block_end((yyvsp[-5].ival),
258                                    newSTATEOP(0, ((yyvsp[-8].tkval))->tk_lval.pval,
259                                      newWHILEOP(0, 1, (LOOP*)Nullop,
260                                                 ((yyvsp[-7].tkval))->tk_lval.ival, (yyvsp[-4].opval), (yyvsp[-1].opval), (yyvsp[0].opval), (yyvsp[-2].ival))));
261                           token_getmad((yyvsp[-8].tkval),innerop,'L');
262                           token_getmad((yyvsp[-7].tkval),innerop,'W');
263                           token_getmad((yyvsp[-6].tkval),innerop,'(');
264                           token_getmad((yyvsp[-3].tkval),innerop,')');
265                         ;}
266     break;
267
268   case 37:
269 #line 309 "madly.y"
270     { OP *innerop;
271                           (yyval.opval) = block_end((yyvsp[-6].ival),
272                              innerop = newFOROP(0, ((yyvsp[-9].tkval))->tk_lval.pval, (line_t)((yyvsp[-8].tkval))->tk_lval.ival, (yyvsp[-5].opval), (yyvsp[-3].opval), (yyvsp[-1].opval), (yyvsp[0].opval)));
273                           token_getmad((yyvsp[-9].tkval),((LISTOP*)innerop)->op_first,'L');
274                           token_getmad((yyvsp[-8].tkval),((LISTOP*)innerop)->op_first->op_sibling,'W');
275                           token_getmad((yyvsp[-7].tkval),((LISTOP*)innerop)->op_first->op_sibling,'d');
276                           token_getmad((yyvsp[-4].tkval),((LISTOP*)innerop)->op_first->op_sibling,'(');
277                           token_getmad((yyvsp[-2].tkval),((LISTOP*)innerop)->op_first->op_sibling,')');
278                         ;}
279     break;
280
281   case 38:
282 #line 319 "madly.y"
283     { OP *innerop;
284                           (yyval.opval) = block_end((yyvsp[-4].ival),
285                              innerop = newFOROP(0, ((yyvsp[-8].tkval))->tk_lval.pval, (line_t)((yyvsp[-7].tkval))->tk_lval.ival, mod((yyvsp[-6].opval), OP_ENTERLOOP),
286                                           (yyvsp[-3].opval), (yyvsp[-1].opval), (yyvsp[0].opval)));
287                           token_getmad((yyvsp[-8].tkval),((LISTOP*)innerop)->op_first,'L');
288                           token_getmad((yyvsp[-7].tkval),((LISTOP*)innerop)->op_first->op_sibling,'W');
289                           token_getmad((yyvsp[-5].tkval),((LISTOP*)innerop)->op_first->op_sibling,'(');
290                           token_getmad((yyvsp[-2].tkval),((LISTOP*)innerop)->op_first->op_sibling,')');
291                         ;}
292     break;
293
294   case 39:
295 #line 329 "madly.y"
296     { OP *innerop;
297                           (yyval.opval) = block_end((yyvsp[-4].ival),
298                              innerop = newFOROP(0, ((yyvsp[-7].tkval))->tk_lval.pval, (line_t)((yyvsp[-6].tkval))->tk_lval.ival, Nullop, (yyvsp[-3].opval), (yyvsp[-1].opval), (yyvsp[0].opval)));
299                           token_getmad((yyvsp[-7].tkval),((LISTOP*)innerop)->op_first,'L');
300                           token_getmad((yyvsp[-6].tkval),((LISTOP*)innerop)->op_first->op_sibling,'W');
301                           token_getmad((yyvsp[-5].tkval),((LISTOP*)innerop)->op_first->op_sibling,'(');
302                           token_getmad((yyvsp[-2].tkval),((LISTOP*)innerop)->op_first->op_sibling,')');
303                         ;}
304     break;
305
306   case 40:
307 #line 340 "madly.y"
308     { OP *forop;
309                           PL_copline = (line_t)((yyvsp[-10].tkval))->tk_lval.ival;
310                           forop = newSTATEOP(0, ((yyvsp[-11].tkval))->tk_lval.pval,
311                                             newWHILEOP(0, 1, (LOOP*)Nullop,
312                                                 ((yyvsp[-10].tkval))->tk_lval.ival, scalar((yyvsp[-5].opval)),
313                                                 (yyvsp[0].opval), (yyvsp[-2].opval), (yyvsp[-3].ival)));
314                           if (!(yyvsp[-7].opval))
315                                 (yyvsp[-7].opval) = newOP(OP_NULL, 0);
316                           forop = newUNOP(OP_NULL, 0, append_elem(OP_LINESEQ,
317                                 newSTATEOP(0,
318                                            (((yyvsp[-11].tkval))->tk_lval.pval
319                                            ?savepv(((yyvsp[-11].tkval))->tk_lval.pval):Nullch),
320                                            (yyvsp[-7].opval)),
321                                 forop));
322
323                           token_getmad((yyvsp[-10].tkval),forop,'3');
324                           token_getmad((yyvsp[-9].tkval),forop,'(');
325                           token_getmad((yyvsp[-6].tkval),forop,'1');
326                           token_getmad((yyvsp[-4].tkval),forop,'2');
327                           token_getmad((yyvsp[-1].tkval),forop,')');
328                           token_getmad((yyvsp[-11].tkval),forop,'L');
329                           (yyval.opval) = block_end((yyvsp[-8].ival), forop); ;}
330     break;
331
332   case 41:
333 #line 363 "madly.y"
334     { (yyval.opval) = newSTATEOP(0, ((yyvsp[-2].tkval))->tk_lval.pval,
335                                  newWHILEOP(0, 1, (LOOP*)Nullop,
336                                             NOLINE, Nullop, (yyvsp[-1].opval), (yyvsp[0].opval), 0));
337                           token_getmad((yyvsp[-2].tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;}
338     break;
339
340   case 42:
341 #line 371 "madly.y"
342     { PL_copline = (line_t) (yyvsp[-6].tkval);
343                             (yyval.opval) = block_end((yyvsp[-4].ival),
344                                 newSTATEOP(0, ((yyvsp[-7].tkval))->tk_lval.pval,
345                                     newGIVENOP((yyvsp[-2].opval), scope((yyvsp[0].opval)),
346                                         (PADOFFSET) (yyvsp[-3].ival)) )); ;}
347     break;
348
349   case 43:
350 #line 380 "madly.y"
351     { (yyval.ival) = (PL_min_intro_pending &&
352                             PL_max_intro_pending >=  PL_min_intro_pending);
353                           intro_my(); ;}
354     break;
355
356   case 44:
357 #line 386 "madly.y"
358     { (yyval.opval) = Nullop; ;}
359     break;
360
361   case 46:
362 #line 392 "madly.y"
363     { YYSTYPE tmplval;
364                           (void)scan_num("1", &tmplval);
365                           (yyval.opval) = tmplval.opval; ;}
366     break;
367
368   case 48:
369 #line 400 "madly.y"
370     { (yyval.opval) = invert(scalar((yyvsp[0].opval))); ;}
371     break;
372
373   case 49:
374 #line 405 "madly.y"
375     { (yyval.opval) = (yyvsp[0].opval); intro_my(); ;}
376     break;
377
378   case 50:
379 #line 409 "madly.y"
380     { (yyval.opval) = (yyvsp[0].opval); intro_my(); ;}
381     break;
382
383   case 51:
384 #line 413 "madly.y"
385     { (yyval.opval) = (yyvsp[0].opval); intro_my(); ;}
386     break;
387
388   case 52:
389 #line 418 "madly.y"
390     { YYSTYPE tmplval;
391                           tmplval.pval = Nullch;
392                           (yyval.tkval) = newTOKEN(OP_NULL, tmplval, 0); ;}
393     break;
394
395   case 54:
396 #line 426 "madly.y"
397     { (yyval.opval) = (yyvsp[0].opval); ;}
398     break;
399
400   case 55:
401 #line 428 "madly.y"
402     { (yyval.opval) = (yyvsp[0].opval); ;}
403     break;
404
405   case 56:
406 #line 430 "madly.y"
407     { (yyval.opval) = (yyvsp[0].opval); ;}
408     break;
409
410   case 57:
411 #line 432 "madly.y"
412     { (yyval.opval) = (yyvsp[0].opval); ;}
413     break;
414
415   case 58:
416 #line 434 "madly.y"
417     { (yyval.opval) = (yyvsp[0].opval); ;}
418     break;
419
420   case 59:
421 #line 436 "madly.y"
422     { (yyval.opval) = (yyvsp[0].opval); ;}
423     break;
424
425   case 60:
426 #line 440 "madly.y"
427     { (yyval.opval) = newOP(OP_NULL,0);
428                           token_getmad((yyvsp[0].tkval),(yyval.opval),'p');
429                         ;}
430     break;
431
432   case 61:
433 #line 446 "madly.y"
434     { SvREFCNT_inc(PL_compcv);
435                           (yyval.opval) = newFORM((yyvsp[-2].ival), (yyvsp[-1].opval), (yyvsp[0].opval));
436                           prepend_madprops((yyvsp[-3].tkval)->tk_mad, (yyval.opval), 'F');
437                           (yyvsp[-3].tkval)->tk_mad = 0;
438                           token_free((yyvsp[-3].tkval));
439                         ;}
440     break;
441
442   case 62:
443 #line 454 "madly.y"
444     { (yyval.opval) = (yyvsp[0].opval); ;}
445     break;
446
447   case 63:
448 #line 455 "madly.y"
449     { (yyval.opval) = Nullop; ;}
450     break;
451
452   case 64:
453 #line 460 "madly.y"
454     { SvREFCNT_inc(PL_compcv);
455                           (yyval.opval) = newMYSUB((yyvsp[-4].ival), (yyvsp[-3].opval), (yyvsp[-2].opval), (yyvsp[-1].opval), (yyvsp[0].opval));
456                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'d');
457                         ;}
458     break;
459
460   case 65:
461 #line 468 "madly.y"
462     { SvREFCNT_inc(PL_compcv);
463                           OP* o = newSVOP(OP_ANONCODE, 0,
464                             (SV*)newATTRSUB((yyvsp[-4].ival), (yyvsp[-3].opval), (yyvsp[-2].opval), (yyvsp[-1].opval), (yyvsp[0].opval)));
465                           (yyval.opval) = newOP(OP_NULL,0);
466                           op_getmad(o,(yyval.opval),'&');
467                           op_getmad((yyvsp[-3].opval),(yyval.opval),'n');
468                           op_getmad((yyvsp[-2].opval),(yyval.opval),'s');
469                           op_getmad((yyvsp[-1].opval),(yyval.opval),'a');
470                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'d');
471                           append_madprops((yyvsp[0].opval)->op_madprop, (yyval.opval), 0);
472                           (yyvsp[0].opval)->op_madprop = 0;
473                         ;}
474     break;
475
476   case 66:
477 #line 483 "madly.y"
478     { (yyval.ival) = start_subparse(FALSE, 0);
479                             SAVEFREESV(PL_compcv); ;}
480     break;
481
482   case 67:
483 #line 489 "madly.y"
484     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
485                             SAVEFREESV(PL_compcv); ;}
486     break;
487
488   case 68:
489 #line 494 "madly.y"
490     { (yyval.ival) = start_subparse(TRUE, 0);
491                             SAVEFREESV(PL_compcv); ;}
492     break;
493
494   case 69:
495 #line 499 "madly.y"
496     { const char *const name = SvPV_nolen_const(((SVOP*)(yyvsp[0].opval))->op_sv);
497                           if (strEQ(name, "BEGIN") || strEQ(name, "END")
498                               || strEQ(name, "INIT") || strEQ(name, "CHECK"))
499                               CvSPECIAL_on(PL_compcv);
500                           (yyval.opval) = (yyvsp[0].opval); ;}
501     break;
502
503   case 70:
504 #line 508 "madly.y"
505     { (yyval.opval) = Nullop; ;}
506     break;
507
508   case 72:
509 #line 514 "madly.y"
510     { (yyval.opval) = Nullop; ;}
511     break;
512
513   case 73:
514 #line 516 "madly.y"
515     { (yyval.opval) = (yyvsp[0].opval);
516                           token_getmad((yyvsp[-1].tkval),(yyval.opval),':');
517                         ;}
518     break;
519
520   case 74:
521 #line 520 "madly.y"
522     { (yyval.opval) = newOP(OP_NULL, 0);
523                           token_getmad((yyvsp[0].tkval),(yyval.opval),':');
524                         ;}
525     break;
526
527   case 75:
528 #line 527 "madly.y"
529     { (yyval.opval) = (yyvsp[0].opval);
530                           token_getmad((yyvsp[-1].tkval),(yyval.opval),':');
531                         ;}
532     break;
533
534   case 76:
535 #line 531 "madly.y"
536     { (yyval.opval) = newOP(OP_NULL, 0);
537                           token_getmad((yyvsp[0].tkval),(yyval.opval),':');
538                         ;}
539     break;
540
541   case 77:
542 #line 537 "madly.y"
543     { (yyval.opval) = (yyvsp[0].opval); ;}
544     break;
545
546   case 78:
547 #line 538 "madly.y"
548     { (yyval.opval) = newOP(OP_NULL,0); PL_expect = XSTATE;
549                           token_getmad((yyvsp[0].tkval),(yyval.opval),';');
550                         ;}
551     break;
552
553   case 79:
554 #line 544 "madly.y"
555     { (yyval.opval) = package((yyvsp[-1].opval));
556                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'o');
557                           token_getmad((yyvsp[0].tkval),(yyval.opval),';');
558                         ;}
559     break;
560
561   case 80:
562 #line 551 "madly.y"
563     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
564     break;
565
566   case 81:
567 #line 553 "madly.y"
568     { SvREFCNT_inc(PL_compcv);
569                           (yyval.opval) = utilize(((yyvsp[-6].tkval))->tk_lval.ival, (yyvsp[-5].ival), (yyvsp[-3].opval), (yyvsp[-2].opval), (yyvsp[-1].opval));
570                           token_getmad((yyvsp[-6].tkval),(yyval.opval),'o');
571                           token_getmad((yyvsp[0].tkval),(yyval.opval),';');
572                           if (PL_rsfp_filters && AvFILLp(PL_rsfp_filters) >= 0)
573                               append_madprops(newMADPROP('!', MAD_PV, "", 0), (yyval.opval), 0);
574                         ;}
575     break;
576
577   case 82:
578 #line 564 "madly.y"
579     { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
580                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
581                         ;}
582     break;
583
584   case 83:
585 #line 568 "madly.y"
586     { (yyval.opval) = newLOGOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
587                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
588                         ;}
589     break;
590
591   case 84:
592 #line 572 "madly.y"
593     { (yyval.opval) = newLOGOP(OP_DOR, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
594                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
595                         ;}
596     break;
597
598   case 86:
599 #line 580 "madly.y"
600     { OP* op = newNULLLIST();
601                           token_getmad((yyvsp[0].tkval),op,',');
602                           (yyval.opval) = append_elem(OP_LIST, (yyvsp[-1].opval), op);
603                         ;}
604     break;
605
606   case 87:
607 #line 585 "madly.y"
608     { 
609                           (yyvsp[0].opval) = newUNOP(OP_NULL, 0, (yyvsp[0].opval));
610                           token_getmad((yyvsp[-1].tkval),(yyvsp[0].opval),',');
611                           (yyval.opval) = append_elem(OP_LIST, (yyvsp[-2].opval), (yyvsp[0].opval));
612                         ;}
613     break;
614
615   case 89:
616 #line 595 "madly.y"
617     { (yyval.opval) = convert(((yyvsp[-2].tkval))->tk_lval.ival, OPf_STACKED,
618                                 prepend_elem(OP_LIST, newGVREF(((yyvsp[-2].tkval))->tk_lval.ival,(yyvsp[-1].opval)), (yyvsp[0].opval)) );
619                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'o');
620                         ;}
621     break;
622
623   case 90:
624 #line 600 "madly.y"
625     { (yyval.opval) = convert(((yyvsp[-4].tkval))->tk_lval.ival, OPf_STACKED,
626                                 prepend_elem(OP_LIST, newGVREF(((yyvsp[-4].tkval))->tk_lval.ival,(yyvsp[-2].opval)), (yyvsp[-1].opval)) );
627                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'o');
628                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'(');
629                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
630                         ;}
631     break;
632
633   case 91:
634 #line 607 "madly.y"
635     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
636                                 append_elem(OP_LIST,
637                                     prepend_elem(OP_LIST, scalar((yyvsp[-5].opval)), (yyvsp[-1].opval)),
638                                     newUNOP(OP_METHOD, 0, (yyvsp[-3].opval))));
639                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'A');
640                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
641                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
642                         ;}
643     break;
644
645   case 92:
646 #line 616 "madly.y"
647     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
648                                 append_elem(OP_LIST, scalar((yyvsp[-2].opval)),
649                                     newUNOP(OP_METHOD, 0, (yyvsp[0].opval))));
650                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'A');
651                         ;}
652     break;
653
654   case 93:
655 #line 622 "madly.y"
656     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
657                                 append_elem(OP_LIST,
658                                     prepend_elem(OP_LIST, (yyvsp[-1].opval), (yyvsp[0].opval)),
659                                     newUNOP(OP_METHOD, 0, (yyvsp[-2].opval))));
660                         ;}
661     break;
662
663   case 94:
664 #line 628 "madly.y"
665     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
666                                 append_elem(OP_LIST,
667                                     prepend_elem(OP_LIST, (yyvsp[-3].opval), (yyvsp[-1].opval)),
668                                     newUNOP(OP_METHOD, 0, (yyvsp[-4].opval))));
669                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
670                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
671                         ;}
672     break;
673
674   case 95:
675 #line 636 "madly.y"
676     { (yyval.opval) = convert(((yyvsp[-1].tkval))->tk_lval.ival, 0, (yyvsp[0].opval));
677                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
678                         ;}
679     break;
680
681   case 96:
682 #line 640 "madly.y"
683     { (yyval.opval) = convert(((yyvsp[-3].tkval))->tk_lval.ival, 0, (yyvsp[-1].opval));
684                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'o');
685                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
686                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
687                         ;}
688     break;
689
690   case 97:
691 #line 646 "madly.y"
692     { SvREFCNT_inc(PL_compcv);
693                           (yyvsp[0].opval) = newANONATTRSUB((yyvsp[-1].ival), 0, Nullop, (yyvsp[0].opval)); ;}
694     break;
695
696   case 98:
697 #line 649 "madly.y"
698     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
699                                  append_elem(OP_LIST,
700                                    prepend_elem(OP_LIST, (yyvsp[-2].opval), (yyvsp[0].opval)), (yyvsp[-4].opval)));
701                         ;}
702     break;
703
704   case 101:
705 #line 664 "madly.y"
706     { (yyval.opval) = newBINOP(OP_GELEM, 0, (yyvsp[-4].opval), scalar((yyvsp[-2].opval)));
707                             PL_expect = XOPERATOR;
708                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
709                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
710                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
711                         ;}
712     break;
713
714   case 102:
715 #line 671 "madly.y"
716     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((yyvsp[-3].opval)), scalar((yyvsp[-1].opval)));
717                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
718                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
719                         ;}
720     break;
721
722   case 103:
723 #line 676 "madly.y"
724     { (yyval.opval) = newBINOP(OP_AELEM, 0,
725                                         ref(newAVREF((yyvsp[-4].opval)),OP_RV2AV),
726                                         scalar((yyvsp[-1].opval)));
727                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'a');
728                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
729                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
730                         ;}
731     break;
732
733   case 104:
734 #line 684 "madly.y"
735     { (yyval.opval) = newBINOP(OP_AELEM, 0,
736                                         ref(newAVREF((yyvsp[-3].opval)),OP_RV2AV),
737                                         scalar((yyvsp[-1].opval)));
738                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
739                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
740                         ;}
741     break;
742
743   case 105:
744 #line 691 "madly.y"
745     { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((yyvsp[-4].opval)), jmaybe((yyvsp[-2].opval)));
746                             PL_expect = XOPERATOR;
747                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
748                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
749                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
750                         ;}
751     break;
752
753   case 106:
754 #line 698 "madly.y"
755     { (yyval.opval) = newBINOP(OP_HELEM, 0,
756                                         ref(newHVREF((yyvsp[-5].opval)),OP_RV2HV),
757                                         jmaybe((yyvsp[-2].opval)));
758                             PL_expect = XOPERATOR;
759                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'a');
760                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
761                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
762                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
763                         ;}
764     break;
765
766   case 107:
767 #line 708 "madly.y"
768     { (yyval.opval) = newBINOP(OP_HELEM, 0,
769                                         ref(newHVREF((yyvsp[-4].opval)),OP_RV2HV),
770                                         jmaybe((yyvsp[-2].opval)));
771                             PL_expect = XOPERATOR;
772                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
773                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
774                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
775                         ;}
776     break;
777
778   case 108:
779 #line 717 "madly.y"
780     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
781                                    newCVREF(0, scalar((yyvsp[-3].opval))));
782                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'a');
783                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
784                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
785                         ;}
786     break;
787
788   case 109:
789 #line 724 "madly.y"
790     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
791                                    append_elem(OP_LIST, (yyvsp[-1].opval),
792                                        newCVREF(0, scalar((yyvsp[-4].opval)))));
793                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'a');
794                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
795                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
796                         ;}
797     break;
798
799   case 110:
800 #line 733 "madly.y"
801     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
802                                    append_elem(OP_LIST, (yyvsp[-1].opval),
803                                                newCVREF(0, scalar((yyvsp[-3].opval)))));
804                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
805                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
806                         ;}
807     break;
808
809   case 111:
810 #line 740 "madly.y"
811     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
812                                    newCVREF(0, scalar((yyvsp[-2].opval))));
813                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
814                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
815                         ;}
816     break;
817
818   case 112:
819 #line 746 "madly.y"
820     { (yyval.opval) = newSLICEOP(0, (yyvsp[-1].opval), (yyvsp[-4].opval));
821                           token_getmad((yyvsp[-5].tkval),(yyval.opval),'(');
822                           token_getmad((yyvsp[-3].tkval),(yyval.opval),')');
823                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
824                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
825                         ;}
826     break;
827
828   case 113:
829 #line 753 "madly.y"
830     { (yyval.opval) = newSLICEOP(0, (yyvsp[-1].opval), Nullop);
831                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'(');
832                           token_getmad((yyvsp[-3].tkval),(yyval.opval),')');
833                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
834                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
835                         ;}
836     break;
837
838   case 114:
839 #line 763 "madly.y"
840     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (yyvsp[-2].opval), ((yyvsp[-1].tkval))->tk_lval.ival, (yyvsp[0].opval));
841                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
842                         ;}
843     break;
844
845   case 115:
846 #line 767 "madly.y"
847     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
848                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
849                         ;}
850     break;
851
852   case 116:
853 #line 771 "madly.y"
854     {   if (((yyvsp[-1].tkval))->tk_lval.ival != OP_REPEAT)
855                                 scalar((yyvsp[-2].opval));
856                             (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, (yyvsp[-2].opval), scalar((yyvsp[0].opval)));
857                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
858                         ;}
859     break;
860
861   case 117:
862 #line 777 "madly.y"
863     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
864                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
865                         ;}
866     break;
867
868   case 118:
869 #line 781 "madly.y"
870     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
871                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
872                         ;}
873     break;
874
875   case 119:
876 #line 785 "madly.y"
877     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
878                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
879                         ;}
880     break;
881
882   case 120:
883 #line 789 "madly.y"
884     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
885                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
886                         ;}
887     break;
888
889   case 121:
890 #line 793 "madly.y"
891     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
892                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
893                         ;}
894     break;
895
896   case 122:
897 #line 797 "madly.y"
898     { (yyval.opval) = newBINOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
899                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
900                         ;}
901     break;
902
903   case 123:
904 #line 801 "madly.y"
905     { UNOP *op;
906                           (yyval.opval) = newRANGE(((yyvsp[-1].tkval))->tk_lval.ival, scalar((yyvsp[-2].opval)), scalar((yyvsp[0].opval)));
907                           op = (UNOP*)(yyval.opval);
908                           op = (UNOP*)op->op_first;     /* get to flop */
909                           op = (UNOP*)op->op_first;     /* get to flip */
910                           op = (UNOP*)op->op_first;     /* get to range */
911                           token_getmad((yyvsp[-1].tkval),(OP*)op,'o');
912                         ;}
913     break;
914
915   case 124:
916 #line 810 "madly.y"
917     { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
918                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
919                         ;}
920     break;
921
922   case 125:
923 #line 814 "madly.y"
924     { (yyval.opval) = newLOGOP(OP_OR, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
925                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
926                         ;}
927     break;
928
929   case 126:
930 #line 818 "madly.y"
931     { (yyval.opval) = newLOGOP(OP_DOR, 0, (yyvsp[-2].opval), (yyvsp[0].opval));
932                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
933                         ;}
934     break;
935
936   case 127:
937 #line 822 "madly.y"
938     { (yyval.opval) = bind_match(((yyvsp[-1].tkval))->tk_lval.ival, (yyvsp[-2].opval), (yyvsp[0].opval));
939                           if ((yyval.opval)->op_type == OP_NOT)
940                               token_getmad((yyvsp[-1].tkval),((UNOP*)(yyval.opval))->op_first,'~');
941                             else
942                               token_getmad((yyvsp[-1].tkval),(yyval.opval),'~');
943                         ;}
944     break;
945
946   case 128:
947 #line 832 "madly.y"
948     { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((yyvsp[0].opval)));
949                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
950                         ;}
951     break;
952
953   case 129:
954 #line 836 "madly.y"
955     { (yyval.opval) = newUNOP(OP_NULL, 0, (yyvsp[0].opval));
956                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'+');
957                         ;}
958     break;
959
960   case 130:
961 #line 840 "madly.y"
962     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((yyvsp[0].opval)));
963                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
964                         ;}
965     break;
966
967   case 131:
968 #line 844 "madly.y"
969     { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((yyvsp[0].opval)));
970                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
971                         ;}
972     break;
973
974   case 132:
975 #line 848 "madly.y"
976     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
977                                         mod(scalar((yyvsp[-1].opval)), OP_POSTINC));
978                           token_getmad((yyvsp[0].tkval),(yyval.opval),'o');
979                         ;}
980     break;
981
982   case 133:
983 #line 853 "madly.y"
984     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
985                                         mod(scalar((yyvsp[-1].opval)), OP_POSTDEC));
986                           token_getmad((yyvsp[0].tkval),(yyval.opval),'o');
987                         ;}
988     break;
989
990   case 134:
991 #line 858 "madly.y"
992     { (yyval.opval) = newUNOP(OP_PREINC, 0,
993                                         mod(scalar((yyvsp[0].opval)), OP_PREINC));
994                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
995                         ;}
996     break;
997
998   case 135:
999 #line 863 "madly.y"
1000     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
1001                                         mod(scalar((yyvsp[0].opval)), OP_PREDEC));
1002                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1003                         ;}
1004     break;
1005
1006   case 136:
1007 #line 872 "madly.y"
1008     { (yyval.opval) = newANONLIST((yyvsp[-1].opval));
1009                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
1010                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
1011                         ;}
1012     break;
1013
1014   case 137:
1015 #line 877 "madly.y"
1016     { (yyval.opval) = newANONLIST(Nullop);
1017                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'[');
1018                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
1019                         ;}
1020     break;
1021
1022   case 138:
1023 #line 882 "madly.y"
1024     { (yyval.opval) = newANONHASH((yyvsp[-2].opval));
1025                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
1026                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
1027                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
1028                         ;}
1029     break;
1030
1031   case 139:
1032 #line 888 "madly.y"
1033     { (yyval.opval) = newANONHASH(Nullop);
1034                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'{');
1035                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
1036                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
1037                         ;}
1038     break;
1039
1040   case 140:
1041 #line 894 "madly.y"
1042     { SvREFCNT_inc(PL_compcv);
1043                           (yyval.opval) = newANONATTRSUB((yyvsp[-3].ival), (yyvsp[-2].opval), (yyvsp[-1].opval), (yyvsp[0].opval));
1044                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'o');
1045                           op_getmad((yyvsp[-2].opval),(yyval.opval),'s');
1046                           op_getmad((yyvsp[-1].opval),(yyval.opval),'a');
1047                         ;}
1048     break;
1049
1050   case 141:
1051 #line 905 "madly.y"
1052     { (yyval.opval) = dofile((yyvsp[0].opval), (yyvsp[-1].tkval));
1053                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1054                         ;}
1055     break;
1056
1057   case 142:
1058 #line 909 "madly.y"
1059     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, scope((yyvsp[0].opval)));
1060                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'D');
1061                         ;}
1062     break;
1063
1064   case 143:
1065 #line 913 "madly.y"
1066     { (yyval.opval) = newUNOP(OP_ENTERSUB,
1067                             OPf_SPECIAL|OPf_STACKED,
1068                             prepend_elem(OP_LIST,
1069                                 scalar(newCVREF(
1070                                     (OPpENTERSUB_AMPER<<8),
1071                                     scalar((yyvsp[-2].opval))
1072                                 )),Nullop)); dep();
1073                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'o');
1074                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1075                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1076                         ;}
1077     break;
1078
1079   case 144:
1080 #line 925 "madly.y"
1081     { (yyval.opval) = newUNOP(OP_ENTERSUB,
1082                             OPf_SPECIAL|OPf_STACKED,
1083                             append_elem(OP_LIST,
1084                                 (yyvsp[-1].opval),
1085                                 scalar(newCVREF(
1086                                     (OPpENTERSUB_AMPER<<8),
1087                                     scalar((yyvsp[-3].opval))
1088                                 )))); dep();
1089                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'o');
1090                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1091                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1092                         ;}
1093     break;
1094
1095   case 145:
1096 #line 938 "madly.y"
1097     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
1098                             prepend_elem(OP_LIST,
1099                                 scalar(newCVREF(0,scalar((yyvsp[-2].opval)))), Nullop)); dep();
1100                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'o');
1101                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1102                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1103                         ;}
1104     break;
1105
1106   case 146:
1107 #line 946 "madly.y"
1108     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
1109                             prepend_elem(OP_LIST,
1110                                 (yyvsp[-1].opval),
1111                                 scalar(newCVREF(0,scalar((yyvsp[-3].opval)))))); dep();
1112                           token_getmad((yyvsp[-4].tkval),(yyval.opval),'o');
1113                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1114                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1115                         ;}
1116     break;
1117
1118   case 151:
1119 #line 962 "madly.y"
1120     { (yyval.opval) = newCONDOP(0, (yyvsp[-4].opval), (yyvsp[-2].opval), (yyvsp[0].opval));
1121                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'?');
1122                           token_getmad((yyvsp[-1].tkval),(yyval.opval),':');
1123                         ;}
1124     break;
1125
1126   case 152:
1127 #line 967 "madly.y"
1128     { (yyval.opval) = newUNOP(OP_REFGEN, 0, mod((yyvsp[0].opval),OP_REFGEN));
1129                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1130                         ;}
1131     break;
1132
1133   case 153:
1134 #line 971 "madly.y"
1135     { (yyval.opval) = (yyvsp[0].opval); ;}
1136     break;
1137
1138   case 154:
1139 #line 973 "madly.y"
1140     { (yyval.opval) = localize((yyvsp[0].opval),((yyvsp[-1].tkval))->tk_lval.ival);
1141                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'d');
1142                         ;}
1143     break;
1144
1145   case 155:
1146 #line 977 "madly.y"
1147     { (yyval.opval) = sawparens(newUNOP(OP_NULL,0,(yyvsp[-1].opval)));
1148                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1149                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1150                         ;}
1151     break;
1152
1153   case 156:
1154 #line 982 "madly.y"
1155     { (yyval.opval) = sawparens(newNULLLIST());
1156                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1157                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1158                         ;}
1159     break;
1160
1161   case 157:
1162 #line 987 "madly.y"
1163     { (yyval.opval) = (yyvsp[0].opval); ;}
1164     break;
1165
1166   case 158:
1167 #line 989 "madly.y"
1168     { (yyval.opval) = (yyvsp[0].opval); ;}
1169     break;
1170
1171   case 159:
1172 #line 991 "madly.y"
1173     { (yyval.opval) = (yyvsp[0].opval); ;}
1174     break;
1175
1176   case 160:
1177 #line 993 "madly.y"
1178     { (yyval.opval) = (yyvsp[0].opval); ;}
1179     break;
1180
1181   case 161:
1182 #line 995 "madly.y"
1183     { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((yyvsp[0].opval), OP_AV2ARYLEN));;}
1184     break;
1185
1186   case 162:
1187 #line 997 "madly.y"
1188     { (yyval.opval) = (yyvsp[0].opval); ;}
1189     break;
1190
1191   case 163:
1192 #line 999 "madly.y"
1193     { (yyval.opval) = prepend_elem(OP_ASLICE,
1194                                 newOP(OP_PUSHMARK, 0),
1195                                     newLISTOP(OP_ASLICE, 0,
1196                                         list((yyvsp[-1].opval)),
1197                                         ref((yyvsp[-3].opval), OP_ASLICE)));
1198                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'[');
1199                           token_getmad((yyvsp[0].tkval),(yyval.opval),']');
1200                         ;}
1201     break;
1202
1203   case 164:
1204 #line 1008 "madly.y"
1205     { (yyval.opval) = prepend_elem(OP_HSLICE,
1206                                 newOP(OP_PUSHMARK, 0),
1207                                     newLISTOP(OP_HSLICE, 0,
1208                                         list((yyvsp[-2].opval)),
1209                                         ref(oopsHV((yyvsp[-4].opval)), OP_HSLICE)));
1210                             PL_expect = XOPERATOR;
1211                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'{');
1212                           token_getmad((yyvsp[-1].tkval),(yyval.opval),';');
1213                           token_getmad((yyvsp[0].tkval),(yyval.opval),'}');
1214                         ;}
1215     break;
1216
1217   case 165:
1218 #line 1019 "madly.y"
1219     { (yyval.opval) = (yyvsp[0].opval); ;}
1220     break;
1221
1222   case 166:
1223 #line 1021 "madly.y"
1224     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((yyvsp[0].opval))); ;}
1225     break;
1226
1227   case 167:
1228 #line 1023 "madly.y"
1229     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((yyvsp[-2].opval)));
1230                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1231                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1232                         ;}
1233     break;
1234
1235   case 168:
1236 #line 1028 "madly.y"
1237     { OP* op;
1238                           (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
1239                                 append_elem(OP_LIST, (yyvsp[-1].opval), scalar((yyvsp[-3].opval))));
1240                           op = (yyval.opval);
1241                           if (op->op_type == OP_CONST) { /* defeat const fold */
1242                             op = (OP*)op->op_madprop->mad_val;
1243                           }
1244                           token_getmad((yyvsp[-2].tkval),op,'(');
1245                           token_getmad((yyvsp[0].tkval),op,')');
1246                         ;}
1247     break;
1248
1249   case 169:
1250 #line 1039 "madly.y"
1251     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
1252                             append_elem(OP_LIST, (yyvsp[0].opval), scalar((yyvsp[-1].opval))));
1253                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'o');
1254                         ;}
1255     break;
1256
1257   case 170:
1258 #line 1044 "madly.y"
1259     { (yyval.opval) = newOP(((yyvsp[0].tkval))->tk_lval.ival, OPf_SPECIAL);
1260                             PL_hints |= HINT_BLOCK_SCOPE;
1261                           token_getmad((yyvsp[0].tkval),(yyval.opval),'o');
1262                         ;}
1263     break;
1264
1265   case 171:
1266 #line 1049 "madly.y"
1267     { (yyval.opval) = newLOOPEX(((yyvsp[-1].tkval))->tk_lval.ival,(yyvsp[0].opval));
1268                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1269                         ;}
1270     break;
1271
1272   case 172:
1273 #line 1053 "madly.y"
1274     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((yyvsp[0].opval)));
1275                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1276                         ;}
1277     break;
1278
1279   case 173:
1280 #line 1057 "madly.y"
1281     { (yyval.opval) = newOP(((yyvsp[0].tkval))->tk_lval.ival, 0);
1282                           token_getmad((yyvsp[0].tkval),(yyval.opval),'o');
1283                         ;}
1284     break;
1285
1286   case 174:
1287 #line 1061 "madly.y"
1288     { (yyval.opval) = newUNOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, (yyvsp[0].opval));
1289                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1290                         ;}
1291     break;
1292
1293   case 175:
1294 #line 1065 "madly.y"
1295     { (yyval.opval) = newUNOP(((yyvsp[-1].tkval))->tk_lval.ival, 0, (yyvsp[0].opval));
1296                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'o');
1297                         ;}
1298     break;
1299
1300   case 176:
1301 #line 1069 "madly.y"
1302     { (yyval.opval) = newOP(OP_REQUIRE, (yyvsp[0].tkval) ? OPf_SPECIAL : 0); ;}
1303     break;
1304
1305   case 177:
1306 #line 1071 "madly.y"
1307     { (yyval.opval) = newUNOP(OP_REQUIRE, (yyvsp[-1].tkval) ? OPf_SPECIAL : 0, (yyvsp[0].opval)); ;}
1308     break;
1309
1310   case 178:
1311 #line 1073 "madly.y"
1312     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
1313                             append_elem(OP_LIST, (yyvsp[0].opval), scalar((yyvsp[-1].opval)))); ;}
1314     break;
1315
1316   case 179:
1317 #line 1076 "madly.y"
1318     { (yyval.opval) = newOP(((yyvsp[0].tkval))->tk_lval.ival, 0);
1319                           token_getmad((yyvsp[0].tkval),(yyval.opval),'o');
1320                         ;}
1321     break;
1322
1323   case 180:
1324 #line 1080 "madly.y"
1325     { (yyval.opval) = newOP(((yyvsp[-2].tkval))->tk_lval.ival, 0);
1326                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'o');
1327                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1328                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1329                         ;}
1330     break;
1331
1332   case 181:
1333 #line 1086 "madly.y"
1334     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
1335                                 scalar((yyvsp[0].opval))); ;}
1336     break;
1337
1338   case 182:
1339 #line 1089 "madly.y"
1340     { (yyval.opval) = newOP(((yyvsp[-2].tkval))->tk_lval.ival, OPf_SPECIAL);
1341                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'o');
1342                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1343                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1344                         ;}
1345     break;
1346
1347   case 183:
1348 #line 1095 "madly.y"
1349     { (yyval.opval) = newUNOP(((yyvsp[-3].tkval))->tk_lval.ival, 0, (yyvsp[-1].opval));
1350                           token_getmad((yyvsp[-3].tkval),(yyval.opval),'o');
1351                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1352                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1353                         ;}
1354     break;
1355
1356   case 184:
1357 #line 1101 "madly.y"
1358     { (yyval.opval) = pmruntime((yyvsp[-3].opval), (yyvsp[-1].opval), 1);
1359                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1360                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1361                         ;}
1362     break;
1363
1364   case 187:
1365 #line 1111 "madly.y"
1366     { (yyval.opval) = my_attrs((yyvsp[-1].opval),(yyvsp[0].opval));
1367                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'d');
1368                           append_madprops((yyvsp[0].opval)->op_madprop, (yyval.opval), 'a');
1369                           (yyvsp[0].opval)->op_madprop = 0;
1370                         ;}
1371     break;
1372
1373   case 188:
1374 #line 1117 "madly.y"
1375     { (yyval.opval) = localize((yyvsp[0].opval),((yyvsp[-1].tkval))->tk_lval.ival);
1376                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'d');
1377                         ;}
1378     break;
1379
1380   case 189:
1381 #line 1124 "madly.y"
1382     { (yyval.opval) = sawparens((yyvsp[-1].opval));
1383                           token_getmad((yyvsp[-2].tkval),(yyval.opval),'(');
1384                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1385                         ;}
1386     break;
1387
1388   case 190:
1389 #line 1129 "madly.y"
1390     { (yyval.opval) = sawparens(newNULLLIST());
1391                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'(');
1392                           token_getmad((yyvsp[0].tkval),(yyval.opval),')');
1393                         ;}
1394     break;
1395
1396   case 191:
1397 #line 1134 "madly.y"
1398     { (yyval.opval) = (yyvsp[0].opval); ;}
1399     break;
1400
1401   case 192:
1402 #line 1136 "madly.y"
1403     { (yyval.opval) = (yyvsp[0].opval); ;}
1404     break;
1405
1406   case 193:
1407 #line 1138 "madly.y"
1408     { (yyval.opval) = (yyvsp[0].opval); ;}
1409     break;
1410
1411   case 194:
1412 #line 1143 "madly.y"
1413     { (yyval.opval) = Nullop; ;}
1414     break;
1415
1416   case 195:
1417 #line 1145 "madly.y"
1418     { (yyval.opval) = (yyvsp[0].opval); ;}
1419     break;
1420
1421   case 196:
1422 #line 1149 "madly.y"
1423     { (yyval.opval) = Nullop; ;}
1424     break;
1425
1426   case 197:
1427 #line 1151 "madly.y"
1428     { (yyval.opval) = (yyvsp[0].opval); ;}
1429     break;
1430
1431   case 198:
1432 #line 1153 "madly.y"
1433     { OP* op = newNULLLIST();
1434                           token_getmad((yyvsp[0].tkval),op,',');
1435                           (yyval.opval) = append_elem(OP_LIST, (yyvsp[-1].opval), op);
1436                         ;}
1437     break;
1438
1439   case 199:
1440 #line 1162 "madly.y"
1441     { PL_in_my = 0; (yyval.opval) = my((yyvsp[0].opval)); ;}
1442     break;
1443
1444   case 200:
1445 #line 1166 "madly.y"
1446     { (yyval.opval) = newCVREF(((yyvsp[-1].tkval))->tk_lval.ival,(yyvsp[0].opval));
1447                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'&');
1448                         ;}
1449     break;
1450
1451   case 201:
1452 #line 1172 "madly.y"
1453     { (yyval.opval) = newSVREF((yyvsp[0].opval));
1454                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'$');
1455                         ;}
1456     break;
1457
1458   case 202:
1459 #line 1178 "madly.y"
1460     { (yyval.opval) = newAVREF((yyvsp[0].opval));
1461                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'@');
1462                         ;}
1463     break;
1464
1465   case 203:
1466 #line 1184 "madly.y"
1467     { (yyval.opval) = newHVREF((yyvsp[0].opval));
1468                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'%');
1469                         ;}
1470     break;
1471
1472   case 204:
1473 #line 1190 "madly.y"
1474     { (yyval.opval) = newAVREF((yyvsp[0].opval));
1475                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'l');
1476                         ;}
1477     break;
1478
1479   case 205:
1480 #line 1196 "madly.y"
1481     { (yyval.opval) = newGVREF(0,(yyvsp[0].opval));
1482                           token_getmad((yyvsp[-1].tkval),(yyval.opval),'*');
1483                         ;}
1484     break;
1485
1486   case 206:
1487 #line 1203 "madly.y"
1488     { (yyval.opval) = scalar((yyvsp[0].opval)); ;}
1489     break;
1490
1491   case 207:
1492 #line 1205 "madly.y"
1493     { (yyval.opval) = scalar((yyvsp[0].opval)); ;}
1494     break;
1495
1496   case 208:
1497 #line 1207 "madly.y"
1498     { (yyval.opval) = scope((yyvsp[0].opval)); ;}
1499     break;
1500
1501   case 209:
1502 #line 1210 "madly.y"
1503     { (yyval.opval) = (yyvsp[0].opval); ;}
1504     break;
1505
1506
1507       default: break;
1508