If printed float is effectively zero, then if not explicitly specified
by `fdigits` it should be printed as 0.0 (or .0 if width is too small).
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Bugfix: decrement number of digitse provided to `flonum-to-string` if
sign is also to be printed.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
This "special case" isn't general enough to cover situations, when
width is too small. If we print ie "3.1421", then at least three
characters are required, but printing "0.1231" requires only two of
them. Also 0 is a valid argument forcing using minimal set of
characters to print number reliably (with smallest accuracy possible).
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Trailing zero is obligatory unless d is explicitly set to 0. Consider
following example:
(format nil "~0f" 3.0) ; 3.0
If trailing zero is optional, then 3. would be printed and this would
be an integer (not float). If d is explicitly set to 0 we assume, that
programmer knows what he's doing and tries to convert float to
integer.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
When user supplies "0.0" to format and fdigits parameter is nil, then
".0" should be printed (at least). If fdigits is set to zero, then
correct result is "0.". For values 1 and more appropriate number of
zeros after period is printed.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
When printing 0.0 and fdigits parameter set to 0 or nil, single "."
was printed, what is not valid float number. Now it at least prints
".0".
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Simplifies code. Also creates additional clause (commented now) to
handle special case, when width is too small to display number.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
When width is supplied to format, CLHS 22.3.3.1 Says "Exactly w
characters will be output." This patch fixes this non-conformity to
count separator (".") as well.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
`floatnum-to-string` requires it's first argument to be non-negative
number. To assure that, it was setting it to it's abs, with FIXME
hint, that only one function seems to be able to pass negative number
there. This commit assures, that mentioned function passes
non-negative argument.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Specification says, that scale parameter defaults to 0 (same applis to
fmin in regard of implementation). Both parameters were sanity checked
all over the function flotnum-to-string. This change simplifies the
code in regard of removing this sanity-checks due to sane default.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Fixes erroneous assumption, that for sequence dimension-spec mustn't
be an atom. '(array t 1) designates simple-vector of any type and
unknown length. Fixes issue #6.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Removes coercion to base-string and improves some use cases. Due to
recent change in double-quote reader (conformity fix), now type of
each read string is (simple-array character (*)), so when pathnames
were created, it were copying it to (simple-array base-char (*)), lead
to buggy results. Consider:
(let ((path
(let ((x "foo"))
(make-pathname :name x :type x))))
(eql (pathname-name path)
(pathname-type path))) ; => T
Before change, this construct was returning NIL, what in case of
serialization might be a problem, and wasn't `the right thing`® to do.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Additional sanity checks and bugfixes in case of providing extended
strings to character low-level functions.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
If directory is of type (simple-array character(*)), then coerce it to
(simple-array base-char (*)) instead of throwing an error.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
- libatomic_ops is updated accordingly,
- new directory for garbage collector is bdwgc,
- updated MSVC Makefiles,
- obsolete directories gc and gc-unstable are removed.
Additional macros has been proposed:
- with-setf-expansions maps setf expansions of places on provided list
into lists of pairs (bindings), stores, store-forms and
access-forms.
- with-expansion-setter creates lexically scoped function, which binds
forms to stores using multiple-value-binds, and at the end places
code provided at start macro-call.