A lot of code was duplicated due to creating descriptors for output,
input and error streams. It is reduced by extracting function
`create_descriptor'.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
This makes `stderr` same class citizen as `stdout` and `stdin`. In
order to make it work structure process has been changed to be able to
handle stream_error and index of `exit-code` and `status` are
1+. Access to stream is possible via last value of run-program, which
returns process itself.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Order of checking the same conditions in input and output was slighly
different without an obvious reason. Fixed that, so code is easier to
read.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
If `rlimit' is available (ie on linux), then don't extend stack above
maximum value. If we don't know limit or limit is `infinity', then
there is no protection and user extends heap on his own risk.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Now `si:set-limit' calculates size by itself, while `*_set_size' sets
size as name says. Extend `c-stack' by magnitude of two.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Add `serror' and `stack-error-handler', which behave like normal
`cerror' -> `universal-error-handler' call order, except fact, that
after handling stack-overflow condition they reset appropriate stack
limit. Fixes#56.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
When stack overflow condition is risen, to throw cerror stack limit
has to be raised by pre-allocated margin. This function resets stack
limit to original value. The only argument is stack designator.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
It is different from stack size, because limit is space available to
user, while stack size is larger by safe_area necessary to act on
stack overflow conditions.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Some functions were setting size of stack to provided value, while
other added (* 2 margin) to it, what wasn't consistant. Now each
function treats provided size as a limit and adds margin to it.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Use wget to download tests (ecl-curl failed on https), use ecl
binaries and libs from installation directory and fix tests target
order.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
Documentation explicitly mentions this nickname, and it's common for
many implementations. Closes#72.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
This is required because format is working on string with fill pointer
making it an array - not simple-array what is expected.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
`multiple-value-prog1` was called outside `let` bindings, thereof it
lead to returning unbound access-forms.
Signed-off-by: Daniel Kochmański <dkochmanski@turtle-solutions.eu>
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>