src/c-types-{proto,impl,parse}.lisp: Add `storage specifiers' to the model.
[sod] / src / codegen-proto.lisp
index c115671..7a6be33 100644 (file)
          decls body))
 
 (definst if (stream :export t) (#1=#:cond conseq &optional alt)
-  (format-compound-statement (stream conseq alt)
-    (format stream "if (~A)" #1#))
-  (when alt
-    (format-compound-statement (stream alt)
-      (write-string "else" stream))))
+  (let ((stmt "if"))
+    (loop (format-compound-statement (stream conseq (if alt t nil))
+           (format stream "~A (~A)" stmt #1#))
+         (typecase alt
+           (null (return))
+           (if-inst (setf stmt "else if"
+                          #1# (inst-cond alt)
+                          conseq (inst-conseq alt)
+                          alt (inst-alt alt)))
+           (t (format-compound-statement (stream alt)
+                (format stream "else"))
+              (return))))))
 
 (definst while (stream :export t) (#1=#:cond body)
   (format-compound-statement (stream body)