X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/944caf84ede14c9915c657dcfb61f1fbc1ff0cdb..b7fcf94152e4c1938fbca55d13b1e6a64b694bd6:/src/codegen-proto.lisp?ds=sidebyside diff --git a/src/codegen-proto.lisp b/src/codegen-proto.lisp index c115671..7a6be33 100644 --- a/src/codegen-proto.lisp +++ b/src/codegen-proto.lisp @@ -255,11 +255,18 @@ 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)