summaryrefslogtreecommitdiff
path: root/libguile
AgeCommit message (Collapse)AuthorFilesLines
2021-02-03Replace libltdl with raw dlopen, dlsymAndy Wingo6-323/+144
* NEWS: Update. * am/bootstrap.am (SOURCES): * module/Makefile.am (SOURCES): Add system/foreign-library.scm. * configure.ac: Replace ltdl check with -ldl check. * libguile/dynl.c: Rewrite to just expose core dlopen / dlsym / etc to a helper Scheme module. (scm_dynamic_link, scm_dynamic_pointer, scm_dynamic_function) (scm_dynamic_object_p, scm_dynamic_call): Rewrite in terms of (system foreign-library). * libguile/extensions.c (load_extension): Avoid scm_dynamic_call. * module/system/foreign-library.scm: New file. * module/oop/goops.scm (<dynamic-object>): Hackily export <foreign-library> instead of a class here. * doc/ref/api-foreign.texi (Foreign Function Interface): Rewrite to only document the new interfaces. Eventually we will deprecate dynamic-link and friends. * doc/ref/guile.texi (API Reference): Move Foreign Objects after Foreign Function Interface. Seems there should be some closer relationship but this will do for now. * doc/ref/tour.texi (Putting Extensions into Modules): * doc/ref/libguile-parallel.texi (Parallel Installations): Update for rename of Modules and Extensions to Foreign Extensions. * libguile/deprecated.h: * libguile/deprecated.c (scm_dynamic_unlink): Deprecate. * libguile/guile.c: Remove ltdl include. * test-suite/tests/foreign.test: Update tests to use new API, and update error expectations.
2021-01-21getsockopt may return garbage for parameters < sizeof(int)Michael Gran1-1/+2
Uninitialized variable. * libguile/socket.c (scm_getsockopt): zeroize arguments before use
2021-01-21in null threads, don't define sigmask stub when pthread_sigmask does not existMichael Gran2-4/+12
* libguile/gen-scmconfig.c (main) [HAVE_PTHREAD_SIGMASK]: new output define SCM_HAVE_PTHREAD_SIGMASK * libguile/null-threads.h (scm_i_pthread_sigmask) [SCM_HAVE_PTHREAD_SIGMASK]: make inline function conditional on existence of pthread_sigmask
2021-01-21Need Guile and Windows types for the declarations posix-w32Michael Gran1-1/+8
* libguile/posix-w32.h: include scm.h and windows.h
2021-01-21missing includes for list.hMichael Gran2-2/+4
* libguile/loader.c: include list.h * libguile/stime.c: include list.h
2021-01-21Replace mutating mkdtemp! with non-mutating mkdtempMichael Gran2-16/+10
* doc/ref/posix.texi: replace mkdtemp! and scm_mkdtemp_x documentation with documentation for mkdtemp and scm_mkdtemp * libguile/filesys.c (scm_mkdtemp_x): procedure mkdtemp! removed (scm_mkdtemp): new procedure mkdtemp * libguile/filesys.h: Remove declaration for scm_mkdtemp_x. New declaration scm_mkdtemp. * test-suite/tests/filesys.test: Remove mkdtemp! tests. Add tests for mkdtemp.
2021-01-19Fix incorrect docstring of mkdtemp!Michael Gran1-3/+3
* libguile/filesys.c (scm_mkdtemp_x): fix docstring
2021-01-19New procedure mkdtemp! to create unique temporary directoryMichael Gran2-1/+42
* configure.ac (AC_CHECK_FUNCS): add mkdtemp! test * doc/ref/posix.texi: document mkdtemp! * libguile/filesys.c (scm_mkdtemp_x): new function * libguile/filesys.h: new declaration for scm_mkdtemp_x * test-suite/tests/filesys.test: add tests for mkdtemp! Adapted from a patch by Rob Browning.
2021-01-18Move declaration for scm_mkstemp to filesys.hMichael Gran2-3/+3
The underlying function was moved to filesys.c in 073167ef7b803067bcc8be19925fac1a48577bd8 but the declaration didn't follow * libguile/filesys.h: add declaration for scm_mkstemp * libguile/posix.h: remove declaration for scm_mkstemp
2021-01-17scm_i_make_transcoded_port: fix mode for input/output portsRob Browning1-2/+2
* libguile/r6rs-ports.c (scm_i_make_transcoded_ports): make sure to include SCM_RDNG for input/output ports. Thanks to Göran Weinholt for reporting the problem. Closes: 41045
2021-01-17Replace a line which was accidentally removed.Asher Gordon1-0/+1
The line, part of the sentence above it in a comment, was accidentally removed in commit b8d757732fae7c396d58327185f94e5d90846445 "Rationalize include order in C files". * libguile/guile.c: restore missing line. [rlb@defaultvalue.org: augment commit message; add THANKS] Closes: 42331
2021-01-17doc: Fix composition describing scm_reverse_list_to_stringRob Browning1-1/+1
* libguile/srfi-13.c (scm_reverse_list_to_string): Replace string->list with list->string in the composition explaning how it works. Thanks to Andrey Ivanov for reporting the problem. Closes: 34457
2021-01-07Merge remote-tracking branch 'lightening/main'Andy Wingo2-0/+28
2020-09-10Fix source location bug for neoteric exprs introduced by refactoringAndy Wingo1-1/+1
* libguile/read.c (scm_read_expression): Ungetc after capturing the column.
2020-09-10Move copy-tree to (ice-9 copy-tree); deprecate main bindingAndy Wingo6-254/+15
* doc/ref/api-data.texi (List Constructors): * doc/ref/api-utility.texi (Copying): Update docs to mention module. * libguile.h: Remove trees.h inclusion. * libguile/Makefile.am (libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): (DOT_X_FILES, DOT_DOC_FILES, modinclude_HEADERS): Remove trees.c, trees.h, and related files. * libguile/init.c (scm_i_init_guile): Remove trees.h and the scm_init_trees call. * libguile/trees.c: * libguile/trees.h: Remove. * module/Makefile.am (SOURCES): Add ice-9/copy-tree.scm. * module/ice-9/copy-tree.scm: New file. * module/ice-9/deprecated.scm (copy-tree*): Export as copy-tree, proxying to (ice-9 copy-tree). * module/system/repl/common.scm: * module/web/client.scm: * test-suite/tests/elisp.test: * test-suite/tests/srfi-1.test: * module/oop/goops/save.scm: Use (ice-9 copy-tree). * test-suite/Makefile.am (SCM_TESTS): Add copy-tree.test. * test-suite/tests/copy-tree.test: New file; test pulled from eval.test. * libguile/deprecated.h: * libguile/deprecated.c (scm_copy_tree): Deprecate.
2020-09-03Clean up srcprops implementationAndy Wingo6-163/+137
* libguile/deprecated.c (scm_sym_copy, scm_make_srcprops): Deprecate. * libguile/deprecated.h (scm_tc16_srcprops) (SCM_SOURCE_PROPERTY_FLAG_BREAK): Deprecate. * libguile/private-options.h (SCM_COPY_SOURCE_P): Remove. * libguile/read.c (struct t_read_opts, scm_read_options): Remove useless copy read option. (maybe_annotate_source): Change line and column to be tagged, and subtract off lookahead here. Change all callers. (READ_OPTION_COPY_SOURCE_P): Remove, renumbering other options. (init_read_options): Remove copy option. * libguile/srcprop.c: Change to put filename inline in source properties. Update private implementation. * libguile/srcprop.h (SCM_PROCTRACEP): Remove. Unusable given that scm_sym_trace was undefined.
2020-08-27Tweak to initial heap size selectionAndy Wingo1-2/+4
* libguile/gc.c (DEFAULT_INITIAL_HEAP_SIZE): Bump a bit farther (2 MB on 64-bit, 1 MB on 32-bit) as we now expand to this size instead of expanding by this amount. (scm_storage_prehistory): Expand to the initial heap size instead of expanding by the size.
2020-08-27Bump DEFAULT_INITIAL_HEAP_SIZEAndy Wingo1-11/+2
* libguile/gc.c (DEFAULT_INITIAL_HEAP_SIZE): Bump to 1.6 MB on 64-bit targets, or 800 kB on 32-bit targets, to account for increased footprint. Prevents useless early GC. (scm_storage_prehistory): Remove unused code to dynamically change the free space divisor.
2020-08-26Bump objcode minor version to 4Andy Wingo1-1/+1
* libguile/loader.h (SCM_OBJCODE_MINOR_VERSION): Accept up to version 4. * module/system/vm/assembler.scm (*bytecode-minor-version*): Produce version 4.
2020-08-12Add new pass to optimize branch chains to table dispatchAndy Wingo1-0/+4
* module/language/cps/switch.scm: New pass. * module/Makefile.am (SOURCES): * am/bootstrap.am (SOURCES): Add switch.scm. * module/system/base/optimize.scm (available-optimizations): * module/language/cps/optimize.scm (optimize-first-order-cps): Run switch optimization at level 2. * libguile/hash.c (JENKINS_LOOKUP3_HASHWORD2): Add note regarding cross-compilation. * module/language/cps/graphs.scm (intmap-select): New definition. * module/language/cps/utils.scm (compute-singly-referenced-labels): Move here, from various places. Doesn't take a body intset argument. * module/language/cps/contification.scm: * module/language/cps/closure-conversion.scm: * module/language/cps/simplify.scm: Use compute-singly-referenced-labels from utils. * module/language/cps/effects-analysis.scm (annotation->memory-kind*): (annotation->memory-kind): Add symbol annotation cases.
2020-08-12Fix JIT compilation for jtableAndy Wingo1-1/+1
* libguile/jit.c (compile_jtable): Fix bounds check for index.
2020-08-03Add eq-immediate? instructionAndy Wingo2-1/+47
* libguile/jit.c (compile_eq_immediate, compile_eq_immediate_slow): Add JIT compiler. * libguile/vm-engine.c (eq_immediate): New instruction. * doc/ref/vm.texi (Comparison Instructions): Document. * module/system/vm/assembler.scm (encode-X8_S8_ZI16!/shuffle): New shuffler. * module/system/vm/disassembler.scm (code-annotation): Add eq-immediate? case.
2020-07-30Add sign-extending make-immediate instructionAndy Wingo3-2/+36
* doc/ref/vm.texi (Instruction Set, Constant Instructions): Document new instruction. * libguile/instructions.c (FOR_EACH_INSTRUCTION_WORD_TYPE): New first word kind with zi16 operand. * libguile/jit.c (compile_make_immediate, compile_make_immediate_slow): New compilers. (COMPILE_X8_S8_ZI16): New operand kind. * libguile/vm-engine.c (make-immediate): New instruction. * module/language/bytecode.scm: * module/system/vm/assembler.scm (encode-X8_S8_ZI16<-/shuffle): (signed-bits, load-constant): Support the new instruction kind. * module/system/vm/disassembler.scm (disassemblers) (sign-extended-immediate, code-annotation): Support for zi16 operands.
2020-07-30Merge https://gitlab.com/wingo/lightening master branchAndy Wingo1-3/+8
2020-07-30Update use of jit_begin_data APIAndy Wingo1-1/+1
* libguile/jit.c (compile_jtable): Pass computed jump table size.
2020-07-30Merge https://gitlab.com/wingo/lightening master branchAndy Wingo3-22/+28
2020-07-30Add JIT implementation for jtableAndy Wingo1-5/+36
* libguile/jit.c (compile_jtable): Implement.
2020-07-30Merge https://gitlab.com/wingo/lightening master branchAndy Wingo6-28/+186
2020-07-23Add jtable instructionAndy Wingo3-3/+70
* doc/ref/vm.texi (Instruction Set): Document new v32-x8-l24 instruction kind. (Branch Instructions): Document jtable. * libguile/instructions.c (FOR_EACH_INSTRUCTION_WORD_TYPE): Add V32_X8_L24. * libguile/jit.c (compile_jtable, compile_jtable_slow): (COMPILE_X8_S24__V32_X8_L24, analyze): Add stub JIT compiler implementation. * libguile/vm-engine.c (jtable): New instruction. * module/language/bytecode.scm (instruction-arity): Deprecate. * module/system/vm/assembler.scm (encoder, assembler): Add V32_X8_L24 case. * module/system/vm/disassembler.scm (u32-ref, s32-ref): Move definitions to expansion-time only. (define-op-handlers): New definition, replacing visit-opcodes. (disassemblers, jump-parsers, stack-effect-parsers, clobber-parsers): Rework in terms of define-op-handlers. Default case becomes #f, and add support for jtable. (disassemble-one, instruction-relative-jump-targets) (instruction-stack-size-after, instruction-slot-clobbers): Inline default case in the lookup procedure, not copied in the handler vector. (compute-labels): Add jtable case. (instruction-lengths-vector, instruction-length): Rework to allow variable-length instructions, and mark jtable as being variable-length. (instruction-has-fallthrough?): Add jtable to the no-fallthrough set.
2020-06-21Merge upstream 'lightening'Ludovic Courtès3-5/+27
* libguile/lightening: Merge from https://gitlab.com/wingo/lightening, commit 24ef197b1269f8371b1f4a412caa6d2b99d66839.
2020-06-19Merge upstream 'lightening'Andy Wingo1-0/+2
* libguile/lightening: Merge from https://gitlab.com/wingo/lightening.
2020-06-19Merge upstream 'lightening'Andy Wingo2-5/+12
* libguile/lightening: Merge from https://gitlab.com/wingo/lightening.
2020-06-18doc: Document default delimiter of string-join.Arun Isaac1-5/+6
* doc/ref/api-data.texi (String Constructors): Document default delimiter of the string-join function. * libguile/srfi-13.c (scm_string_join): Adjust docstring accordingly. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-06-18read: Use "invalid" rather than "illegal".Jan (janneke) Nieuwenhuizen1-1/+1
* libguile/read.c (scm_read_string_like_syntax): All characters are permitted by law; some aren't valid in certain contexts. * test-suite/tests/reader.test: Replace occurrences of "illegal" by "invalid". * test-suite/tests/strings.test: Likewise. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2020-06-17srfi-1: Rewrite 'assoc' in Scheme.Ludovic Courtès2-32/+0
* libguile/srfi-1.c (scm_srfi1_assoc): Remove. * libguile/srfi-1.h (scm_srfi1_assoc): Likewise. * module/srfi/srfi-1.scm (assoc): New procedure.
2020-06-17srfi-1: Rewrite 'find-tail' in Scheme.Ludovic Courtès2-19/+0
* libguile/srfi-1.c (scm_srfi1_find_tail): Remove. * libguile/srfi-1.h (scm_srfi1_find_tail): Likewise. * module/srfi/srfi-1.scm (find-tail): New procedure.
2020-06-17srfi-1: Rewrite 'find' in Scheme.Ludovic Courtès2-26/+2
This halves the wall-clock time of: guile -c '(use-modules (srfi srfi-1)) (define lst (make-list 100000000 1)) (find zero? lst)' and yields an 18% speedup on: guile -c '(use-modules (srfi srfi-1)) (define lst (make-list 100000000 1)) (find (lambda (x) (= 2 x)) lst)' * libguile/srfi-1.c (scm_srfi1_find): Remove. * libguile/srfi-1.h (scm_srfi1_find): Likewise. * module/srfi/srfi-1.scm (find): New procedure. * doc/ref/srfi-modules.texi (SRFI-1 Searching): Adjust docstring.
2020-06-12Update lighteningAndy Wingo6-50/+106
* libguile/lightening: Merge gitlab.com/wingo/lightening/ from 3260f7deebf4148f7c268e9a56cdab7a221e3da5.
2020-05-28Fix cast enabling SCM_DEBUG_TYPING_STRICTNESS 2Daniel Llorens1-1/+1
2020-05-27doc: Rephrase documentation of 'thunk?'.Ludovic Courtès1-2/+3
Fixes <https://bugs.gnu.org/41353>. Reported by Jan Synacek <jsynacek@redhat.com>. * doc/ref/api-procedures.texi (Procedure Properties): Rephrase documentation of 'thunk?'. * libguile/procs.c (scm_thunk_p): Likewise.
2020-05-16popen: Add 'pipeline' procedure.Rutger van Beusekom1-48/+18
* libguile/posix.c (scm_open_process): Remove. (scm_piped_process): Add to replace open_process. * module/ice-9/popen.scm (pipe->fdes): Add to convert pipe pair to fdes pair. (open-process): Add open-process for backwards compatibility. (pipeline): Add to implement a pipeline using piped-process. * doc/ref/posix.texi (Pipes): Document it. * test-suite/tests/popen.test ("open-process") ("piped-process", "piped-process: with output") ("pipeline"): New tests. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-13Bump objcode minor versionAndy Wingo1-1/+1
* libguile/loader.h (SCM_OBJCODE_MINOR_VERSION): * module/system/vm/assembler.scm (*bytecode-minor-version*): Bump, so that compiled files from Guile 3.0.3 will error when loaded on 3.0.2.
2020-05-12Zero the initial file port revealed count.Ludovic Courtès1-1/+2
Fixes <https://bugs.gnu.org/41204>. Reported by Caleb Ristvedt <caleb.ristvedt@cune.org>. Until now, Guile would leak the file descriptors of all the file ports not explicitly closed. * libguile/fports.c (scm_i_fdes_to_port): Initialize fp->revealed. * test-suite/tests/ports.test ("initial revealed count") ("non-revealed port is closed"): New tests. ("close-port & revealed port"): Check (port-revealed port). ("revealed port fdes not closed"): Likewise.
2020-05-11Reload FP if needed in bind-rest alsoAndy Wingo1-0/+6
* libguile/jit.c (compile_bind_rest): Reload FP if needed
2020-05-11Fix JIT asserts with different code generated by baselineAndy Wingo1-5/+22
* libguile/jit.c (UNREACHABLE): New register state. (unreachable): New predicate. (ASSERT_HAS_REGISTER_STATE): Succeed when unreachable. (compile_throw, compile_throw_value, compile_throw_value_and_data): Set unreachable flag. (compile_receive_values): Reload FP if needed.
2020-05-11Add new lookup, lookup-bound intrinsicsAndy Wingo2-0/+28
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): * libguile/intrinsics.c (lookup, lookup_bound): * libguile/intrinsics.c (scm_bootstrap_intrinsics): New intrinsics. * module/language/cps/reify-primitives.scm (reify-primitives): * module/language/cps/effects-analysis.scm (current-module): * module/language/cps/compile-bytecode.scm (compile-function): * module/system/vm/assembler.scm: Add compiler support.
2020-05-11Rename "lookup" intrinsic to "module-variable"Andy Wingo2-3/+3
It can return #f, unlike scm_(module_)?lookup. * libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): * libguile/intrinsics.c (module_variable, scm_bootstrap_intrinsics): Rename. * module/language/cps/compile-bytecode.scm (compile-function): * module/language/cps/effects-analysis.scm (current-module): * module/language/cps/reify-primitives.scm (reify-lookup) (compute-known-primitives): * module/language/tree-il/compile-bytecode.scm (emit-cached-module-box) (emit-cached-toplevel-box, emit-toplevel-box): * module/language/tree-il/compile-cps.scm (toplevel-box): * module/system/vm/assembler.scm (module-variable): Adapt users.
2020-04-29Add intrinsics for a baseline compilerAndy Wingo4-5/+201
Since there's no optimization in the baseline compiler, there's no sense in instruction explosion. * libguile/intrinsics.h: * libguile/intrinsics.c ($car, $cdr, $set-car!, $set-cdr!, $variable-ref, $variable-set!, $vector-length, $vector-ref, $vector-set!, $vector-ref/immediate, $vector-set!, $allocate-struct, $struct-vtable, $struct-ref, $struct-set! $struct-ref/immediate, $struct-set!): New intrinsics. * libguile/jit.c (compile_call_scm_scm, compile_call_scm_scm_slow) (compile_call_scm_scm_scm, compile_call_scm_scm_scm_slow) (compile_call_scm_uimm_scm, compile_call_scm_uimm_scm_slow): New code generators. * libguile/vm-engine.c (call-scm-scm, call-scm-scm-scm, call-scm-uimm-scm): New instructions. * module/system/vm/assembler.scm (emit-null?, emit-false?, emit-nil?): Export these. Also export emitters for the new intrinsics. (define-scm-scm-intrinsic, define-scm-uimm-scm-intrinsic) (define-scm-scm-scm-intrinsic): New helpers. * doc/ref/vm.texi (Intrinsic Call Instructions): Add new instructions.
2020-04-29Deprecate scm_bitvector, scm_make_bitvector, scm_bitvector_pAndy Wingo5-20/+48
* doc/ref/api-data.texi (Bit Vectors): Update. * libguile/bitvectors.h: * libguile/bitvectors.c: * libguile/deprecated.c: * libguile/deprecated.h: Deprecate scm_bitvector, scm_make_bitvector, and scm_bitvector_p. * libguile/read.c (scm_read_guile_bit_vector): Use scm_list_to_bitvector instead of scm_bitvector.
2020-04-29Prefer C-like interfaces for scm_c_bitvector_{set,clear}_bits_xAndy Wingo3-33/+52
* libguile/bitvectors.h: * libguile/bitvectors.c (scm_c_bitvector_set_bits_x) (scm_c_bitvector_clear_bits_x): Expose only C-like interfaces. No need to have a SCM_UNDEFINED return. * libguile/deprecated.c (scm_bit_set_star_x): Adapt. * doc/ref/api-data.texi (Bit Vectors): Update.