summaryrefslogtreecommitdiff
path: root/module
Commit message (Collapse)AuthorAgeFilesLines
* Fix some invalid unicode handling issues with suspendable ports.Christopher Baines2023-03-201-4/+4
| | | | | | | | | | | | | | | | Fixes <https://bugs.gnu.org/62290>. Based on the implementation in ports.c. I don't understand what this code is really doing, but the suspendable ports implementation differs from the similar C code for a couple of inequalities. * module/ice-9/suspendable-ports.scm (decode-utf8, bad-utf8-len): Flip a couple of inequalities. * test-suite/tests/ports.test ("string ports"): Add additional invalid UTF-8 test case. * NEWS: Update. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Fix no-clause case-lambda in pevalDaniel Llorens2023-03-171-0/+1
| | | | | | | | This is checked by optargs.test, which 3b47f87618047ebb8812788c64a44877a4f2e0dd broke. * module/language/tree-il/peval.scm (peval): Account for no clause (= no body) case-lambda.
* peval reduces some inlined case-lambda callsDaniel Llorens2023-02-271-0/+23
| | | | | | | * module/language/tree-il/peval.scm (peval): Reduce multiple case lambda in <call> trees according to the number of arguments. Do not try to reduce case-lambda using keyword arguments. * test-suite/tests/peval.test: Tests.
* Remove unnecessary module imports.Ludovic Courtès2023-02-2437-70/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These were found with: make GUILE_WARNINGS='-W1 -Wunused-module' * module/ice-9/copy-tree.scm: * module/ice-9/eval-string.scm: * module/ice-9/getopt-long.scm: * module/ice-9/poll.scm: * module/ice-9/popen.scm: * module/ice-9/sandbox.scm: * module/ice-9/threads.scm: * module/sxml/apply-templates.scm: * module/sxml/simple.scm: * module/system/base/types.scm: * module/system/repl/command.scm: * module/system/repl/common.scm: * module/system/repl/coop-server.scm: * module/system/repl/debug.scm: * module/system/repl/error-handling.scm: * module/system/repl/repl.scm: * module/system/repl/server.scm: * module/system/vm/assembler.scm: * module/system/vm/disassembler.scm: * module/system/vm/dwarf.scm: * module/system/vm/elf.scm: * module/system/vm/frame.scm: * module/system/vm/inspect.scm: * module/system/vm/linker.scm: * module/system/vm/program.scm: * module/system/vm/trace.scm: * module/system/vm/trap-state.scm: * module/system/vm/traps.scm: * module/system/xref.scm: * module/texinfo/indexing.scm: * module/texinfo/plain-text.scm: * module/texinfo/reflection.scm: * module/texinfo/string-utils.scm: * module/web/client.scm: * module/web/http.scm: * module/web/request.scm: * module/web/response.scm: Remove imports of unused modules.
* Add -Wunused-module.Ludovic Courtès2023-02-242-2/+163
| | | | | | | | | | | * module/language/tree-il/analyze.scm (<module-info>): New record type. (unused-module-analysis): New variable. (make-unused-module-analysis): New analysis. (make-analyzer): Add it. * module/system/base/message.scm (%warning-types): Add 'unused-module'. * test-suite/tests/tree-il.test (%opts-w-unused-module): New variable. ("warnings")["unused-module"]: New test prefix. * NEWS: Update.
* Add 'record-case' to '.dir-locals.el'.Ludovic Courtès2023-02-241-4/+0
| | | | | | * module/language/tree-il/fix-letrec.scm (fix-letrec): Remove "Local Variables" bit. * .dir-locals.el (scheme-mode): Add 'record-case'.
* Add internal definitions to derived formsLinus2023-01-242-9/+9
| | | | | | | | | | | This commit adds internal definitions to the following derived forms: when, unless, cond, case, with-fluids, and and-let*. * doc/ref/api-control.texi (Conditionals): Update the syntax and docs of when, unless, cond, and case. * module/ice-9/and-let-star.scm (and-let*): Changed begins to let. * module/ice-9/boot-9.scm (cond, case, when, unless, with-fluids): Changed begins to let.
* linker: Do not store entire ELF in memory when writing to a file.Ludovic Courtès2023-01-172-14/+73
| | | | | | | | | | | | | | | | | | | | | This reduces the amount of memory that needs to be allocated while writing the ELF file to disk. Note: We're abusing #:page-aligned? in 'link-elf' to choose whether to return a bytevector or a procedure. * module/system/vm/linker.scm (process-reloc): Subtract SECTION-OFFSET when writing to BV. (write-linker-object): Pass BV directly to the linker object writer. (link-elf): When PAGE-ALIGNED? is false, call 'bytevector-slice' from here. When it is true, return a procedure that takes a port and writes to it, without having to allocate a bytevector for the whole ELF container. * module/language/bytecode/spec.scm (bytecode->value): Handle X being a procedure instead of a bytevector. (bytecode) <#:printer>: Likewise. * test-suite/tests/linker.test (link-elf-with-one-main-section): Pass #:page-aligned? #f.
* linker: Linker object writer takes a single argument.Ludovic Courtès2023-01-172-44/+33
| | | | | | | | | | | | | | * module/system/vm/linker.scm (write-linker-object): Pass the 'linker-object-writer' a single argument. (string-table-writer, add-elf-objects): Adjust writers accordingly. (string-table-writer): (add-elf-objects): * module/system/vm/assembler.scm (link-data, link-text-object) (link-frame-maps, link-dynamic-section) (link-symtab, link-arities, link-docstrs) (link-procprops, link-debug): Likewise. * test-suite/tests/linker.test (link-elf-with-one-main-section): Likewise.
* linker, assembler: Avoid intermediate bytevectors.Ludovic Courtès2023-01-172-101/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reduces the amount of memory used during linking and reduces the number of copies to be done between bytevectors. * module/system/vm/linker.scm (<linker-object>): Remove 'bv' field and add 'size' and 'writer'. (make-linker-object): Adjust accordingly. (string-table-size): New procedure. (link-string-table!): Remove. (string-table-writer): New procedure. (allocate-segment): Adjust 'make-linker-object' call. (find-shstrndx): Call the 'linker-object-writer' of O. (add-elf-objects): Adjust 'make-linker-object' call. Remove 'make-bytevector' allocations and move serialization to lazy 'writer' procedures. Define 'segments' and 'add-header-segment!'. Return the latter as the first value. * module/system/vm/assembler.scm (make-object): Remove 'bv' parameter and add 'size' and 'writer'. (link-data): Remove 'make-bytevector' call and move serialization to a lazy 'writer' procedure. (link-text-object): Likewise. (link-frame-maps): Likewise. (link-dynamic-section): Likewise. (link-shstrtab): Likewise. (link-symtab): Likewise. (link-arities): Likewise, and remove 'bytevector-append'. (link-docstrs): Likewise. (link-procprops): Likewise. (link-debug): Likewise, and define 'copy-writer'. * test-suite/tests/linker.test (link-elf-with-one-main-section): Adjust accordingly.
* linker: Separate effectful part of 'add-elf-objects'.Ludovic Courtès2023-01-171-5/+15
| | | | | | | * module/system/vm/linker.scm (add-elf-objects)[write-and-reloc]: Split into... [compute-reloc, write-object-elf-header!]: ... this. Adjust accordingly.
* assembler: Separate effectful part of 'link-docstrs'.Ludovic Courtès2023-01-171-10/+13
| | | | | * module/system/vm/assembler.scm (link-docstrs): Define 'write-docstrings!' and use it.
* assembler: Separate effectful part of 'link-frame-maps'.Ludovic Courtès2023-01-171-19/+24
| | | | | * module/system/vm/assembler.scm (link-frame-maps)[make-frame-maps]: Define 'write!' and use it.
* assembler: Separate effectful part of 'link-procprops'.Ludovic Courtès2023-01-171-14/+26
| | | | | * module/system/vm/assembler.scm (link-procprops): Define 'write-procprops!' and use it.
* assembler: Separate effectful part of 'link-dynamic-section'.Ludovic Courtès2023-01-171-30/+45
| | | | | * module/system/vm/assembler.scm (link-dynamic-section): Define 'relocs' once for all. Define 'write!' and use it.
* assembler: Separate effectful part of 'link-symtab'.Ludovic Courtès2023-01-171-15/+22
| | | | | * module/system/vm/assembler.scm (link-symtab): Define 'names' and 'write-symbols!'. Use it.
* assembler: Separate 'process-relocs' from 'patch-relocs!'.Ludovic Courtès2023-01-171-35/+51
| | | | | | | | * module/system/vm/assembler.scm (process-relocs): Remove 'buf' parameter and turn into a pure function. (patch-relocs!): New procedure. Perform the side effects previously done in 'process-relocs'. (link-text-object): Adjust accordingly.
* Do not expand 'make-vector' primcall with wrong number of arguments.Ludovic Courtès2023-01-161-3/+3
| | | | | | | | | Fixes <https://bugs.gnu.org/60522>. Reported by Sascha Ziemann <ceving@gmail.com>. * module/language/tree-il/primitives.scm (make-vector): Return #f when passed an incorrect number of arguments. * test-suite/tests/peval.test ("partial evaluation"): Add tests.
* Add 'bytevector-slice'.Ludovic Courtès2023-01-141-0/+24
| | | | | | | | | * module/rnrs/bytevectors/gnu.scm: New file. * am/bootstrap.am (SOURCES): Add it. * libguile/bytevectors.c (scm_bytevector_slice): New function. * libguile/bytevectors.h (scm_bytevector_slice): New declaration. * test-suite/tests/bytevectors.test ("bytevector-slice"): New tests. * doc/ref/api-data.texi (Bytevector Slices): New node.
* Bump user-visible copyright years to 2023.Ludovic Courtès2023-01-133-4/+4
| | | | | | * module/ice-9/command-line.scm (version-etc): * module/scripts/compile.scm (show-version): * module/system/repl/common.scm (*version*): Bump to 2023.
* Recognize LoongArch compilation targets.Zhang Ning2022-12-211-0/+2
| | | | | | * module/system/base/target.scm (cpu-endianness): Add case for "Loongarch" variants Signed-off-by: Zhang Ning <zhangn1985@outlook.com>
* Fix peval bug when expand-primitives introduces lexicalsAndy Wingo2022-12-011-2/+38
| | | | | | | | * module/language/tree-il/peval.scm (augment-var-table-with-externally-introduced-lexicals): New helper. * module/language/tree-il/peval.scm (peval): Augment store with any lexicals introduced by expand-primitives. * test-suite/tests/peval.test ("partial evaluation"): Add tests.
* Fix order-of-side-effects bug in (eq? x y z) expansionAndy Wingo2022-12-011-12/+34
| | | | | | | | | * module/language/tree-il/primitives.scm (bind-lexicals): New helper. (expand-eq, expand-chained-comparisons): Ensure all arguments are eagerly evaluated. Previously an intermediate #f result would shortcut the evaluation. * test-suite/tests/compiler.test ("size effects in multi-arg eq / <"): Add test.
* Avoid 'frame-local-ref' errors when printing backtrace.Andrew Whatson2022-11-291-2/+10
| | | | | | | Workaround for <https://bugs.gnu.org/57948>. * module/system/vm/frame.scm (frame-call-representation): Treat a binding as "unspecified" if its slot exceeds 'frame-num-locals'.
* disassembler: Show intrinsic name for 'call-' instructions.Ludovic Courtès2022-11-011-1/+46
| | | | | | | * module/system/vm/disassembler.scm (code-annotation)[intrinsic-name]: New procedure. Add clauses for intrinsics. * NEWS: Update.
* doc: Document how (ice-9 format) replaces 'format'.Jean Abou Samra2022-10-121-1/+8
| | | | | | | * doc/ref/misc-modules.texi (Formatted Output): Add paragraph. * module/ice-9/format.scm: Add comment. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* srfi-35: Fix expansion of 'condition' for compound conditions.Ludovic Courtès2022-10-011-3/+3
| | | | | | | * module/srfi/srfi-35.scm (condition): Use 'make-exception' instead of 'make-compound-condition', which is unbound in this module. * test-suite/tests/srfi-35.test ("syntax")["compound condition, hygienic macro expansion"]: New test.
* Baseline compiler no longer crashes on (not (list 1 2)).Ludovic Courtès2022-10-011-1/+3
| | | | | | | | | | Fixes <https://bugs.gnu.org/58217>. * module/language/tree-il/compile-bytecode.scm (canonicalize) [finish-conditional](predicate?): Do not assume 'lookup-primitive' returns true. * test-suite/tests/compiler.test ("regression tests") ["(not (list 1 2))"]: New test.
* string-fun: Fix typojgart2022-09-171-1/+1
|
* In curried definitions, move docstrings to outermost lambdaJean Abou Samra2022-08-291-32/+36
| | | | | | | This makes the docstring attached to the curried function being defined rather than the result of its application until a function that runs the body is obtained, fixing https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50068
* Properly display locations in "source vector" form.Andrew Whatson2022-08-261-6/+13
| | | | | | | | Locations are stored in tree-il records in "source vector" form, but `location-string' was rendering these as <unknown-location>. * module/system/base/message.scm (location-string): Support locations passed as a file/line/column vector.
* web: 'tls-wrap' retries handshake upon non-fatal errors.Ludovic Courtès2022-08-041-15/+21
| | | | | | | | | | Fixes <https://bugs.gnu.org/49223>. Reported by Domagoj Stolfa <ds815@gmx.com>. Backport of Guix commit b36267b1d96ac344d2b42c9822ce04b4c3117f85. * guix/build/download.scm (tls-wrap): Retry up to 5 times when 'handshake' throws a non-fatal error.
* web: Do not wrap TLS port on GnuTLS >= 3.7.7.Ludovic Courtès2022-08-041-55/+55
| | | | | | | | | | | | | | The custom input/output port wrapping the TLS session record port would introduce overhead, and it would also prevent its uses in a non-blocking context--e.g., with Fibers. The port close mechanism added in GnuTLS 3.7.7 allows us to get rid of that wrapper. Backported from Guix commit dd573ceea73295c7a872088ecd91e5f0fd74bf2b. * web/client.scm (wrap-record-port-for-gnutls<3.7.7): New procedure, with code formerly in 'tls-wrap'. (tls-wrap): Check for 'set-session-record-port-close!' and use it when available; otherwise call 'wrap-record-port-for-gnutls<3.7.7'.
* web: Don't hide missing data in the chunked input port.Christopher Baines2022-07-041-2/+16
| | | | | | | | | | | | | | | | | This port is of limited use if it cannot be used reliably. Rather than behaving as if the input has finished when it ends unexpectedly, instead raise an exception. * module/web/http.scm (make-chunked-input-port): Raise an exception on premature termination. (&chunked-input-ended-prematurely): New exception type. (chunked-input-ended-prematurely-error?): New procedure. * test-suite/tests/web-http.test (pass-if-named-exception): Rename to pass-if-named-exception. (pass-if-named-exception): New syntax. ("Exception on premature chunk end"): New test for this behaviour. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* web: Handle ending CRLF (\r\n) for chunked input and output ports.Christopher Baines2022-07-041-1/+2
| | | | | | | | | | | | | | | | | The chunked transfer encoding specifies the chunked body ends with CRLF. This is in addition to the CRLF at the end of the last chunk, so there should be CRLF twice at the end of the chunked body: https://datatracker.ietf.org/doc/html/rfc2616#section-3.6.1 * module/web/http.scm (make-chunked-input-port): Read two extra bytes at the end of the chunked input. (make-chunked-output-port): Write the missing \r\n when closing the port. * test-suite/tests/web-http.test (chunked encoding): Add missing \r\n to test data. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* web: send capitalized authorization header schemeAleix Conchillo Flaqué2022-07-041-2/+12
| | | | | | | | | | | * module/web/http.scm (write-credentials): capitalize authorization header scheme. The standard allows the scheme to be case-insensitive, however most libraries out there expect the scheme to be capitalized, which is what it is actually used in RFC docs (e.g. https://datatracker.ietf.org/doc/html/rfc7617#section-2). Some libraries even reject lowercase scheme making Guile incompatible. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Add missing #:modules argument for coverage-data->lcov.Jessica Tallon2022-06-161-3/+9
| | | | | | | | | | | | | The code coverage function `coverage-data->lcov` has a documented `modules` argument, however that was missing from the source. I have added it so when supplied it only converts the coverage data for the supplied modules. If not supplied it defaults the old behavour of including all the modules currently loaded. * module/system/vm/coverage.scm (coverage-data->lcov): Add #:modules parameter and honor it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Allow empty vendor string in GNU target triplets.Taylor R Campbell2022-06-161-1/+8
| | | | | | | | | | | | | | | | | NetBSD and pkgsrc have been using an empty vendor string since the mid-'90s, such as x86_64--netbsd. pkgsrc has been carrying around a workaround just the guile build for a long time. (Before that, NetBSD omitted the vendor altogether, so if x86_64 existed then it might have been `x86_64-netbsd', but that caused more problems.) This change makes Guile accept an empty vendor string so workarounds are no longer necessary. * module/system/base/target.scm (validate-target): Allow empty vendor string in GNU target triplets. * test-suite/tests/cross-compilation.test ("cross-compilation"): Add tests for "x86_64--netbsd". Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* Allow (library ...) form in cond-expand inside R7RS define-library.Mihail Iosilevich2022-06-161-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Guile (3.0.8) reports a compilation error when cond-expand tries to check existence of a missing library: scheme@(guile-user)> (define-library (test) (cond-expand ((library (scheme sort)) (import (scheme sort))))) While compiling expression: no code for module (scheme sort) It looks like bug #40252 was not fully eliminated. Also, (library ...) cannot handle module names like (srfi 1), though (import (srfi 1)) works fine. For example, this code fails: scheme@(guile-user)> (define-library (test) (cond-expand ((library (srfi 1)) (import (srfi 1))))) While compiling expression: In procedure symbol->string: Wrong type argument in position 1 (expecting symbol): 1 There are probably other cases when (library ...) and (import ...) does not work identically: (library ...) uses resolve-interface while (import ...) uses resolve-r6rs-interface. This patch fixes both issues. * module/ice-9/r7rs-libraries.scm (define-library): Replace 'resolve-interface' call by 'resolve-r6rs-interface', wrapped in 'cond-expand'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* 'module-define!' honors the 'module' parameter.Ludovic Courtès2022-06-161-2/+2
| | | | | * module/ice-9/boot-9.scm (module-define!): In 'module-add!' call, pass MODULE rather than (current-module).
* psyntax: Honor source properties for things other than syntax objects.Ludovic Courtès2022-03-072-77/+93
| | | | | | | | | | | | | | | | | Commit 54bbe0b2846c5b1aa366c91d679ba724869c8cda inadvertently led psyntax to dismiss source location info for data returned by read hash extensions, because read hash extensions return plain data with associated source properties, even when called from 'read-syntax'. This change reverts part of this commit to restore that behavior. Fixes <https://issues.guix.gnu.org/54003>. * module/ice-9/psyntax.scm (datum-sourcev): New procedure. (source-annotation): Fall back to 'datum-sourcev'. * module/ice-9/psyntax-pp.scm: Regenerate. * test-suite/tests/compiler.test ("psyntax")["syntax-source with read-hash-extend"]: New test.
* Bump user-visible copyright years to 2022Andy Wingo2022-02-112-4/+4
| | | | | * module/ice-9/command-line.scm (version-etc): * module/system/repl/common.scm (*version*): Bump to 2022.
* psyntax: Pass source vectors to tree-il constructors.Ludovic Courtès2022-02-075-116/+105
| | | | | | | | | | | | | | | | | | | | | | | | Avoiding systematic conversion from source vectors to property alists saves 20% on the final heap size of a process doing: (compile-file FILE #:optimization-level 1) where FILE is large. * module/language/tree-il.scm (tree-il-src/ensure-alist): New procedure with setter. Export as 'tree-il-src'. * module/ice-9/psyntax.scm (build-void, build-call) (build-conditional, build-lexical-reference, build-lexical-assignment) (build-global-reference, build-global-assignment) (build-global-definition, build-simple-lambda, build-case-lambda) (build-lambda-case, build-primcall, build-primref) (build-data, build-sequence, build-let, build-named-let) (build-letrec, expand-body): Remove (sourcev->alist src) calls. * module/ice-9/psyntax-pp.scm: Regenerate. * module/language/tree-il/analyze.scm (shadowed-toplevel-analysis): Use 'tree-il-src' instead of accessing the 'src' slot directly. * module/system/vm/assembler.scm (link-debug): Adjust so PC can be followed by a vector or an alist.
* Deprecate symbol properties.Ludovic Courtès2022-02-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | * libguile/strings.c (scm_i_make_symbol): Remove 'props' argument. Use 3 words instead of 'scm_double_cell'. * libguile/strings.h: Adjust accordingly. * libguile/symbols.c (scm_i_str2symbol, scm_i_str2uninterned_symbol): Likewise. (scm_symbol_fref, scm_symbol_pref, scm_symbol_fset_x, scm_symbol_pset_x): Move to... * libguile/deprecated.c: ... here. Rewrite in terms of object properties. (symbol_function_slot, symbol_property_slot): New variables. * libguile/symbols.h (SCM_SYMBOL_FUNC, SCM_SET_SYMBOL_FUNC) (SCM_SYMBOL_PROPS, SCM_SET_SYMBOL_PROPS) (scm_symbol_fref, scm_symbol_pref, scm_symbol_fset_x) (scm_symbol_pset_x): Move to... * libguile/deprecated.h: ... here. Mark declarations as 'SCM_DEPRECATED'. * module/system/base/types.scm (cell->object): Remove 'props' field for %TC7-SYMBOL. * doc/ref/api-data.texi (Symbol Props): Remove. * NEWS: Update.
* Avoid source properties in psyntaxAndy Wingo2022-02-012-136/+170
| | | | | | | | | | | | | | | * module/ice-9/psyntax.scm (source-annotation): Only return source properties from syntax objects. (source-wrap): Don't look for source properties. (expand-macro): Rebuild source properties on macro output via source-wrap, not source properties. Only annotate head of a chain of pairs. (strip): Here's the only use of set-source-properties!: when stripping a syntax object to a datum. (macroexpand): If the input expression is not a syntax object, eagerly extract its source properties. (datum->syntax): Fix case in which source is given as an alist. * module/ice-9/psyntax-pp.scm: Regenerate.
* Fix reproducibility for inlinable-exportsAndy Wingo2022-02-011-2/+8
| | | | | * module/language/tree-il/inlinable-exports.scm (compute-decoder): Map items in order of their code.
* Rework bootstrap to be reproducibleAndy Wingo2022-02-012-400/+11
| | | | | | | | | | | | | | | | | | * configure.ac: * Makefile.am (SUBDIRS): Replace bootstrap/ with stage0, stage1, and stage2. * am/bootstrap.am: Include all files and all rules. * meta/build-env.in (GUILE_AUTO_COMPILE): Always turn off auto-compilation. Take a GUILE_BOOTSTRAP_STAGE argument, which can be stage0, stage1, stage2, or unset. Adapt the load-compiled path accordingly. * meta/uninstalled-env.in: Include .go files from stage2. * module/Makefile.am: Rework to use boostrap.am. * module/system/base/optimize.scm (available-optimizations): Punt the inlinable-exports machinery to -O2. * stage0/Makefile.am: * stage1/Makefile.am: * stage2/Makefile.am: New files.
* peval cross-module-inlining gracefully handles missing interfaceAndy Wingo2022-01-171-4/+6
| | | | | | | * module/language/tree-il/peval.scm (peval): The intention was for resolve-interface to return an interface only if it exists, but actually it throws if the interface isn't know. Fix to do what we intended to do.
* Fix inlinable-exports bug for pure modulesAndy Wingo2022-01-171-2/+2
| | | | | | * module/language/tree-il/inlinable-exports.scm (compute-decoder): Fix bug in which inlinable exports in a pure module would have a missing make-struct/no-tail binding.
* Re-rewrite integer-expt in CAndy Wingo2022-01-131-39/+1
| | | | | | | | | | | Calling out to Scheme was a performance regression. * libguile/integers.h: * libguile/integers.c (scm_integer_expt_ii, scm_integer_expt_zi): New internal functions. * libguile/numbers.c (scm_integer_expt): Go back to C. But, include fast cases for inums and doubles. * module/ice-9/boot-9.scm: Revert addition of integer-expt.