====
cast
====

select (Foo) f

---
(ql (moduleMember (select (asExprs (asExpr (prefix_cast (typeExpr (className)) (variable (varName (simpleId)))))))))
========
dontcare
========

select foo(_)

---
(ql (moduleMember (select (asExprs (asExpr (call_or_unqual_agg_expr (aritylessPredicateExpr (literalId)) (call_body (underscore))))))))
====
unop
====

select - 5, + 5

---
 (ql (moduleMember (select (asExprs (asExpr (unary_expr (unop) (literal (integer)))) (asExpr (unary_expr (unop) (literal (integer))))))))
=====
binop
=====

select 5 + 5, 5 - 5, 5 * 5, 5 / 5, 5 % 5

---

(ql (moduleMember
  (select
    (asExprs
      (asExpr (add_expr (literal (integer)) (addop) (literal (integer))))
      (asExpr (add_expr (literal (integer)) (addop) (literal (integer))))
      (asExpr (mul_expr (literal (integer)) (mulop) (literal (integer))))
      (asExpr (mul_expr (literal (integer)) (mulop) (literal (integer))))
      (asExpr (mul_expr (literal (integer)) (mulop) (literal (integer))))))))

===========
set literal
===========

select [1,2,4]

---

(ql (moduleMember
  (select
    (asExprs
      (asExpr
        (set_literal
          (literal (integer))
          (literal (integer))
          (literal (integer))))))))

====================
uniqueness aggregate
====================

select unique(int x | x = 1 | x)

---

(ql (moduleMember
  (select
    (asExprs
      (asExpr
        (call_or_unqual_agg_expr
          (aritylessPredicateExpr (literalId))
          (unqual_agg_body
            (varDecl (typeExpr (primitiveType)) (varName (simpleId)))
            (comp_term (variable (varName (simpleId))) (compop) (literal (integer)))
            (asExprs (asExpr (variable (varName (simpleId))))))))))))

================
binop precedence
================

select
  // left associative
  5 + 5 - 5,
  5 - 5 + 5,
  // mul binds tighter
  5 + 5 * 5,
  5 + 5 / 5,
  5 * 5 + 5,
  5 / 5 + 5,
  // left associative
  5 / 5 * 5,
  5 * 5 / 5,
  // mod tighter,
  5 * 5 % 5,
  5 % 5 * 5

---

(ql (moduleMember (select (line_comment)
  (asExprs
    (asExpr (add_expr (add_expr (literal (integer)) (addop) (literal (integer))) (addop) (literal (integer))))
    (asExpr (add_expr (add_expr (literal (integer)) (addop) (literal (integer))) (addop) (literal (integer))))
    (line_comment)
    (asExpr (add_expr (literal (integer)) (addop) (mul_expr (literal (integer)) (mulop) (literal (integer)))))
    (asExpr (add_expr (literal (integer)) (addop) (mul_expr (literal (integer)) (mulop) (literal (integer)))))
    (asExpr (add_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (addop) (literal (integer))))
    (asExpr (add_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (addop) (literal (integer))))
    (line_comment)
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (mulop) (literal (integer))))
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (mulop) (literal (integer))))
    (line_comment)
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (mulop) (literal (integer))))
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop) (literal (integer))) (mulop) (literal (integer))))))))
