                     )))))
     (catch ParseException pe false) ; TODO make this more specific to unknown types
     ))
-(defn type-conversion-assignment? [x] (type-conversion? x))
-(defn type-conversion-declaration? [x] (type-conversion? x))
-
-
-(->> ;"int main() { unsigned int V1; V2 = -2; }"
- ;"int main() {float V1 = 1.99; int V2 = V1;}"
- "int V13 = 1, V14 = 2.3;"
- parse-frag
- (get-in-tree [0]) ;.getOperand1 .getExpressionType type-range
- ;type-conversion-assignment?
- ;.getDeclaration
- ;.getDeclSpecifier
- ;.getType
- ;unify-type
- ;write-ast
- )
 
 ; https://www.safaribooksonline.com/library/view/c-in-a/0596006977/ch04.html
 (s/defn type-conversion-atom? :- s/Bool
   "A node which can have children that implicitly convert their arguments to a different type"
   [node :- IASTNode]
   (cond
-    (instance? IASTSimpleDeclaration node) (type-conversion-declaration? node)
-    (assignment-node? node) (type-conversion-assignment? node)
+    (or (instance? IASTSimpleDeclaration node)
+        (assignment-node? node))
+           (type-conversion? node)
     :else false
     ))
 


(def decl-type (into {} (map #(into [] (vals (select-keys % [1 2]))) type-components)))
(def basic-type (into {} (map #(into [] (vals (select-keys % [0 2]))) type-components)))
(def all-type (merge decl-type basic-type))

(defmulti unsigned? class)
(s/defmethod unsigned? IASTSimpleDeclaration [node] (->> node .getDeclSpecifier unsigned?))

        '(java.text ParseException))

(s/defn type-conversion-atom? :- s/Bool [node :- IASTNode] false)

(s/defrecord TD ;TypeDescription
    [number-type :- s/Keyword bits :- s/Int])
