1 /* $Id: swf4compiler.y,v 1.1 2004/02/02 10:12:34 kramm Exp $ */
13 #define YYPARSE_PARAM buffer
20 SWFActionFunction function
;
21 SWFGetUrl2Method getURLMethod
;
71 /* high level functions */
74 /* these three are strdup'ed in compiler.flex, so free them here */
77 %token
<str
> IDENTIFIER
80 %token
<getURLMethod
> GETURL_METHOD
101 /* ascending order of ops ..? */
103 %right
'=' "*=" "/=" "+=" "-="
106 %left
"==" "!=" "===" "!=="
107 %left
'<' '>' "<=" ">=" "<=>"
111 %right
"++" "--" UMINUS
'!'
118 %type
<action
> statements
119 %type
<action
> if_stmt
120 %type
<action
> iter_stmt
121 %type
<action
> cont_stmt
122 %type
<action
> break_stmt
123 %type
<action
> expr_opt
124 %type
<action
> void_function_call
125 %type
<action
> function_call
126 %type
<action
> lhs_expr
127 %type
<action
> pf_expr
128 %type
<action
> rhs_expr
129 %type
<action
> assign_stmt
130 %type
<action
> assign_stmts
131 %type
<action
> assign_stmts_opt
133 %type
<action
> program
135 /* make sure to free these, too! */
145 { *((Buffer
*)buffer
) = $1; }
152 { bufferConcat
($1, $2); }
160 : '{' '}' { $$
= NULL
; }
161 |
'{' statements
'}' { $$
= $2; }
172 | assign_stmts
',' assign_stmt
{ bufferConcat
($1, $3); }
176 : /* empty */ { $$
= NULL
; }
179 { bufferConcat
($1, $2); }
183 /* XXX- I haven't tested the frameloaded() stuff yet.. */
185 : IF
'(' FRAMELOADED
'(' NUMBER
')' ')' stmt ELSE stmt
187 bufferWriteU8
($$
, SWFACTION_WAITFORFRAME
);
188 bufferWriteS16
($$
, 3);
189 bufferWriteS16
($$
, atoi
($5));
191 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
192 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
193 bufferWriteS16
($$
, 2);
194 bufferWriteS16
($$
, bufferLength
($10)+5);
195 bufferConcat
($$
, $10); /* ..here */
196 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
197 bufferWriteS16
($$
, 2);
198 bufferWriteS16
($$
, bufferLength
($8));
199 bufferConcat
($$
, $8); }
201 | IF
'(' FRAMELOADED
'(' NUMBER
')' ')' stmt
203 bufferWriteU8
($$
, SWFACTION_WAITFORFRAME
);
204 bufferWriteS16
($$
, 3);
205 bufferWriteS16
($$
, atoi
($5));
207 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
208 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
209 bufferWriteS16
($$
, 2);
210 bufferWriteS16
($$
, 5);
211 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
); /* ..here */
212 bufferWriteS16
($$
, 2);
213 bufferWriteS16
($$
, bufferLength
($8)); /* ..and then out */
214 bufferConcat
($$
, $8); }
216 /* make this case cleaner.. */
217 | IF
'(' '!' FRAMELOADED
'(' NUMBER
')' ')' stmt
219 bufferWriteU8
($$
, SWFACTION_WAITFORFRAME
);
220 bufferWriteS16
($$
, 3);
221 bufferWriteS16
($$
, atoi
($6));
223 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
224 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
225 bufferWriteS16
($$
, 2);
226 bufferWriteS16
($$
, bufferLength
($9));
227 bufferConcat
($$
, $9); } /* ..here */
229 | IF
'(' FRAMELOADED
'(' expr
')' ')' stmt ELSE stmt
231 bufferWriteU8
($$
, SWFACTION_WAITFORFRAMEEXPRESSION
);
232 bufferWriteS16
($$
, 1);
233 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
234 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
235 bufferWriteS16
($$
, 2);
236 bufferWriteS16
($$
, bufferLength
($10)+5);
237 bufferConcat
($$
, $10); /* ..here */
238 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
239 bufferWriteS16
($$
, 2);
240 bufferWriteS16
($$
, bufferLength
($8));
241 bufferConcat
($$
, $8); }
243 | IF
'(' FRAMELOADED
'(' expr
')' ')' stmt
245 bufferWriteU8
($$
, SWFACTION_WAITFORFRAMEEXPRESSION
);
246 bufferWriteS16
($$
, 1);
247 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
248 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
249 bufferWriteS16
($$
, 2);
250 bufferWriteS16
($$
, 5);
251 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
); /* ..here */
252 bufferWriteS16
($$
, 2);
253 bufferWriteS16
($$
, bufferLength
($8)); /* ..and then out */
254 bufferConcat
($$
, $8); }
256 /* make this case cleaner.. */
257 | IF
'(' '!' FRAMELOADED
'(' expr
')' ')' stmt
259 bufferWriteU8
($$
, SWFACTION_WAITFORFRAMEEXPRESSION
);
260 bufferWriteS16
($$
, 1);
261 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
262 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
263 bufferWriteS16
($$
, 2);
264 bufferWriteS16
($$
, bufferLength
($9));
265 bufferConcat
($$
, $9); } /* ..here */
267 | IF
'(' expr
')' stmt ELSE stmt
268 { bufferWriteU8
($3, SWFACTION_BRANCHIFTRUE
);
269 bufferWriteS16
($3, 2);
270 bufferWriteS16
($3, bufferLength
($7)+5);
271 bufferConcat
($3, $7);
272 bufferWriteU8
($3, SWFACTION_BRANCHALWAYS
);
273 bufferWriteS16
($3, 2);
274 bufferWriteS16
($3, bufferLength
($5));
275 bufferConcat
($3, $5);
278 | IF
'(' expr
')' stmt
279 { bufferWriteU8
($3, SWFACTION_LOGICALNOT
);
280 bufferWriteU8
($3, SWFACTION_BRANCHIFTRUE
);
281 bufferWriteS16
($3, 2);
282 bufferWriteS16
($3, bufferLength
($5));
283 bufferConcat
($3, $5);
288 : /* empty */ { $$
= NULL
; }
292 /* not thought out yet..
294 : SWITCH '(' expr ')' '{'
298 { bufferConcat($$, $7); }
302 : switch_cases switch_case
307 : CASE INTEGER ':' stmt
308 { $$ = newBuffer(); }
313 : WHILE
'(' '!' FRAMELOADED
'(' NUMBER
')' ')' stmt
315 bufferWriteU8
($$
, SWFACTION_WAITFORFRAME
);
316 bufferWriteS16
($$
, 3);
317 bufferWriteS16
($$
, atoi
($6));
319 bufferWriteU8
($$
, 1); /* if not loaded, jump to.. */
320 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
321 bufferWriteS16
($$
, 2);
322 bufferWriteS16
($$
, bufferLength
($9)+5);
323 bufferConcat
($$
, $9); /* ..here */
324 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
325 bufferWriteS16
($$
, 2);
326 bufferWriteS16
($$
, -(bufferLength
($$
)+2)); }
328 | WHILE
'(' expr
')' stmt
330 bufferWriteU8
($$
, SWFACTION_LOGICALNOT
);
331 bufferWriteU8
($$
, SWFACTION_BRANCHIFTRUE
);
332 bufferWriteS16
($$
, 2);
333 bufferWriteS16
($$
, bufferLength
($5)+5);
334 bufferConcat
($$
, $5);
335 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
336 bufferWriteS16
($$
, 2);
337 bufferWriteS16
($$
, -(bufferLength
($$
)+2));
338 bufferResolveJumps
($$
); }
340 | DO stmt WHILE
'(' expr
')'
342 bufferConcat
($$
, $5);
343 bufferWriteU8
($$
, SWFACTION_BRANCHIFTRUE
);
344 bufferWriteS16
($$
, 2);
345 bufferWriteS16
($$
, -(bufferLength
($$
)+2));
346 bufferResolveJumps
($$
); }
348 | FOR
'(' assign_stmts_opt
';' expr_opt
';' assign_stmts_opt
')' stmt
352 bufferWriteU8
($5, SWFACTION_LOGICALNOT
);
353 bufferWriteU8
($5, SWFACTION_BRANCHIFTRUE
);
354 bufferWriteS16
($5, 2);
355 bufferWriteS16
($5, bufferLength
($9)+bufferLength
($7)+5);
357 bufferConcat
($5, $9);
358 bufferConcat
($5, $7);
359 bufferWriteU8
($5, SWFACTION_BRANCHALWAYS
);
360 bufferWriteS16
($5, 2);
361 bufferWriteS16
($5, -(bufferLength
($5)+2));
362 bufferResolveJumps
($5);
364 if
(!$$
) $$
= newBuffer
();
365 bufferConcat
($$
, $5);
370 : /* empty */ { $$
= NULL
; }
377 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
378 bufferWriteS16
($$
, 2);
379 bufferWriteS16
($$
, MAGIC_CONTINUE_NUMBER
); }
385 bufferWriteU8
($$
, SWFACTION_BRANCHALWAYS
);
386 bufferWriteS16
($$
, 2);
387 bufferWriteS16
($$
, MAGIC_BREAK_NUMBER
); }
391 : STOPDRAG
'(' ')' /* no args */
393 bufferWriteU8
($$
, SWFACTION_STOPDRAGMOVIE
); }
395 | CALLFRAME
'(' variable
')'
397 bufferWriteString
($$
, $3, strlen
($3)+1);
398 bufferWriteU8
($$
, SWFACTION_CALLFRAME
);
399 bufferWriteS16
($$
, 0);
402 | CALLFRAME
'(' STRING
')'
404 bufferWriteString
($$
, $3, strlen
($3)+1);
405 bufferWriteU8
($$
, SWFACTION_CALLFRAME
);
406 bufferWriteS16
($$
, 0);
409 | REMOVECLIP
'(' expr
')'
411 bufferWriteU8
($$
, SWFACTION_REMOVECLIP
); }
415 bufferWriteU8
($$
, SWFACTION_TRACE
); }
417 /* getURL2(url, window, [method]) */
418 | GETURL
'(' expr
',' expr
')'
420 bufferConcat
($$
, $5);
421 bufferWriteU8
($$
, SWFACTION_GETURL2
);
422 bufferWriteS16
($$
, 1);
423 bufferWriteU8
($$
, GETURL_METHOD_NOSEND
); }
425 | GETURL
'(' expr
',' expr
',' GETURL_METHOD
')'
427 bufferConcat
($$
, $5);
428 bufferWriteU8
($$
, SWFACTION_GETURL2
);
429 bufferWriteS16
($$
, 1);
430 bufferWriteU8
($$
, $7); }
432 | GETURL1
'(' STRING
',' STRING
')'
434 bufferWriteU8
($$
, SWFACTION_GETURL
);
435 bufferWriteS16
($$
, strlen
($3) + strlen
($5) + 2);
436 bufferWriteHardString
($$
, (byte
*)$3, strlen
($3));
437 bufferWriteU8
($$
, 0);
438 bufferWriteHardString
($$
, (byte
*)$5, strlen
($5));
439 bufferWriteU8
($$
, 0); }
441 | LOADMOVIE
'(' expr
',' expr
')'
443 bufferConcat
($$
, $5);
444 bufferWriteU8
($$
, SWFACTION_GETURL2
);
445 bufferWriteS16
($$
, 1);
446 bufferWriteU8
($$
, GETURL_METHOD_NOSEND | GETURL_LOADMOVIE
); }
448 | LOADMOVIE
'(' expr
',' expr
',' GETURL_METHOD
')'
450 bufferConcat
($$
, $5);
451 bufferWriteU8
($$
, SWFACTION_GETURL2
);
452 bufferWriteS16
($$
, 1);
453 bufferWriteU8
($$
, $7 | GETURL_LOADMOVIE
); }
455 | LOADVARIABLES
'(' expr
',' expr
')'
457 bufferConcat
($$
, $5);
458 bufferWriteU8
($$
, SWFACTION_GETURL2
);
459 bufferWriteS16
($$
, 1);
460 bufferWriteU8
($$
, GETURL_METHOD_NOSEND | GETURL_LOADVARIABLES
); }
462 | LOADVARIABLES
'(' expr
',' expr
',' GETURL_METHOD
')'
464 bufferConcat
($$
, $5);
465 bufferWriteU8
($$
, SWFACTION_GETURL2
);
466 bufferWriteS16
($$
, 1);
467 bufferWriteU8
($$
, $7 | GETURL_LOADVARIABLES
); }
469 /* startDrag(target, lock, [left, right, top, bottom]) */
470 | STARTDRAG
'(' expr
',' expr
')'
472 bufferWriteString
($$
, "0", 2); /* no constraint */
473 bufferConcat
($$
, $5);
474 bufferConcat
($$
, $3);
475 bufferWriteU8
($$
, SWFACTION_STARTDRAGMOVIE
); }
477 | STARTDRAG
'(' expr
',' expr
',' expr
',' expr
',' expr
',' expr
')'
479 bufferConcat
($$
, $7);
480 bufferConcat
($$
, $11);
481 bufferConcat
($$
, $9);
482 bufferConcat
($$
, $13);
483 bufferWriteString
($$
, "1", 2); /* has constraint */
484 bufferConcat
($$
, $5);
485 bufferConcat
($$
, $3);
486 bufferWriteU8
($$
, SWFACTION_STARTDRAGMOVIE
); }
488 /* duplicateClip(target, new, depth) */
489 | DUPLICATECLIP
'(' expr
',' expr
',' expr
')'
491 bufferConcat
($$
, $5);
492 bufferConcat
($$
, $7);
493 bufferWriteWTHITProperty
($$
);
494 bufferWriteU8
($$
, SWFACTION_ADD
); /* see docs for explanation */
495 bufferWriteU8
($$
, SWFACTION_DUPLICATECLIP
); }
500 bufferWriteU8
($$
, SWFACTION_NEXTFRAME
); }
504 bufferWriteU8
($$
, SWFACTION_PREVFRAME
); }
508 bufferWriteU8
($$
, SWFACTION_PLAY
); }
512 bufferWriteU8
($$
, SWFACTION_STOP
); }
514 | TOGGLEQUALITY
'(' ')'
516 bufferWriteU8
($$
, SWFACTION_TOGGLEQUALITY
); }
520 bufferWriteU8
($$
, SWFACTION_STOPSOUNDS
); }
522 | GOTOFRAME
'(' NUMBER
')'
524 bufferWriteU8
($$
, SWFACTION_GOTOFRAME
);
525 bufferWriteS16
($$
, 2);
526 bufferWriteS16
($$
, atoi
($3));
529 | GOTOFRAME
'(' STRING
')'
531 bufferWriteU8
($$
, SWFACTION_GOTOLABEL
);
532 bufferWriteS16
($$
, strlen
($3)+1);
533 bufferWriteHardString
($$
, (byte
*)$3, strlen
($3)+1);
536 | GOTOFRAME
'(' expr
')'
538 bufferWriteU8
($$
, SWFACTION_GOTOEXPRESSION
);
539 bufferWriteS16
($$
, 1);
540 bufferWriteU8
($$
, 0); } /* XXX - and stop */
542 | GOTOANDPLAY
'(' expr
')'
544 bufferWriteU8
($$
, SWFACTION_GOTOEXPRESSION
);
545 bufferWriteS16
($$
, 1);
546 bufferWriteU8
($$
, 1); } /* XXX - and play */
548 | SETTARGET
'(' STRING
')'
550 bufferWriteU8
($$
, SWFACTION_SETTARGET
);
551 bufferWriteS16
($$
, strlen
($3)+1);
552 bufferWriteHardString
($$
, (byte
*)$3, strlen
($3)+1);
555 | SETTARGET
'(' expr
')'
557 bufferWriteU8
($$
, SWFACTION_SETTARGETEXPRESSION
); }
559 | TELLTARGET
'(' STRING
')' stmt
561 /* SetTarget(STRING) */
562 bufferWriteU8
($$
, SWFACTION_SETTARGET
);
563 bufferWriteS16
($$
, strlen
($3)+1);
564 bufferWriteHardString
($$
, (byte
*)$3, strlen
($3)+1);
566 bufferConcat
($$
, $5);
568 bufferWriteU8
($$
, SWFACTION_SETTARGET
);
569 bufferWriteS16
($$
, 1);
570 bufferWriteU8
($$
, 0);
573 | TELLTARGET
'(' expr
')' stmt
575 /* SetTarget(expr) */
576 bufferWriteU8
($$
, SWFACTION_SETTARGETEXPRESSION
);
578 bufferConcat
($$
, $5);
580 bufferWriteU8
($$
, SWFACTION_SETTARGET
);
581 bufferWriteS16
($$
, 1);
582 bufferWriteU8
($$
, 0); }
588 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
); }
592 bufferWriteU8
($$
, SWFACTION_GETTIMER
); }
594 | RANDOM
'(' expr
')'
596 bufferWriteU8
($$
, SWFACTION_RANDOM
); }
598 | LENGTH
'(' expr
')'
600 bufferWriteU8
($$
, SWFACTION_STRINGLENGTH
); }
604 bufferWriteU8
($$
, SWFACTION_INT
); }
608 bufferWriteU8
($$
, SWFACTION_ORD
); }
612 bufferWriteU8
($$
, SWFACTION_CHR
); }
614 | CONCAT
'(' expr
',' expr
')'
616 bufferConcat
($$
, $5);
617 bufferWriteU8
($$
, SWFACTION_STRINGCONCAT
); }
619 | SUBSTR
'(' expr
',' expr
',' expr
')'
621 bufferConcat
($$
, $5);
622 bufferConcat
($$
, $7);
623 bufferWriteU8
($$
, SWFACTION_SUBSTRING
); }
625 | GETPROPERTY
'(' expr
',' STRING
')'
627 bufferConcat
($$
, $3);
628 bufferWriteGetProperty
($$
, $5);
629 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
634 : lhs_expr
"++" %prec POSTFIX
636 bufferWriteBuffer
($$
, $1);
637 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
638 bufferWriteBuffer
($$
, $1);
639 bufferConcat
($$
, $1);
640 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
641 bufferWriteString
($$
, "1", 2);
642 bufferWriteU8
($$
, SWFACTION_ADD
);
643 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
); }
645 | lhs_expr
"--" %prec POSTFIX
647 bufferWriteBuffer
($$
, $1);
648 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
649 bufferWriteBuffer
($$
, $1);
650 bufferConcat
($$
, $1);
651 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
652 bufferWriteString
($$
, "1", 2);
653 bufferWriteU8
($$
, SWFACTION_SUBTRACT
);
654 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
); }
657 /* these leave a value on the stack */
666 bufferWriteString
($$
, $1, strlen
($1)+1);
669 |
'-' NUMBER %prec NEGATE
671 bufferWriteString
($$
, "-", 2);
672 bufferWriteString
($$
, $2, strlen
($2)+1);
677 bufferWriteString
($$
, $1, strlen
($1)+1);
682 bufferWriteString
($$
, $1, strlen
($1)+1);
683 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
688 bufferWriteString
($$
, $1, strlen
($1)+1);
691 | sprite
'.' IDENTIFIER
693 bufferWriteString
($$
, $1, strlen
($1)+1);
694 bufferWriteGetProperty
($$
, $3);
695 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
699 |
"++" sprite
'.' IDENTIFIER
701 bufferWriteString
($$
, $2, strlen
($2)+1);
702 bufferWriteGetProperty
($$
, $4);
703 bufferWriteString
($$
, $2, strlen
($2)+1);
704 bufferWriteSetProperty
($$
, $4);
705 bufferWriteString
($$
, $2, strlen
($2)+1);
706 bufferWriteGetProperty
($$
, $4);
707 bufferWriteString
($$
, "1", 2);
708 bufferWriteU8
($$
, SWFACTION_ADD
);
709 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
710 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
716 bufferWriteU8
($$
, SWFACTION_DUP
);
717 bufferWriteU8
($$
, SWFACTION_DUP
);
718 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
719 bufferWriteString
($$
, "1", 2);
720 bufferWriteU8
($$
, SWFACTION_ADD
);
721 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
);
722 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
); }
724 |
"--" sprite
'.' IDENTIFIER
726 bufferWriteString
($$
, $2, strlen
($2)+1);
727 bufferWriteGetProperty
($$
, $4);
728 bufferWriteString
($$
, $2, strlen
($2)+1);
729 bufferWriteSetProperty
($$
, $4);
730 bufferWriteString
($$
, $2, strlen
($2)+1);
731 bufferWriteGetProperty
($$
, $4);
732 bufferWriteString
($$
, "1", 2);
733 bufferWriteU8
($$
, SWFACTION_ADD
);
734 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
735 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
741 bufferWriteU8
($$
, SWFACTION_DUP
);
742 bufferWriteU8
($$
, SWFACTION_DUP
);
743 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
744 bufferWriteString
($$
, "1", 2);
745 bufferWriteU8
($$
, SWFACTION_SUBTRACT
);
746 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
);
747 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
); }
749 |
'-' rhs_expr %prec UMINUS
751 bufferWriteString
($2, "-1", 3);
752 bufferWriteU8
($2, SWFACTION_MULTIPLY
); }
756 bufferWriteU8
($2, SWFACTION_LOGICALNOT
); }
758 | lhs_expr
'=' rhs_expr
/* assign and leave copy on stack */
760 bufferConcat
($$
, $3);
761 bufferWriteU8
($$
, SWFACTION_DUP
);
762 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
); }
764 | rhs_expr
'*' rhs_expr
766 bufferConcat
($$
, $3);
767 bufferWriteU8
($$
, SWFACTION_MULTIPLY
); }
769 | rhs_expr
'/' rhs_expr
771 bufferConcat
($$
, $3);
772 bufferWriteU8
($$
, SWFACTION_DIVIDE
); }
774 | rhs_expr
'+' rhs_expr
776 bufferConcat
($$
, $3);
777 bufferWriteU8
($$
, SWFACTION_ADD
); }
779 | rhs_expr
'-' rhs_expr
781 bufferConcat
($$
, $3);
782 bufferWriteU8
($$
, SWFACTION_SUBTRACT
); }
784 | rhs_expr
'&' rhs_expr
786 bufferConcat
($$
, $3);
787 bufferWriteU8
($$
, SWFACTION_STRINGCONCAT
); }
789 | rhs_expr
'<' rhs_expr
791 bufferConcat
($$
, $3);
792 bufferWriteU8
($$
, SWFACTION_LESSTHAN
); }
794 | rhs_expr
'>' rhs_expr
796 bufferConcat
($$
, $1);
797 bufferWriteU8
($$
, SWFACTION_LESSTHAN
); }
799 | rhs_expr
"<=" rhs_expr
801 bufferConcat
($$
, $1);
802 bufferWriteU8
($$
, SWFACTION_LESSTHAN
);
803 bufferWriteU8
($$
, SWFACTION_LOGICALNOT
); }
805 | rhs_expr
">=" rhs_expr
806 { bufferConcat
($1, $3);
807 bufferWriteU8
($1, SWFACTION_LESSTHAN
);
808 bufferWriteU8
($1, SWFACTION_LOGICALNOT
); }
810 | rhs_expr
"!==" rhs_expr
811 { bufferConcat
($1, $3);
812 bufferWriteU8
($1, SWFACTION_STRINGEQ
);
813 bufferWriteU8
($1, SWFACTION_LOGICALNOT
); }
815 | rhs_expr
"===" rhs_expr
816 { bufferConcat
($1, $3);
817 bufferWriteU8
($1, SWFACTION_STRINGEQ
); }
819 | rhs_expr
"<=>" rhs_expr
820 { bufferConcat
($1, $3);
821 bufferWriteU8
($1, SWFACTION_STRINGCOMPARE
); }
823 | rhs_expr
"==" rhs_expr
824 { bufferConcat
($1, $3);
825 bufferWriteU8
($1, SWFACTION_EQUAL
); }
827 | rhs_expr
"!=" rhs_expr
828 { bufferConcat
($1, $3);
829 bufferWriteU8
($1, SWFACTION_EQUAL
);
830 bufferWriteU8
($1, SWFACTION_LOGICALNOT
); }
832 | rhs_expr
"&&" rhs_expr
833 { bufferConcat
($1, $3);
834 bufferWriteU8
($1, SWFACTION_LOGICALAND
); }
836 | rhs_expr
"||" rhs_expr
837 { bufferConcat
($1, $3);
838 bufferWriteU8
($1, SWFACTION_LOGICALOR
); }
840 | rhs_expr
'?' rhs_expr
':' rhs_expr
841 { bufferWriteU8
($1, SWFACTION_BRANCHIFTRUE
);
842 bufferWriteS16
($1, 2);
843 bufferWriteS16
($1, bufferLength
($5)+5);
844 bufferConcat
($1, $5);
845 bufferWriteU8
($1, SWFACTION_BRANCHALWAYS
);
846 bufferWriteS16
($1, 2);
847 bufferWriteS16
($1, bufferLength
($3));
848 bufferConcat
($1, $3); }
854 | sprite
':' IDENTIFIER
856 $$
= stringConcat
($$
, strdup
(":"));
857 $$
= stringConcat
($$
, $3); }
868 { $$
= strdup
("/"); }
871 { $$
= strdup
(".."); }
883 bufferWriteString
($$
, $1, strlen
($1)+1);
888 bufferWriteString
($$
, $1, strlen
($1)+1);
891 |
'(' rhs_expr
')' { $$
= $2; }
901 bufferWriteBuffer
($$
, $2);
902 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
903 bufferWriteString
($$
, "1", 2);
904 bufferWriteU8
($$
, SWFACTION_ADD
);
905 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
); }
909 bufferWriteBuffer
($$
, $2);
910 bufferWriteU8
($$
, SWFACTION_GETVARIABLE
);
911 bufferWriteString
($$
, "1", 2);
912 bufferWriteU8
($$
, SWFACTION_SUBTRACT
);
913 bufferWriteU8
($$
, SWFACTION_SETVARIABLE
); }
915 |
"++" sprite
'.' IDENTIFIER
917 bufferWriteString
($$
, $2, strlen
($2)+1);
918 bufferWriteGetProperty
($$
, $4);
919 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
920 bufferWriteString
($$
, "1", 2);
921 bufferWriteU8
($$
, SWFACTION_ADD
);
922 bufferWriteString
($$
, $2, strlen
($2)+1);
923 bufferWriteSetProperty
($$
, $4);
924 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
928 |
"--" sprite
'.' IDENTIFIER
930 bufferWriteString
($$
, $2, strlen
($2)+1);
931 bufferWriteGetProperty
($$
, $4);
932 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
933 bufferWriteString
($$
, "1", 2);
934 bufferWriteU8
($$
, SWFACTION_SUBTRACT
);
935 bufferWriteString
($$
, $2, strlen
($2)+1);
936 bufferWriteSetProperty
($$
, $4);
937 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
941 | lhs_expr
'=' rhs_expr
942 { bufferConcat
($1, $3);
943 bufferWriteU8
($1, SWFACTION_SETVARIABLE
); }
945 | lhs_expr
"*=" rhs_expr
946 { bufferWriteBuffer
($1, $1);
947 bufferWriteU8
($1, SWFACTION_GETVARIABLE
);
948 bufferConcat
($1, $3);
949 bufferWriteU8
($1, SWFACTION_MULTIPLY
);
950 bufferWriteU8
($1, SWFACTION_SETVARIABLE
); }
952 | lhs_expr
"/=" rhs_expr
953 { bufferWriteBuffer
($1, $1);
954 bufferWriteU8
($1, SWFACTION_GETVARIABLE
);
955 bufferConcat
($1, $3);
956 bufferWriteU8
($1, SWFACTION_DIVIDE
);
957 bufferWriteU8
($1, SWFACTION_SETVARIABLE
); }
959 | lhs_expr
"+=" rhs_expr
960 { bufferWriteBuffer
($1, $1);
961 bufferWriteU8
($1, SWFACTION_GETVARIABLE
);
962 bufferConcat
($1, $3);
963 bufferWriteU8
($1, SWFACTION_ADD
);
964 bufferWriteU8
($1, SWFACTION_SETVARIABLE
); }
966 | lhs_expr
"-=" rhs_expr
967 { bufferWriteBuffer
($1, $1);
968 bufferWriteU8
($1, SWFACTION_GETVARIABLE
);
969 bufferConcat
($1, $3);
970 bufferWriteU8
($1, SWFACTION_SUBTRACT
);
971 bufferWriteU8
($1, SWFACTION_SETVARIABLE
); }
973 | sprite
'.' IDENTIFIER
'=' rhs_expr
975 bufferWriteString
($$
, $1, strlen
($1)+1);
976 bufferWriteSetProperty
($$
, $3);
978 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
982 | sprite
'.' IDENTIFIER
"*=" rhs_expr
984 bufferWriteString
($$
, $1, strlen
($1)+1);
985 bufferWriteSetProperty
($$
, $3);
986 bufferWriteString
($$
, $1, strlen
($1)+1);
987 bufferWriteGetProperty
($$
, $3);
988 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
989 bufferConcat
($$
, $5);
990 bufferWriteU8
($$
, SWFACTION_MULTIPLY
);
991 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
995 | sprite
'.' IDENTIFIER
"/=" rhs_expr
997 bufferWriteString
($$
, $1, strlen
($1)+1);
998 bufferWriteSetProperty
($$
, $3);
999 bufferWriteString
($$
, $1, strlen
($1)+1);
1000 bufferWriteGetProperty
($$
, $3);
1001 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
1002 bufferConcat
($$
, $5);
1003 bufferWriteU8
($$
, SWFACTION_DIVIDE
);
1004 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
1008 | sprite
'.' IDENTIFIER
"+=" rhs_expr
1010 bufferWriteString
($$
, $1, strlen
($1)+1);
1011 bufferWriteSetProperty
($$
, $3);
1012 bufferWriteString
($$
, $1, strlen
($1)+1);
1013 bufferWriteGetProperty
($$
, $3);
1014 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
1015 bufferConcat
($$
, $5);
1016 bufferWriteU8
($$
, SWFACTION_ADD
);
1017 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);
1021 | sprite
'.' IDENTIFIER
"-=" rhs_expr
1023 bufferWriteString
($$
, $1, strlen
($1)+1);
1024 bufferWriteSetProperty
($$
, $3);
1025 bufferWriteString
($$
, $1, strlen
($1)+1);
1026 bufferWriteGetProperty
($$
, $3);
1027 bufferWriteU8
($$
, SWFACTION_GETPROPERTY
);
1028 bufferConcat
($$
, $5);
1029 bufferWriteU8
($$
, SWFACTION_SUBTRACT
);
1030 bufferWriteU8
($$
, SWFACTION_SETPROPERTY
);