Commit Graph

4683 Commits

Author SHA1 Message Date
Robby Findler
93f4c9226b change the way +1 arity functions work so the code is generated
by `contract-out` instead of `->`

This seems to save about a second of startup time in (non-cs) DrRacket
and about .1 seconds in drracketcs.

The code is also theoretically more easily inlined. Still not easy enough, however.
2019-07-20 10:45:23 -05:00
Paulo Matos
2045c4abd8
Fix processor-count for windows systems (#2752)
DOS_FILE_SYSTEM is not defined in rktio, use RKTIO_SYSTEM_WINDOWS instead

Fixes #2674
2019-07-20 16:20:19 +02:00
Matthew Flatt
43ba15ca38 expander: fix performance problem with datum->syntax
In a pattern like

 (let loop ([l l])
   (define v (syntax-e l))
   (cond
     [(null? v) 'done]
     [else
      (loop (datum->syntax #f (cdr v)))]))

the running time was O(N^2) for a list of syntax objects of length N.
That pattern is relevant for traversals that use `syntax-case` like

 (let loop ([l l])
   (syntax-case l ()
     [(a . b) (loop #'b)]
     [() 'done]))

Avoid bad behavior by recording in an weak hash table certain pairs
that were previously been produced by `datum->syntax` internally so
that they can be used as-is.
2019-07-18 12:19:29 -06:00
Matthew Flatt
e4c6a2560b cs & thread: fix problems with future-shutdown synchronization
Relevant to #2725
2019-07-18 06:05:53 -06:00
Matthew Flatt
91cdc06c91 tanh: single flonum result for range of arguments
Fix the case for > 1.29f-08 and <= 0.549f0.

Closes #2736
2019-07-18 06:05:53 -06:00
Matthew Flatt
c397dba145 cs: better build-time error if lz4 isn't available
Mainly for cross-compilation with a Windows target, the Racket CS
build process may need to run `lz4` as an external program. In that
case, complain when `lz4` isn't found, instead of letting `system*`
complain about getting `#f`.
2019-07-17 13:15:50 -06:00
Sam Tobin-Hochstadt
997f5b583c Support chaperoning tcp-listeners as evts.
Found by the Typed Racket test suite.
2019-07-15 09:18:33 -04:00
Matthew Flatt
fa155727df cs: unbreak Windows build
Add pe-made "cs_config.h" for Windows.
2019-07-12 11:49:39 -06:00
Ryan Culpepper
b4d7885b16 openssl: fix ssl-addresses, docs for ports->ssl-ports 2019-07-12 00:22:28 +02:00
Ryan Culpepper
65e2d802dd openssl: add key and cert-chain args to ssl-make-{client,server}-context 2019-07-12 00:22:28 +02:00
Ben Greenman
eef651743e
contract: collapsible, prune leaves if eq? and trusted (#2706)
Change the condition for filtering leaf contracts via `eq?`.

Before, we looked for flat or chaperone contracts.
After, look for flat or trusted contracts. So:

1. untrusted chaperones with side effects that are unsafe to drop are not
   dropped, and
2. impersonator contracts can now be dropped (object/c, recursive-contract)
2019-07-11 15:53:16 -04:00
Matthew Flatt
ef4eb585d7 reader: repair readtable re-mapping of # comment forms
Thanks to @LiberalArtist for the bug report and examples.
2019-07-11 12:09:21 -06:00
Matthew Flatt
bad64945e7 racket/fasl: support unsafe-undefined
Since a literal unsafe-undefined can be serialized in compiled code,
support in fasl.
2019-07-11 05:13:39 -06:00
Paulo Matos
e6922e76ea
Ensure that src variable type to test mbsrtowcs is correct (#2735)
When compiling with -Werror (./configure CFLAGS="-Werror" ...),
the test to see if mbsrtowcs exists
failed with pointer type of incompatible type, is char **, should be
const char **. It would proceed to assume mbsrtowcs didn't exist.
2019-07-11 12:20:36 +02:00
Matthew Flatt
85f4fc1337 cs & schemify: fix incorrect constant-folding for {fx,fl}vector
Closes #2729
2019-07-09 17:56:15 -06:00
Matthew Flatt
15587d84fe cs & schemify: repair bad cross-module copy propagation
Closes #2732
2019-07-09 15:20:24 -06:00
Matthew Flatt
0284bdaa58 cs & thread: fix chaperone-evt on will executors
Closes #2730
2019-07-09 13:48:30 -06:00
Matthew Flatt
8c052df959 cs & thread: repair for custodian sync witth future host thread 2019-07-09 13:37:24 -06:00
Matthew Flatt
9c0a3abfdb cs: repair for 32-bit ELF 2019-07-09 09:04:58 -06:00
Matthew Flatt
8e85441410 repairs for procedure-spcialize 2019-07-08 11:48:15 -06:00
John Clements
003f0dd72e Post-release version for the v7.4 release 2019-07-08 02:33:57 -07:00
Matthew Flatt
839fb84eec cs & io: fix security-guard call in current-directory 2019-07-07 10:11:37 -06:00
Matthew Flatt
79d6b9bc18 json: preserve old behavior in terminating a number
The json parser has allowed "1x" as "1" and "1e-0x" as "1.0", so
keep that behavior for now.
2019-07-06 05:59:14 -06:00
Dmitry Moskowski
bbb8707a4a json: fixing scientific notation exponent sign bug
if exponent contains leading zeroes it's sign will be always `+`. example:

$ racket                                                                                                                                                                                                                                                      (6s 38ms)
Welcome to Racket v7.3.
> (require json)
> (jsexpr->string 0.000001)
"1e-06"
> (string->jsexpr (jsexpr->string 0.000001))
1000000.0
2019-07-06 05:57:22 -06:00
Matthew Flatt
c0104a29ef CS bootstrap: avoid pessimizing primitives
Speed up the bootstrap process by more directly referencing primitives
that won't be replaced in the top-lvel namespace for simulating Chez
Scheme.
2019-07-05 15:22:02 -06:00
Matthew Flatt
1e7dbbe020 CS bootstrap: fix structure-operation simplification 2019-07-05 12:12:13 -06:00
Matthew Flatt
3235f648fb speed up Chez Scheme bootstrap a little
Recognize constructor patterns to avoid some indirections.
2019-07-05 08:13:12 -06:00
Matthew Flatt
f0314ddad7 configure: fix failure handling in configure dispatch
Closes #2727
2019-07-05 08:13:12 -06:00
Alexis King
ca8870e964 Add property/c contract combinator for checking first-order properties 2019-07-04 14:08:30 -05:00
Matthew Flatt
21481421a0 unbreak compilation with gcc < v4.5 2019-07-04 07:38:53 -06:00
Matthew Flatt
62f1243136 expander: fix extract mode to not run and work with a submodule root
Also, report an error, for now, if a cache directory is not specified
in extract mode, since extraction doesn't currently work without it.
2019-07-03 10:38:12 -06:00
Paulo Matos
8f85df64d9
Add MZ_ prefix to macros NORETURN and UNREACHABLE (#2723)
Since the definitions of these live in the public header scheme.h,
adding this prefix reduces clashes with other related macros.
2019-07-03 15:32:48 +02:00
Paulo Matos
e26d2e11d8
Proper cross-platform no return annotations for error functions (#2709)
Ensures proper noreturn annotations for error functions. Implemented
cross-platform unreachable annotation. No warnings in tested clang or
gcc with default flags. Tested as well on MacOS and Windows.
2019-07-03 08:31:18 +02:00
Sorawee Porncharoenwase
0ffb16bce3 Fix various typos 2019-07-02 12:52:23 -06:00
Matthew Flatt
b0f77a98a3 schemify: improve cross-module optimization
The schemify pass collects known-value information as the first step
of processing a linklet body, but the main pass to process the linklet
body may simplify it in a way that exposes new information. For
example, in

 (define (call) (values 1 2))
 (define-values (x y) (call))

the main pass will inline `call` and expose the fact that `x` and `y`
are always 1 and 2, respectively.

Adjust schemify to inspect the simplified form of a definition and
potentially add new information to known-value information, which is
useful later in the ame linklet body and also as cross-module
information.
2019-07-01 15:19:28 -06:00
Matthew Flatt
ecabcd385a schemify: add constant folding
Like other optimizations that schemify duplicates, constant folding
helps support cross-module optimization. Related "no-prompt"
declarations for primitives can reduce `call-with-module-prompt`s in
schemified output, too, which can interfere with Chez Scheme's
optimizer.
2019-07-01 14:34:25 -06:00
Paulo Matos
831e75d731
Remove SCHEME_NO_EXN block (#2718)
This is probably related to #2712.
It's the only occurrence of SCHEME_NO_EXN pointing to the fact that
this is an historical artifact that can be removed.
2019-07-01 16:17:07 +02:00
Matthew Flatt
0e1af0be89 schemify: recognize define-values split after inlining
Recognize `(define-values (id ...) (values rhs ...))` and split to
multiple `define`s after simplifying the right-hand side of
`define-values`. Also, don't split if a define variable is referenced
too early.
2019-07-01 06:11:17 -06:00
Matthew Flatt
c5523fef02 use fixnum-for-every-platform? for case 2019-07-01 05:41:08 -06:00
Paulo Matos
e97c85b79e
Mark do_raise as NORETURN and ensure it does not return (#2717) 2019-07-01 12:55:30 +02:00
Paulo Matos
26cd03ec8f
Do not add explicit return statement when it doesn't exist (#2715)
Adding return statement where it doesn't exist, causes problems with
functions marked no return so it should be avoided.

Related to #2709 - with this PR, clang won't complain any longer
about issues with xform generated sources about functions marked
no return that do indeed return.
2019-07-01 12:30:45 +02:00
Paulo Matos
fcddf7e9ba
Whitespace cleanup (#2716)
Requested as a separate PR in #2714
2019-07-01 12:28:22 +02:00
Matthew Flatt
f8e5526b28 unbreak some 32-bit x86 builds 2019-06-30 11:40:17 -06:00
Matthew Flatt
020c75792c add fixnum-for-every-system?
The `case` macro needs to use the new predicate instead of `fixnum?`,
but delay swittching over until Typed Racket is ready.
2019-06-29 20:18:23 -06:00
Matthew Flatt
b1a5c86702 cs: disable bytecode loaded with a non-original code inspector
Racket CS now passes all tests in the core Racket test suite.
2019-06-29 09:20:36 -06:00
Matthew Flatt
97b2982a1d schemify: update demo 2019-06-29 08:30:08 -06:00
Matthew Flatt
efeb9116d5 cs & schemify: fix set!-vs.-define tracking 2019-06-29 08:13:52 -06:00
Matthew Flatt
82d40d1509 use wrappers for trig functions in complex variants
Using wrappers applies various "sconfig.h"-configured fixups.
2019-06-29 05:46:10 -06:00
Matthew Flatt
2847d1d22a improve atan, asin, and acos on complex numbers
Replace naive calculations with ones based on Kahan's "Branch Cuts for
Complex Elementary Functions" as implemented in Chez Scheme.
2019-06-28 16:51:48 -06:00
Matthew Flatt
8e1b27592f cs: disable non-decimal string->number on inexacts 2019-06-28 10:57:59 -06:00
Matthew Flatt
75ff7870bd improve / precision on mixed exact--inexact complex numbers 2019-06-28 10:57:59 -06:00
Matthew Flatt
ff94c6d8d8 cs: fix variable-reference->module-... on reference to primitive 2019-06-28 10:57:59 -06:00
Matthew Flatt
032ab4e374 cs: add place logging 2019-06-28 10:57:59 -06:00
Ryan Culpepper
3c12957c7e template: mark pattern variables as disappeared
This fixes a bug introduced in 291565.
2019-06-27 22:22:08 +02:00
Matthew Flatt
cbaddd2164 cs & thread: repairs for memory accounting and places 2019-06-26 13:50:06 -06:00
Matthew Flatt
8985a409b8 openssl: fix bytes-terminator problem on Racket CS
Make sure the argument to SSL_ctrl has a nul terminator.
2019-06-26 13:50:06 -06:00
Matthew Flatt
5e59ae0586 rktio: use only async-signal safe after fork
In particular, `malloc` is not async-signal safe.
2019-06-26 13:50:06 -06:00
Paulo Matos
7422abb42a
Remove reference to NO_SCHEME_EXNS (#2712) 2019-06-26 17:03:12 +02:00
Matthew Flatt
a0023d5797 fix environment-variables-copy and case-normalization
Preserve the original case of an environment variable for
round-tripping on systems where environment variable names are
case-normalized.
2019-06-25 14:56:39 -06:00
Matthew Flatt
8c1dbae88b expander: improve extractor to recognize once-set variables
When `set!` is used to tie a recursove knot in a flattened linklet,
the expander can recognize that pattern and not complain that a
mutable variable might be shared across places. Improving that
inference means fewer `++global-ok` flags in Makefiles.

This commit also avoids single-quote as an escaping form in a
makefile, which doesn't work with nmake on Windows.
2019-06-25 08:43:38 -06:00
Matthew Flatt
3fb226ce2a cs: fix future-thread signaling
Fix confusion between signal and broadcast operation.
2019-06-24 20:14:52 -06:00
Matthew Flatt
b64e17388f cs: fix stdio/syslog GC logging as triggered by future thread
Always use the main `rktio` instance and don't try to explicitly start
atomic mode.
2019-06-24 20:00:51 -06:00
Matthew Flatt
309a0c2489 cs: fix future-logging race 2019-06-24 18:28:03 -06:00
Matthew Flatt
51ab4a5c6a thread: repairs for event logging
Fix RacketCS so that the future visualizer works.
2019-06-24 16:36:16 -06:00
Matthew Flatt
0106abaf6e bump version number
Since it removes an built-in place-local definition, commit 564dcf339a
can affect compilation for Racket CS.
2019-06-24 15:29:45 -06:00
Matthew Flatt
0d3d0d7d86 thread: add notes on the behavior of futures 2019-06-24 14:54:37 -06:00
Matthew Flatt
564dcf339a cs: fix memory accounting and futures
Also avoid problems with interrupting a rapidly allocating
computation and shutting down the main custodian.
2019-06-24 13:59:03 -06:00
Matthew Flatt
a5a84ea8c6 remove accidentally committed debugging printout 2019-06-24 08:14:58 -06:00
Matthew Flatt
1192225c97 avoid some compiler warnings 2019-06-23 06:46:28 -06:00
Matthew Flatt
1e84b11462 expander: repair extraction when using an existing Racket build
Recent improvements to module-name resolution caching exposed a
problem in the extraction setup.
2019-06-22 07:43:02 -06:00
Matthew Flatt
f00de510de cs configure: support installed libz and libzl4
Continue to build the bundled-with-Chez zlib and lz4 by default, but
support `--enable-libz` and `--enable-liblz4`, and turn those on when
the Chez Scheme directory doesn't have bundled versions. That should
make things build right for distributions where repackaging
dependencies is disallowed or discouraged.
2019-06-22 07:11:09 -06:00
Matthew Flatt
6647d832bb configure: further improvements for NetBSD and OpenBSD
Enable ELF support for `racketcs` embedding, and add `paxctl +m`
build steps for NetBSD.
2019-06-22 06:23:47 -06:00
Matthew Flatt
7706b447a5 configure: propagate ARFLAGS to libffi configure 2019-06-21 21:54:22 -06:00
Matthew Flatt
5fb38fc246 cs: sync include path for {Free,Open}BSD 2019-06-21 21:12:17 -06:00
Matthew Flatt
e68269b357 makefile: avoid automatic "Makefile" rebuild 2019-06-21 19:46:39 -06:00
Matthew Flatt
90b79524aa revise build to avoid ld and nicear
The Chez Scheme build process now create an archive instead of linking
"kernel.o". Adjust the Racket CS build to use archives instead of
"kernel.o".

Also, modernize the Racket build's use of `ar`. Using the flags `rc` by
default (instead of `ruv`) should avoid the need for `nicear`.
2019-06-21 16:53:58 -06:00
Matthew Flatt
5c51096a88 cs: repair filesystem-change-evt
Correct an incomplete adaptation in a2a67a9660.
2019-06-21 13:35:33 -06:00
Matthew Flatt
c7f7170a3e avoid compiler warning 2019-06-21 09:50:32 -06:00
Matthew Flatt
6e70d8ec1d nicer nicear: suppress "modifier ignored" warning
If GUN ar is configured for deterministic mode by default, then

  ar: `u' modifier ignored since `D' is the default (see `U')

prints. Suppress that to avoid stderr output.
2019-06-21 09:49:11 -06:00
Matthew Flatt
db3b75eaf1 expander: add shadow filesystem for Windows in collection lookup
Checking for directories when searching for a collection can be
especially slow with the Windows filesystem, but Windows also supports
filesystem-change events. So, cache information about the existence of
paths, relying on filesystem-change events to detect with the cache is
out of date.

Related to racket/drracket#281
2019-06-21 09:27:12 -06:00
Matthew Flatt
a2a67a9660 filesystem-change-evt: fix use of failure thunk
Also, allow the failure thunk to be #f to get the default behavior.
2019-06-21 09:27:12 -06:00
Matthew Flatt
ec5b45e4f8 cs: inline arithmetic-shift and other bitwise operations 2019-06-20 18:31:19 -06:00
Matthew Flatt
9083c6abb4 schemify: use unsafe box operation for lifted mutable variables 2019-06-20 18:30:55 -06:00
Matthew Flatt
bf692f572d cs: avoid indirection through Chez Scheme for raise 2019-06-20 14:37:03 -06:00
Matthew Flatt
3f35504355 thread: refactor scheduler poll-and-select loop
Further reduce redundant checks, and also avoid an excessive delay
after making the process sleep.
2019-06-20 14:36:43 -06:00
Matthew Flatt
6d3eff55a4 cs: repair for external signals
Like 2a1404f9a3, but for Ctl-C.
2019-06-20 12:14:48 -06:00
Matthew Flatt
35ff9137e7 cs: tweak return for call/ec and call-with-continuation-barrier
The prompt installed for an escape continuation or continuation
barrier is never used to delimit a captured continuation, so the
return from the continuatiton can be streamlined slightly.

The benefit is very small (but detectable in the macro expander's use
of barriers). There's an opportunity to use `call/1cc` instead of
`call/cc`, but that change does seem to help --- neither Chez Scheme's
current `call/1cc` nor the opportunistic variant of `call/cc` use to
implement continuation attachments.
2019-06-20 08:48:56 -06:00
Matthew Flatt
30393ae0fa cs: linear-time prompt check
Add cache for `continuation-prompt-available?` so it's amortized
constant time.
2019-06-20 08:48:56 -06:00
Ryan Culpepper
685d067361 syntax/parse: fix handling of ~seq with action patterns 2019-06-20 16:36:14 +02:00
Matthew Flatt
2a1404f9a3 cs & io: fix fd semaphore polling
Reducing external-event polling exposed a problem with fd semaphore
checking, where the check before sleeping didn't abandon the sleep if
an fd semaphore was posted.

Also, fix a bug with interrupted network address lookup.
2019-06-19 18:13:37 -06:00
Matthew Flatt
1ba4d76fe0 cs & thread: avoid excessive polling for external events
Reduce polling in the case that threads that block and swap rapidly,
in which case polling on every thread swap can be useless and
expensive.
2019-06-19 17:27:24 -06:00
Matthew Flatt
ba8d442e75 cs & thread: refactor and finish futures implementation
Complete the implementation of futures, fsemaphores, future logging,
and their cooperation with threads, places, and custodians.
2019-06-19 12:50:19 -06:00
Ryan Culpepper
eb4ec000b0 syntax/parse: use generic tree functions in analyses 2019-06-19 16:21:43 +02:00
Ryan Culpepper
4b64cdef54 syntax/parse: add multiple pattern-processing passes
- pair specialization
- and/ord normalization, and cleanup
- add pat:seq-end to list-pattern
2019-06-19 16:21:43 +02:00
Ryan Culpepper
29e46bea78 syntax/parse: add generic (dynamic) tree traversal library 2019-06-19 16:21:43 +02:00
Ryan Culpepper
e845d0861d syntax/parse: add explicit pattern checks 2019-06-19 16:21:43 +02:00
Ryan Culpepper
fa78f5ebd3 syntax/parse: add well-formed pattern predicates 2019-06-19 16:21:43 +02:00
Ryan Culpepper
769dfb9e34 syntax/parse: add hpat:single; {single,head}-pattern types disjoint 2019-06-19 16:21:43 +02:00
Ryan Culpepper
5ab82ccdd4 syntax/parse: code reorganization 2019-06-19 16:21:43 +02:00
Ryan Culpepper
1c01df60ce syntax/parse: use logging instead of conditional eprintf, show more patterns 2019-06-19 16:21:43 +02:00