mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-26 06:22:33 -08:00
cmp: fix specification of integer suffixes for the C compiler
Fixes #667.
This commit is contained in:
parent
ef94137e3d
commit
f3d4cf4b66
3 changed files with 22 additions and 13 deletions
|
|
@ -19,18 +19,7 @@
|
|||
(defun wt1 (form)
|
||||
(cond ((not (floatp form))
|
||||
(typecase form
|
||||
(INTEGER
|
||||
(princ form *compiler-output1*)
|
||||
(princ
|
||||
(cond ((typep form (rep-type->lisp-type :int)) "")
|
||||
((typep form (rep-type->lisp-type :unsigned-int)) "U")
|
||||
((typep form (rep-type->lisp-type :long)) "L")
|
||||
((typep form (rep-type->lisp-type :unsigned-long)) "UL")
|
||||
((typep form (rep-type->lisp-type :long-long)) "LL")
|
||||
((typep form (rep-type->lisp-type :unsigned-long-long)) "ULL")
|
||||
(t (baboon :format-control "wt1: The number ~A doesn't fit any integer type." form)))
|
||||
*compiler-output1*))
|
||||
((or STRING CHARACTER)
|
||||
((or INTEGER STRING CHARACTER)
|
||||
(princ form *compiler-output1*))
|
||||
(VAR (wt-var form))
|
||||
(t (wt-loc form))))
|
||||
|
|
|
|||
|
|
@ -181,10 +181,30 @@
|
|||
(defun wt-temp (temp)
|
||||
(wt "T" temp))
|
||||
|
||||
(defun wt-fixnum (value &optional vv)
|
||||
(declare (ignore vv))
|
||||
(princ value *compiler-output1*)
|
||||
;; Specify explicit type suffix as a workaround for MSVC. C99
|
||||
;; standard compliant compilers don't need type suffixes and choose
|
||||
;; the correct type themselves. Note that we cannot savely use
|
||||
;; anything smaller than a long long here, because we might perform
|
||||
;; some other computation on the integer constant which could
|
||||
;; overflow if we use a smaller integer type (overflows in long long
|
||||
;; computations are taken care of by the compiler before we get to
|
||||
;; this point).
|
||||
#+msvc (princ (cond ((typep value (rep-type->lisp-type :long-long)) "LL")
|
||||
((typep value (rep-type->lisp-type :unsigned-long-long)) "ULL")
|
||||
(t (baboon :format-control
|
||||
"wt-fixnum: The number ~A doesn't fit any integer type."
|
||||
value)))
|
||||
*compiler-output1*))
|
||||
|
||||
(defun wt-number (value &optional vv)
|
||||
(declare (ignore vv))
|
||||
(wt value))
|
||||
|
||||
(defun wt-character (value &optional vv)
|
||||
(declare (ignore vv))
|
||||
;; We do not use the '...' format because this creates objects of type
|
||||
;; 'char' which have sign problems
|
||||
(wt value))
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@
|
|||
|
||||
(temp . wt-temp)
|
||||
(lcl . wt-lcl-loc)
|
||||
(fixnum-value . wt-number)
|
||||
(fixnum-value . wt-fixnum)
|
||||
(long-float-value . wt-number)
|
||||
(double-float-value . wt-number)
|
||||
(single-float-value . wt-number)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue