(:atom atom) (:num num) (:string str) (:name name) (:array elems) (:object properties) (:regexp expr flags) (:assign op place val) (:binary op lhs rhs) (:unary-postfix op place) (:unary-prefix op place) (:call func args) (:dot obj attr) (:sub obj attr) (:seq form1 result) (:conditional test then else) (:function name args stat*) (:new func args) (:toplevel stat*) (:block stat*) (:stat form) (:label name form) (:if test then else) (:with obj body) (:var bindings) (:defun name args stat*) (:return value) (:debugger) (:try body catch finally) (:throw expr) (:break label) (:continue label) (:while cond body) (:do cond body) (:for init cond step body) (:for-in init lhs obj body) (:switch val (case . body)*)