chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
doc/syntax.tex: Delete (wrong) duplicate rule for <argument-declarator>.
[sod]
/
src
/
codegen-proto.lisp
diff --git
a/src/codegen-proto.lisp
b/src/codegen-proto.lisp
index 186f22583eb7c187a4b49c6733c05acf3a2722b9..856e44e7f999ea188e061a2f48ec3fcaea54fad2 100644
(file)
--- a/
src/codegen-proto.lisp
+++ b/
src/codegen-proto.lisp
@@
-66,6
+66,10
@@
(defparameter *sod-tmp-ap*
(make-instance 'temporary-name :tag "sod__tmp_ap"))
(defparameter *sod-tmp-val*
(make-instance 'temporary-name :tag "sod__t"))
(make-instance 'temporary-name :tag "sod__tmp_ap"))
(defparameter *sod-tmp-val*
(make-instance 'temporary-name :tag "sod__t"))
+(defparameter *sod-keywords*
+ (make-instance 'temporary-name :tag "sod__kw"))
+(defparameter *sod-key-pointer*
+ (make-instance 'temporary-name :tag "sod__keys"))
(export '*null-pointer*)
(defparameter *null-pointer* "NULL")
(export '*null-pointer*)
(defparameter *null-pointer* "NULL")
@@
-191,13
+195,13
@@
(defun format-compound-statement* (stream child morep thunk)
(pprint-indent :block 2 stream)
(pprint-newline :linear stream)
(princ child stream)
(pprint-indent :block 2 stream)
(pprint-newline :linear stream)
(princ child stream)
- (pprint-indent :block 0 stream)
-
(case morep
-
(:space
-
(write-char #\space stream)
-
(pprint-newline :linear stream))
-
((t)
-
(pprint-newline :mandatory stream)
))))))
+ (pprint-indent :block 0 stream)
)
+ (case morep
+ (:space
+ (write-char #\space stream)
+ (pprint-newline :linear stream))
+ ((t)
+
(pprint-newline :mandatory stream
))))))
(export 'format-compound-statement)
(defmacro format-compound-statement
(export 'format-compound-statement)
(defmacro format-compound-statement
@@
-221,10
+225,11
@@
(defun format-banner-comment (stream control &rest args)
;; prevent them from leaking.
(definst var (stream :export t) (name #1=#:type &optional init)
;; prevent them from leaking.
(definst var (stream :export t) (name #1=#:type &optional init)
- (pprint-c-type #1# stream name)
- (when init
- (format stream " = ~A" init))
- (write-char #\; stream))
+ (pprint-logical-block (stream nil)
+ (pprint-c-type #1# stream name)
+ (when init
+ (format stream " = ~2I~_~A" init))
+ (write-char #\; stream)))
(definst function (stream :export t)
(name #1=#:type body &optional #2=#:banner &rest banner-args)
(definst function (stream :export t)
(name #1=#:type body &optional #2=#:banner &rest banner-args)
@@
-240,13
+245,15
@@
(definst function (stream :export t)
(definst expr (stream :export t) (#1=#:expr)
(format stream "~A;" #1#))
(definst set (stream :export t) (var #1=#:expr)
(definst expr (stream :export t) (#1=#:expr)
(format stream "~A;" #1#))
(definst set (stream :export t) (var #1=#:expr)
- (format stream "~@<~A = ~
@_~2I
~A;~:>" var #1#))
+ (format stream "~@<~A = ~
2I~_
~A;~:>" var #1#))
(definst update (stream :export t) (var op #1=#:expr)
(definst update (stream :export t) (var op #1=#:expr)
- (format stream "~@<~A ~A= ~
@_~2I
~A;~:>" var op #1#))
+ (format stream "~@<~A ~A= ~
2I~_
~A;~:>" var op #1#))
;; Special kinds of expressions.
(definst call (stream :export t) (#1=#:func &rest args)
;; Special kinds of expressions.
(definst call (stream :export t) (#1=#:func &rest args)
- (format stream "~A(~@<~{~A~^, ~_~}~:>)" #1# args))
+ (format stream "~@<~A~4I~_(~@<~{~A~^, ~_~}~:>)~:>" #1# args))
+(definst cond (stream :export t) (#1=#:cond conseq alt)
+ (format stream "~@<~A ~2I~@_~@<? ~A ~_: ~A~:>~:>" #1# conseq alt))
;; Simple statements.
(definst return (stream :export t) (#1=#:expr)
;; Simple statements.
(definst return (stream :export t) (#1=#:expr)
@@
-320,6
+327,11
@@
(definst do-while (stream :export t) (body #1=#:cond)
(write-string "do" stream))
(format stream "while (~A);" #1#))
(write-string "do" stream))
(format stream "while (~A);" #1#))
+(definst for (stream :export t) (init #1=#:cond update body)
+ (format-compound-statement (stream body)
+ (format stream "for (~@<~@[~A~];~@[ ~_~A~];~@[ ~_~A~]~:>)"
+ init #1# update)))
+
;;;--------------------------------------------------------------------------
;;; Code generation.
;;;--------------------------------------------------------------------------
;;; Code generation.