--- /dev/null
+Logical operators
+-----
+<?php
+
+// boolean ops
+$a && $b;
+$a || $b;
+!$a;
+!!$a;
+
+// logical ops
+$a and $b;
+$a or $b;
+$a xor $b;
+
+// precedence
+$a && $b || $c && $d;
+$a && ($b || $c) && $d;
+
+$a = $b || $c;
+$a = $b or $c;
+-----
+array(
+ 0: Expr_BinaryOp_BooleanAnd(
+ left: Expr_Variable(
+ name: a
+ comments: array(
+ 0: // boolean ops
+ )
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ comments: array(
+ 0: // boolean ops
+ )
+ )
+ 1: Expr_BinaryOp_BooleanOr(
+ left: Expr_Variable(
+ name: a
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ )
+ 2: Expr_BooleanNot(
+ expr: Expr_Variable(
+ name: a
+ )
+ )
+ 3: Expr_BooleanNot(
+ expr: Expr_BooleanNot(
+ expr: Expr_Variable(
+ name: a
+ )
+ )
+ )
+ 4: Expr_BinaryOp_LogicalAnd(
+ left: Expr_Variable(
+ name: a
+ comments: array(
+ 0: // logical ops
+ )
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ comments: array(
+ 0: // logical ops
+ )
+ )
+ 5: Expr_BinaryOp_LogicalOr(
+ left: Expr_Variable(
+ name: a
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ )
+ 6: Expr_BinaryOp_LogicalXor(
+ left: Expr_Variable(
+ name: a
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ )
+ 7: Expr_BinaryOp_BooleanOr(
+ left: Expr_BinaryOp_BooleanAnd(
+ left: Expr_Variable(
+ name: a
+ comments: array(
+ 0: // precedence
+ )
+ )
+ right: Expr_Variable(
+ name: b
+ )
+ comments: array(
+ 0: // precedence
+ )
+ )
+ right: Expr_BinaryOp_BooleanAnd(
+ left: Expr_Variable(
+ name: c
+ )
+ right: Expr_Variable(
+ name: d
+ )
+ )
+ comments: array(
+ 0: // precedence
+ )
+ )
+ 8: Expr_BinaryOp_BooleanAnd(
+ left: Expr_BinaryOp_BooleanAnd(
+ left: Expr_Variable(
+ name: a
+ )
+ right: Expr_BinaryOp_BooleanOr(
+ left: Expr_Variable(
+ name: b
+ )
+ right: Expr_Variable(
+ name: c
+ )
+ )
+ )
+ right: Expr_Variable(
+ name: d
+ )
+ )
+ 9: Expr_Assign(
+ var: Expr_Variable(
+ name: a
+ )
+ expr: Expr_BinaryOp_BooleanOr(
+ left: Expr_Variable(
+ name: b
+ )
+ right: Expr_Variable(
+ name: c
+ )
+ )
+ )
+ 10: Expr_BinaryOp_LogicalOr(
+ left: Expr_Assign(
+ var: Expr_Variable(
+ name: a
+ )
+ expr: Expr_Variable(
+ name: b
+ )
+ )
+ right: Expr_Variable(
+ name: c
+ )
+ )
+)
\ No newline at end of file