Commit graph

7511 commits

Author SHA1 Message Date
Daniel Kochmański
2414e829cc tests: cmp: add regression tests for this branch 2023-11-17 11:21:21 +01:00
Tarn W. Burton
dda901a394
Fix generic definition of stream-file-length 2023-11-16 12:26:40 -05:00
Daniel Kochmański
9c7c62ed7f Merge branch 'gray-file-length' into 'develop'
Add gray:stream-file-length

See merge request embeddable-common-lisp/ecl!307
2023-11-16 16:00:33 +00:00
Tarn W. Burton
edd88aac45
Add gray-streams module to avoid use of redefine-cl-functions 2023-11-15 12:30:08 -05:00
Tarn W. Burton
b9a7d06635
Add gray:stream-file-length 2023-11-12 16:14:34 -05:00
Marius Gerbershagen
3f03a0c686 cmp: fix caching of type specifiers
We cannot compare with (equal) here because subtype relations can
differ for member and eql types even if the type specifiers are the
same under equal.
2023-10-30 12:01:21 +01:00
Marius Gerbershagen
b65b7d3825 cmp: expand compiler macros for callsites in the same source file as the compiler macro definition 2023-10-30 12:01:21 +01:00
Marius Gerbershagen
1bbae5a0bc cmp: fix incorrect type proclamations 2023-10-30 12:01:20 +01:00
Marius Gerbershagen
58c5782fe7 cmp: also perform type propagation in disassemble 2023-10-30 12:01:20 +01:00
Marius Gerbershagen
8ef84d3a9b cmp: improve error message for wrong number of arguments
Mention the function name if available. Also refactor the code a bit.
2023-10-30 12:01:18 +01:00
Marius Gerbershagen
d437bd0779 speed up looking up and setting values of dynamic variables
Introduce ecl_cmp_symbol_value and ecl_cmp_setq which do the minimal
amount of work needed to implement symbol-value and setq for dynamic
variables which we have checked to be non-null and of type symbol in
the compiler.

Also introduce a type check in ecl_symbol_value to be consistent with
ecl_setq which also checks the type. These two functions are mainly
used for the embedding interface now, so for that reason it is also
useful to have a type check in there.
2023-10-30 12:01:18 +01:00
Marius Gerbershagen
52e62805dd remove ECL_SAFE option
This is inconsistently implemented in that only very few places
actually check for proper lists. Moreover, it slows down code that
uses those functions a lot.
2023-10-30 12:01:18 +01:00
Mark Shroyer
fcaab573cc Don't enable GC fork() support on Windows
A previous commit unconditionally configures Boehm GC to support fork.
This breaks the Windows MSVC build, producing an error dialog with the
message "Fatal error in GC: fork() handling unsupported".

This commit restricts the call to GC_set_handle_fork to non-Windows
hosts.
2023-10-22 20:22:09 -07:00
Daniel Kochmański
e49eafac22 cmpc: get rid of another undocumented feature from FFI:C-INLINE
ffi:c-inline allowed for the xyntax @object (similar to the previous commit),
although only syntax "@(return x) = xxx" is specified in the documentation.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
f195f7d574 cmpc: get rid of an undocumented and unused code path for FFI:CLINES
We've supported syntax for clines that allowed inlining Lisp objects when they
were prepended with @, for example (ffi:clines "#include @my-variable"); that
said I have not seen a single use of this syntax and it compilcated the logic
(the read object needed to land in the data segment during the second pass).
2023-09-25 14:35:14 +02:00
Daniel Kochmański
5a8f6780b8 cmpc: sysfun: add default inline definitions for printer functions
This resolves a todo in cmpc-opt-printer.lsp:

    ;;; TODO move mundane inliners to the sysfun database.

We leave only the optimizer for CL:PRINC that is not mundane.
The default C inliner for CL:PRINC is also defined in the sysfun database.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
6d60cf294a cmpc: move the c-inliner fully to the cmpc backend module 2023-09-25 14:35:14 +02:00
Daniel Kochmański
49668f8dda cmpc: %def-inline: remove an option :inline-or-warn 2023-09-25 14:35:14 +02:00
Daniel Kochmański
2d0ffd53b2 cmpc: remove the safety-level qualifier :SAFE from the inliner
This inlining qualifier was commented to be applied only in the safe code, but
in the code it was applied all the same as :always (as a second choice after the
unsafe optimizer). Moreover there was only single sysfun that specified it.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
e32b5d5e1f cmp: cmpopt-cons: remove expand-simple-optimizer (rplaca, rplacd)
RPLACA and RPLACD macros were the only clients of SIMPLE-OPTIMIZER-FUNCTION and
said optimizer took more code than explicitly writing twice the expansion as the
compiler macro.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
c9ced2504d cmp: simplify the ast node CL:FUNCTION
The old AST node for CL:FUNCTION accounted for a possibility that a lambda is
passed, although c1function (the only function that produces this node),
discarded that possibility in favor expanding lambda to explicit FLET.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
8e3f1f0a36 cmp: add a kludge for C1CONSTANT-VALUE using *OPTIMIZABLE-CONSTANTS*
This commit will be reverted soon, so it is not squashed onto the AST node
separation for variables and locations.
2023-09-25 14:35:14 +02:00
Daniel Kochmański
816c08340b cmp: have separate AST nodes for variables and locations
That will aid moving inline optimizations to the backend.
2023-09-25 13:13:27 +02:00
Daniel Kochmański
faebc7b266 cmp: enforce valid shape of si:function-block-name delcaration
Also fix a declaration in clos::make-raw-lambda function.
2023-09-25 13:13:27 +02:00
Daniel Kochmański
33df93da14 cmp: supply an explicit value for the empty location
Previously we've passed a fixnum 0 that meant the empty loc. Even earlier
probably NIL was used for that purpose. That have lead to an accidental
complexity where fixnums could not be stored in the value vector.
2023-09-25 13:13:27 +02:00
Daniel Kochmański
592a2cca17 cmp: expand-typep: fix broken (complex type) expansion
This expansion did not account for the object not being a number. In that case
REALPART errored in the compiled code. Example:

    (typep *package* '(complex float))
2023-09-25 13:13:27 +02:00
Daniel Kochmański
4ec4187427 si_need_to_make_load_form_p: t_sse_pack does not need a constructor 2023-09-25 13:13:27 +02:00
Daniel Kochmański
02d6bdb0d3 tests: add a regression test for a bug encountered in this branch 2023-09-25 13:13:27 +02:00
Kirill A. Korinsky
fa9221ae6b Enable handle fork by GC 2023-09-25 05:06:55 +00:00
Marius Gerbershagen
c402748333 Merge branch 'environ_legacy' into 'develop'
Fix access to environ on Darwin

See merge request embeddable-common-lisp/ecl!301
2023-09-20 18:27:37 +00:00
Kirill A. Korinsky
76ef3e8e8a Fix access to environ on Darwin 2023-09-20 18:27:37 +00:00
Daniel Kochmański
78a22c21a3 cosmetic: fix indent 2023-09-19 22:41:42 +02:00
Daniel Kochmański
59ace31763 build: move HAVE_POSIX_RWLOCK to exported config
This is b ecause we use this flag to decide whether the rwlock is implemented
from posix or whether we use our own structure. That influences the size and
offsets in cl_core. Without this commit using

(defun known-signals ()
  (ffi:c-inline nil nil :object "cl_core.known_signals"
                        :one-liner t :side-effects nil))

While HAVE_POSIX_RWLOCK was true during the build returns garbage. The same
applies to other members after the processes group.
2023-09-19 11:49:20 +02:00
Daniel Kochmański
595ca981f8 cosmetic: reindent file unixint.d 2023-09-19 09:44:53 +02:00
Daniel Kochmański
c3841dbb97 main: fix ECL_OPT_SIGNAL_HANDLING_THREAD to be adequate
unixint ignores the flag that enables the signal handling thread when it can't
create one.
2023-09-19 09:32:40 +02:00
Daniel Kochmański
7ea81cf0cd tests: replace an idiom (compile nil '(lambda ..)) -> (cmplambda ..)
This makes code easier to read because of less nesting.
2023-09-15 10:21:06 +02:00
Daniel Kochmański
26efdffb8d tests: add a regression test for compiled multiple-value-call 2023-09-15 10:19:21 +02:00
Daniel Kochmański
338613fe07 cmp: add a comment describing fcall and mcall purpose 2023-09-15 09:35:43 +02:00
Daniel Kochmański
2a631151fd cmp: mcall: implement the type propagation, make similar to fcall
While there is less we can doc compared FCALL, we still can infer the function
type and propagate it. Both AST nodes FCALL and MCALL accept now the same set of
arguments and MCALL has a new type propagator.
2023-09-15 09:35:40 +02:00
Daniel Kochmański
d014360836 cmp: cosmetic: cmppass1-call: add a predicate lambda-form-p 2023-09-11 18:11:58 +02:00
Daniel Kochmański
9f2da346bb cmp: fcall: more through type propagation
We do the type propagation in the appropriate pass and in order. We also ensure
that all arguments have the type propagated and (when applicable) narrowed.
2023-09-11 18:11:58 +02:00
Daniel Kochmański
6e68703c38 cmp: c1call: remove the test for c-arguments-limit
We don't need this special clause anymore because FCALL caters to this edge case
that is specific to the C backend.
2023-09-11 18:11:58 +02:00
Daniel Kochmański
da985b945b cmp: merge AST nodes CALL-LOCAL and CALL-GLOBAL into FCALL
This yields simpler AST that is easier to reason about. One of the benefits is
that we propagate argument types for FCALL disregarding of whether it is a
short or long call.
2023-09-11 18:11:58 +02:00
Daniel Kochmański
29a37c339e cmp: merge AST nodes CL:FUNCALL and FCALL into the latter
The limit imposed on the number of arguments in the call is resolved in the
second pass. We get rid of the AST node CL:FUNCALL.
2023-09-11 18:11:58 +02:00
Daniel Kochmański
526663e069 cmpc: introduce a new loc CALL-STACK and simplify C2FCALL, C2MCALL 2023-09-11 18:11:58 +02:00
Daniel Kochmański
5e5db8be30 cmp: remove the special operator with-stack and company
These operators were a hack that reached to the code generation from the AST
transformation pass encoding things that were clearly targetting the c language.

Recent commits remove uses of this operator and it is no longer needed.
2023-09-11 18:11:55 +02:00
Daniel Kochmański
78d1add899 cmp: cmppass1-call: don't use with-stack for multiple value calls
WITH-STACK depends on FFI:C-INLINE so it can't be present in the first pass for
standard operators. As a bonus disassembled result is less obfuscated.
2023-09-11 16:54:21 +02:00
Daniel Kochmański
fb95debd48 cmp: cmppass1-call: don't use with-stack for unoptimized long calls
WITH-STACK depends on FFI:C-INLINE so it can't be present in the first pass for
standard operators. As a bonus disassembled result is less obfuscated.
2023-09-11 16:54:21 +02:00
Daniel Kochmański
a35b89866a cmp: cmppass1-call: refactor first pass operators funcall and apply 2023-09-11 16:54:21 +02:00
Daniel Kochmański
18e1a69ba7 cmp: add a new c1form mv-prog1
We should start with high-level ast and then we lower it depending on the
backend. Having a Common Lisp backend should be a good test. WITH-STACK does
not belong to the AST and this is the first commit that removes its usage.

This commit implements MULTIPLE-VALUES-PROG1 by means of adding a new AST type
instead of transforming to a call of WITH-STACK.
2023-09-11 16:54:21 +02:00