[Pixelle-commit] SF.net SVN: pixelle: [87] trunk/pixelle/etc/Pixelle.g
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2008-06-27 04:01:12
|
Revision: 87
http://pixelle.svn.sourceforge.net/pixelle/?rev=87&view=rev
Author: dbrosius
Date: 2008-06-26 21:01:09 -0700 (Thu, 26 Jun 2008)
Log Message:
-----------
implement || clauses
Modified Paths:
--------------
trunk/pixelle/etc/Pixelle.g
Modified: trunk/pixelle/etc/Pixelle.g
===================================================================
--- trunk/pixelle/etc/Pixelle.g 2008-06-26 15:51:44 UTC (rev 86)
+++ trunk/pixelle/etc/Pixelle.g 2008-06-27 04:01:09 UTC (rev 87)
@@ -122,8 +122,36 @@
}
)* ;
-cond_or_expr :
- eq_expr ( '||' eq_expr )* ;
+cond_or_expr
+ @init
+ {
+ Label true1Label = null;
+ Label true2Label = null;
+ Label continueLabel = null;
+ }
+ :
+ eq_expr
+ ( '||' eq_expr
+ {
+ true1Label = new Label();
+ true2Label = new Label();
+ continueLabel = new Label();
+
+ mv.visitInsn(Opcodes.DCONST_0);
+ mv.visitInsn(Opcodes.DCMPG);
+ mv.visitJumpInsn(Opcodes.IFNE, true1Label);
+ mv.visitInsn(Opcodes.DCONST_0);
+ mv.visitInsn(Opcodes.DCMPG);
+ mv.visitJumpInsn(Opcodes.IFNE, true2Label);
+ mv.visitInsn(Opcodes.DCONST_0);
+ mv.visitJumpInsn(Opcodes.GOTO, continueLabel);
+ mv.visitLabel(true1Label);
+ mv.visitInsn(Opcodes.POP2);
+ mv.visitLabel(true2Label);
+ mv.visitInsn(Opcodes.DCONST_1);
+ mv.visitLabel(continueLabel);
+ }
+ )* ;
eq_expr
@init
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|