module Language.C99.Simple.Expr where

import Prelude hiding (LT, GT)

import Language.C99.Simple.AST

-- Unary Operators
(.++) :: Expr -> Expr
.++ :: Expr -> Expr
(.++) = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Inc

(.--) :: Expr -> Expr
.-- :: Expr -> Expr
(.--) = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Dec

ref :: Expr -> Expr
ref :: Expr -> Expr
ref = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Ref

deref :: Expr -> Expr
deref :: Expr -> Expr
deref = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
DeRef

pos :: Expr -> Expr
pos :: Expr -> Expr
pos = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Plus

neg :: Expr -> Expr
neg :: Expr -> Expr
neg = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Min

(.~) :: Expr -> Expr
.~ :: Expr -> Expr
(.~) = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
BoolNot

(.!) :: Expr -> Expr
.! :: Expr -> Expr
(.!) = UnaryOp -> Expr -> Expr
UnaryOp UnaryOp
Not


-- Binary Operators
(.*) :: Expr -> Expr -> Expr
.* :: Expr -> Expr -> Expr
(.*) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Mult

(./) :: Expr -> Expr -> Expr
./ :: Expr -> Expr -> Expr
(./) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Div

(.%) :: Expr -> Expr -> Expr
.% :: Expr -> Expr -> Expr
(.%) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Mod

(.+) :: Expr -> Expr -> Expr
.+ :: Expr -> Expr -> Expr
(.+) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Add

(.-) :: Expr -> Expr -> Expr
.- :: Expr -> Expr -> Expr
(.-) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Sub

(.<<) :: Expr -> Expr -> Expr
.<< :: Expr -> Expr -> Expr
(.<<) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
ShiftL

(.>>) :: Expr -> Expr -> Expr
.>> :: Expr -> Expr -> Expr
(.>>) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
ShiftR

(.<) :: Expr -> Expr -> Expr
.< :: Expr -> Expr -> Expr
(.<) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
LT

(.>) :: Expr -> Expr -> Expr
.> :: Expr -> Expr -> Expr
(.>) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
GT

(.<=) :: Expr -> Expr -> Expr
.<= :: Expr -> Expr -> Expr
(.<=) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
LE

(.>=) :: Expr -> Expr -> Expr
.>= :: Expr -> Expr -> Expr
(.>=) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
GE

(.==) :: Expr -> Expr -> Expr
.== :: Expr -> Expr -> Expr
(.==) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Eq

(.!=) :: Expr -> Expr -> Expr
.!= :: Expr -> Expr -> Expr
(.!=) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
NEq

(.&) :: Expr -> Expr -> Expr
.& :: Expr -> Expr -> Expr
(.&) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
And

(.^) :: Expr -> Expr -> Expr
.^ :: Expr -> Expr -> Expr
(.^) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
XOr

(.|) :: Expr -> Expr -> Expr
.| :: Expr -> Expr -> Expr
(.|) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
Or

(.&&) :: Expr -> Expr -> Expr
.&& :: Expr -> Expr -> Expr
(.&&) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
LAnd

(.||) :: Expr -> Expr -> Expr
.|| :: Expr -> Expr -> Expr
(.||) = BinaryOp -> Expr -> Expr -> Expr
BinaryOp BinaryOp
LOr


-- Assignment operators
(.=) :: Expr -> Expr -> Expr
.= :: Expr -> Expr -> Expr
(.=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
Assign

(.*=) :: Expr -> Expr -> Expr
.*= :: Expr -> Expr -> Expr
(.*=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignMult

(./=) :: Expr -> Expr -> Expr
./= :: Expr -> Expr -> Expr
(./=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignDiv

(.%=) :: Expr -> Expr -> Expr
.%= :: Expr -> Expr -> Expr
(.%=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignMod

(.+=) :: Expr -> Expr -> Expr
.+= :: Expr -> Expr -> Expr
(.+=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignAdd

(.-=) :: Expr -> Expr -> Expr
.-= :: Expr -> Expr -> Expr
(.-=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignSub

(.<<=) :: Expr -> Expr -> Expr
.<<= :: Expr -> Expr -> Expr
(.<<=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignShiftL

(.>>=) :: Expr -> Expr -> Expr
.>>= :: Expr -> Expr -> Expr
(.>>=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignShiftR

(.&=) :: Expr -> Expr -> Expr
.&= :: Expr -> Expr -> Expr
(.&=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignAnd

(.^=) :: Expr -> Expr -> Expr
.^= :: Expr -> Expr -> Expr
(.^=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignXOr

(.|=) :: Expr -> Expr -> Expr
.|= :: Expr -> Expr -> Expr
(.|=) = AssignOp -> Expr -> Expr -> Expr
AssignOp AssignOp
AssignOr