Commit graph

8165 commits

Author SHA1 Message Date
Marius Gerbershagen
ff8cf4d3c1 pathnames: handle unicode characters
On Unix, pathnames are converted into the default encoding specified
by ext:*default-external-format* and back. On Windows, the operating
system already gives us utf16 encoded pathnames, so we use those.

ecl_namestring with ECL_NAMESTRING_FORCE_BASE_STRING encodes with the
specified encoding. Decoding is handled individually in the filesystem
functions.

Includes a minor refactor of list_directory, changing the
PARSE_DIRECTORY_ENTRY macro into an inline function.

Closes #609, #549.
2021-08-19 14:00:28 +02:00
Marius Gerbershagen
57f1597d86 doc: document ext:*default-external-format* 2021-08-19 13:51:55 +02:00
Marius Gerbershagen
a488595241 add convenience methods for de-/encoding strings and wide-strings from C 2021-08-19 13:51:55 +02:00
Marius Gerbershagen
548309e165 cmdline options: also set ext::*default-external-format* when --encoding is given 2021-08-19 13:51:55 +02:00
Marius Gerbershagen
d528d5445b sequence-streams: handle utf16/32 encodings for vectors with 16/32 bit sized element-types 2021-08-19 13:51:55 +02:00
Marius Gerbershagen
55af7bae85 strings: add functions to encode/decode strings into byte sequences
API copied from sbcl.
2021-08-19 13:51:55 +02:00
Marius Gerbershagen
43be4f6d3e put si_make_backq_vector declaration in external.h
This function can be found in lisp code (it is generated by the reader
from backquotes), thus it must be declared in external.h so that the C
compiler can pick it up when we compile the generated C file.

Fixes #648.
2021-08-01 15:33:03 +02:00
Daniel Kochmański
31a515a16d doc: fix a typo in enumarated symbol names
:*int??-t was misspelled as :*int??_t.
2021-07-26 12:57:33 +02:00
Marius Gerbershagen
8a38c9a3c2 remove register storage class specifier
This option is not needed anymore, ignored by modern compilers and has
been removed in the C++17 standard.

Fixes #647.
2021-07-17 12:13:05 +02:00
Marius Gerbershagen
ed0c3843ba Merge branch 'compiler-improvements' into 'develop'
cmp: major cleanup, separate passes

See merge request embeddable-common-lisp/ecl!251
2021-07-17 09:25:26 +00:00
Daniel Kochmański
e68e682784 Merge branch 'add-ed-hooks' into 'develop'
Add ed hooks

See merge request embeddable-common-lisp/ecl!253
2021-07-01 16:17:45 +00:00
Tarn W. Burton
cb750d37d6 Add tests and documentation for ed hooks 2021-07-01 11:17:08 -04:00
Tarn W. Burton
c0e56f23af Add ed hooks 2021-07-01 11:15:05 -04:00
Daniel Kochmański
080da44821 Merge branch 'cdr-6' into 'develop'
Add CDR 6 feature keyword

See merge request embeddable-common-lisp/ecl!255
2021-07-01 12:47:40 +00:00
Daniel Kochmański
eacc5a25fb cmp: cosmetic: remove the file notes.org
Information there is not up to date and may confuse a reader.
2021-07-01 14:14:53 +02:00
Daniel Kochmański
a70c2fa36c cmp: ctop-write: don't reverse *static-constants* twice
This was probably a braino. *static-constants* is always a list.
2021-07-01 14:14:53 +02:00
Daniel Kochmański
7efb01d7d1 cmp: separate type propagation pass
The type propagation is invoked with a function compiler-pass/propagate-types
before the compiler-pass2. Previously the type propagation was invoked in
ctop-write.
2021-07-01 14:14:36 +02:00
Daniel Kochmański
8716c62f6d cmp: p1fset type propagator returns FUNCTION
Previously the propagator incorrectly returned the type of the function lambda.
2021-07-01 14:11:33 +02:00
Daniel Kochmański
e4fca7e8e7 cmp: separate fun/var ir functions from passes
Also provide better load grouping.
2021-07-01 14:11:33 +02:00
Daniel Kochmański
c8c59167d0 cmp: major cleanup, separate passes
- separate passes

  The separation is not fine-grained but is a good starting point for further
  cleanup. This is a preliminary requirement for multiple backends.

- use uninternet symbol in the package definition

- remove "execute" permission from all files

- remove a few unused functions

- rearrange loaded files

- less verbose compiler

  Don't print "End of pass 1." message. This doesn't provide any valuable
  information to the programmer.
2021-07-01 14:11:33 +02:00
Tarn W. Burton
3d09bebe62 Add CDR 6 feature keyword 2021-07-01 07:44:14 -04:00
Daniel Kochmański
0aa627e3e7 Merge branch 'finalizer-cycles' into 'develop'
gc: call finalizer for builtin object only when the object is truly unreachable

See merge request embeddable-common-lisp/ecl!252
2021-06-12 20:38:41 +00:00
Marius Gerbershagen
0638932696 run-program: remove redundant finalizer for windows handles
We have already registered a finalizer for the external process object
which calls external-process-wait. This in turn calls si::waitpid
which closes the handle once the process has exited.
2021-06-12 21:26:47 +02:00
Marius Gerbershagen
ddb7bb72e9 gc: call finalizer for builtin object only when the object is truly unreachable
Otherwise it can happen that a user-defined finalizer for some object
A storing a builtin object B registers another finalizer for A making
B reachable again while B has already been finalized.

We can't impose an ordering for user-defined finalizers in general
since these may include cyclic references. Therefore it is the duty of
the user to write the finalizers in a consistent way which is
independent of the order in which the finalizers are called. This
doesn't work for builtin objects since the user can't influence
the finalizers in this case.

We also fix a bug which lead to the removal of the standard finalizer
if a user-defined finalizer was registered and then removed.

Co-authored-by: Daniel Kochmański <daniel@turtleware.eu>
2021-06-12 21:26:47 +02:00
Daniel Kochmański
76f700a86d Merge branch 'develop' into 'develop'
modern macOS does not need libm.dylib, nor has it

See merge request embeddable-common-lisp/ecl!254
2021-06-10 14:06:56 +00:00
Dima Pasechnik
a58106e207 more details added, and examples adjusted 2021-06-10 14:33:08 +01:00
Dima Pasechnik
5e99481bd3 modern macOS does not need libm.dylib, nor has it 2021-06-10 13:41:56 +01:00
Marius Gerbershagen
e5d8336379 Merge branch 'fix-direct-superclasses' into 'develop'
direct-superclasses: the default value of the slot is nil per AMOP

See merge request embeddable-common-lisp/ecl!239
2021-05-15 17:21:02 +00:00
Daniel Kochmański
e881e5fa86 tests: add missing validate-superclass methods to a few MOP tests 2021-05-10 13:36:01 +02:00
Daniel Kochmański
0e5174c040 direct-superclasses: the default value of the slot is nil per AMOP
http://metamodular.com/CLOS-MOP/class-direct-superclasses.html
2021-05-10 13:23:56 +02:00
Daniel Kochmański
086ec59ab8 check-direct-superclasses: handle forward-referenced-class
The forward-referenced-class metaclass has no superclasses.

Moreover:

- check superclasses after they are added (removes one fixme)
- don't map validate-superclass during clos booting
2021-05-10 13:23:56 +02:00
Daniel Kochmański
178e0362e3 Merge branch 'update-ucd' into 'develop'
Update the unicode character database

See merge request embeddable-common-lisp/ecl!250
2021-05-10 10:35:50 +00:00
Marius Gerbershagen
5a4c337bd5 char_ctype.d: use new ucd.h header features instead of hardcoded constants 2021-05-07 21:09:09 +02:00
Marius Gerbershagen
ecd86a2541 unicode: update unicode character database to version 13.0.0 2021-05-07 21:09:09 +02:00
Marius Gerbershagen
8350f07100 contrib/unicode: improve ucd table generating code
Provide some comments on what the code is doing.

Increase size of integers used in encoding pairs of consecutive words
(needed to encode the current ucd).

Introduce additional bidirectional classes.

Provide new ucd.h header with enums for general-category and
bidirectional class.

Add update-ucd.sh script to automate the updating process.
2021-05-07 21:09:08 +02:00
Marius Gerbershagen
8891731406 Merge branch 'develop' into 'develop'
msvc: use :X86-64 feature keyword when make a 64bit build

See merge request embeddable-common-lisp/ecl!248
2021-04-09 15:08:55 +00:00
Marius Gerbershagen
da558a9480 doc: css: use white background for images in dark mode 2021-04-09 16:49:58 +02:00
Marius Gerbershagen
cdeea489cb cmp: fix typo to make constant folding work again 2021-04-01 16:19:14 +02:00
Marius Gerbershagen
9e204464ea clos: replace macros by functions in with-early-accessors
Accessors are fuctions not macros. While using macros is fine in most
cases, we can't use them for example in higher-order functions. The
only reason this worked in the first place is due to our compiler
allowing expressions such as

`(macrolet ((x (...) ...)) (funcall #'x ...))

even though this is invalid.
2021-03-31 21:09:18 +02:00
Marius Gerbershagen
62d1bb1203 cmp: fix evaluation order of sequence compiler macros
Minor improvements to define-compiler-macro* (bail out if we detect
:allow-other-keys arguments, define a named block such that
return-from works as expected).

Major refactor of sequence compiler-macros: use define-compiler-macro*
which handles correct evaluation order, define new macro to handle
common stuff for all sequences compiler-macros (e.g. inline policy
checking, check that test and test-not are not both given). The main
expansion logic in the compiler macros is unchanged although the code
had to be slightly rewritten to accomodate the new macros.

Remove the now superfluous seq-opt-parse-args function.
2021-03-31 21:09:18 +02:00
Marius Gerbershagen
dd5c372ff8 cmp: fix let bindings with initforms which are lists with QUOTE symbol as first element
Example:

(let ((x '(quote ...))) ...)

We really have to quote the value in all cases, si::maybe-quote would
strip away one level of quotation leaving only the equivalent
of (let ((x (quote ...))) ...) which of course is incorrect.
2021-03-31 19:57:01 +02:00
Marius Gerbershagen
23dde9625d cmp: fix compiler macro for make-array
The previous version had several problems: argument evaluation order
was not handled correctly and the compiler-macro produced an error for
valid code like

(let ((etype :element-type))
  (make-array 10 etype 'character))

Introduce a new generally applicable macro define-compiler-macro*
which fixes these issues.
2021-03-29 22:07:06 +02:00
Marius Gerbershagen
d54c110361 cmp: fix bad warnings for type declarations inside locally
Also search lexical environment for variables instead of only the
list of variables being established by the current form (which is nil
anyway in the case of locally; only let or multiple-value-bind
statements create new variables).

The declaration is still ignored, but fixing that would require a much
larger refactor because currently variable types are associated to the
variable itself. Thus the type can only be set for the full scope in
which the variable is active and not locally in some subscope.
2021-03-25 22:06:00 +01:00
Marius Gerbershagen
977e2fab34 cmp: fix inlining of functions with &key and &aux arguments
&aux arguments come after &key ones.

Fixes #633.
2021-03-25 22:06:00 +01:00
Yuguo Zhang
1cd226f867 msvc: use :X86-64 feature keyword when make a 64bit build 2021-03-24 09:39:03 +08:00
Marius Gerbershagen
83ed2e1722 cmp: checked-value: don't omit type checks if we detect a type-error at compile time
We now warn at compile time and create a type assertion which errors
at runtime.
2021-03-21 17:33:06 +01:00
Marius Gerbershagen
1f57d7e20a cmp: add type checks to boole compiler macro 2021-03-21 17:33:06 +01:00
Marius Gerbershagen
9391a2bf67 cmp: fix inline expressions for elt
We can't use aref since aref ignores fill-pointers and ecl_fixnum can
be used only in unsafe code.
2021-03-21 17:33:06 +01:00
Marius Gerbershagen
eedbbc08c2 cmp: add type checks in mapl/maplist/mapcon compiler-macros
We are transforming these functions into (loop :on ...). This simply
stops when the objects which we are looping on is not a list, but we
need to signal a type-error because the mapping functions are
specified to take only lists.
2021-03-21 17:33:06 +01:00
Marius Gerbershagen
e0813bf42e cmp: fix typos 2021-03-21 17:33:06 +01:00