Commit Graph

4030 Commits

Author SHA1 Message Date
Matthew Flatt
bdf1c3e165 bytecode compiler: generalize local-type tracking for unboxing
Track fixnum results in the same way as flonum results to enable
unboxing, if that turns out to be useful. The intent of the change,
though, is to support other types in the future, such as "extnums".

The output `raco decompile' no longer includes `#%in', `#%flonum',
etc., annotations, which are mostly obvious and difficult to
keep in sync with the implementation. A local-binding name now
reflects a known type, however.

The change includes a bug repair for he bytecode compiler that
is independent of the generalization (i.e., the new test case
triggered the old problem using flonums).
2012-11-14 19:37:01 -07:00
Matthew Flatt
5400b41bce add `unsafe-cons-pair'
Also, make `list?' more optimistic about checking is  the "is list?"
flag on a pair.
2012-11-14 19:17:42 -07:00
Matthew Flatt
9e3f9fbe3e JIT x86: streamline store of a 32-bit constant 2012-11-14 19:17:42 -07:00
Matthew Flatt
91a5347d5b JIT: push alternate target-register handling into inlined code
This change streamlines generated code slightly.

New release checklist item: double-check by building with
TEST_ALTERNATE_TARGET_REGISTER.
2012-11-14 19:17:42 -07:00
Matthew Flatt
335711bc3f tweak JIT-inlined `cons'
Handle better the case where the first argument is more
complex than the second.
2012-11-14 19:17:41 -07:00
Matthew Flatt
f1807d2ecc JIT: skip an unused load 2012-11-14 19:17:41 -07:00
Matthew Flatt
d99888d700 x86_64: more direct thread-local access in JIT
Use one instruction instead of two.
2012-11-14 19:17:41 -07:00
Matthew Flatt
483148e528 repair to `custodian-shutdown-all'
This appears to be an old bug where a check and use are misordered, so
I'm not sure why it hasn't caused more trouble before, but it depends
on a GC happening at the right time.

Closes PR 13245
2012-11-12 07:01:12 -07:00
Matthew Flatt
4c3ee9c3c9 fix for Win64 build
Repairs a problem introduced by recent JIT changes.
2012-11-12 06:08:11 -07:00
Matthew Flatt
9c4cfdecc4 fix problem with require' inside begin-for-syntax'
The dependency wasn't recorded under the right phase.
2012-11-11 09:38:15 -07:00
Matthew Flatt
54c4a1f21a x86 JIT: use LEA for fixnum tagging
This has no effect on performance that I can detect, but it
looks better.
2012-11-11 09:38:15 -07:00
Matthew Flatt
b223ad2d90 x86_64 JIT: use 32-bit jumps until forced to allocate far away
The JIT was pessimistically using 64-bit jumps for long branches
or any jump between code that is allocated at different times.
Normally, though, code allocation stays within the same 32-bit
range of the heap, so stick to 32-bit jumps until forced by
allocation addresses to use 64-bit jump targets.
2012-11-11 09:38:15 -07:00
Matthew Flatt
e217aaa507 remove accidental declaration 2012-11-11 09:38:15 -07:00
Eli Barzilay
5589bcb278 New Racket version 5.3.1.5. 2012-11-08 03:30:18 -05:00
Matthew Flatt
ab5bbb5b37 flatten simple `define-values' within a module
This flattening is useful for the definition of `assq', for example.
2012-11-07 07:46:25 -07:00
Matthew Flatt
8033900674 add ad hoc optimization of car' to unsafe-car', etc.
In `(if (pair? x) E1 E2)', convert `(car x)' in E1 to
`(unsafe-car x)', and similarly for `(cdr x)'. Also,
`(begin (car x) (cdr x))' converts to `(begin (car x)
(unsafe-cdr x))' since `(car x)' implies a `pair?' test
on `x'.
2012-11-07 07:46:25 -07:00
Eli Barzilay
1c8001d174 Some "obvious" switching from racket' to racket/base'. 2012-11-06 13:29:09 -05:00
Matthew Flatt
25f142299b fix propagation of "multiple result" flag when optimizing `begin0' 2012-11-05 16:15:48 -07:00
Matthew Flatt
bd0e6ae941 fix problems with chaperones, printing, and cycles 2012-11-05 10:48:46 -07:00
Matthew Flatt
1126f02ddd change JIT inlining of `/' to be fast on a fixnum result 2012-11-04 17:20:11 -07:00
Matthew Flatt
eaf1fd1fe5 more consistently clear the tail-call and multiple-values buffers
More consistent clearing avoids a kind of space unsafety. There's just
one buffer per thread, so it's difficult to turn non-clearing into
a detectable leak (I wasn't abel to construct an example), but it
might be possible. More practically, failing to clear the buffer
can make it difficult to debug memory use.
2012-11-04 06:09:21 -07:00
Matthew Flatt
8079ff6c4f fix problem with prompts, call/cc, and tail-buffer allocation
Merge to v5.3.1
2012-11-04 06:09:21 -07:00
Matthew Flatt
7a256fbb72 yet another repair for backtraces
Compacting of the old generation breaks backtrace info. We
could try to fixup backtrace info, but it's simpler to just
disable compaction.
2012-11-04 06:09:21 -07:00
Matthew Flatt
55170581c4 fix locking for futures on uniprocessors
The scheme_is_multiprocessor() function wasn't the right guard
for whether to use a locking compare-and-swap instruction; any
use of pthread-based futures needs the compare-and-swap.

Merge to v5.3.1
2012-11-02 13:10:49 -06:00
Matthew Flatt
1f0508d77e fix initialization of local 2012-11-02 13:01:37 -06:00
Matthew Flatt
3fd5b5eb6e backtrace fix 2012-11-02 13:01:32 -06:00
Matthew Flatt
a635fe817b remove unused local variable 2012-11-02 11:44:43 -06:00
Matthew Flatt
3d68fc2505 fix allocation of bytecode-validation stack overflow 2012-11-02 10:34:17 -06:00
Matthew Flatt
466d6e7394 fixes for PPC JIT
Related to recent structure-operation changes.
2012-11-02 09:56:07 -06:00
Asumu Takikawa
948e898406 Fix continuation mark chaperones
Failed to redirect correctly on `continuation-mark-set-first`
when the mark set argument was #f.
2012-11-02 11:26:40 -04:00
Matthew Flatt
3ca7300a0d improvements to GC backtrace info 2012-11-02 07:45:57 -06:00
Matthew Flatt
b520523950 change GC to specialize pairs a little more
This change doesn't speed up anything, so far. GC performance
of pairs (or anything) is determined almost completely by
its size in bytes, and this change doesn't affect the size of
pairs. At the same time, the change mostly replaces the obsolete
"xtagged" support, and I might have a better idea that builds on
this change, so I'm keeping it for now.
2012-11-02 07:45:57 -06:00
Matthew Flatt
f832c961a8 change `Scheme_Symbol' declaration to avoid compiler warnings 2012-11-01 09:09:36 -06:00
Matthew Flatt
0e4305fc45 fix problem with places and `struct-type-info'
Merge to v5.3.1
2012-11-01 07:19:53 -06:00
Matthew Flatt
8f73ebbc36 fix error-message code
Closes PR 13222
2012-10-31 12:17:49 -06:00
Matthew Flatt
08c659c5d5 fix a bug in `free-identifier=?'
The bug is related to macro-introduced `require' and rename on
export.
2012-10-31 08:03:47 -06:00
Eli Barzilay
f852b9eb92 New Racket version 5.3.1.4. 2012-10-31 03:30:17 -04:00
Matthew Flatt
195cbe832c fix problem with compiler's cross-module shape tracking 2012-10-30 17:47:15 -06:00
Matthew Flatt
8fab527ce3 fix problems with `would-be-future' 2012-10-30 17:28:37 -06:00
Matthew Flatt
8aee78a4bb fix thread-swap callbacks 2012-10-30 17:24:04 -06:00
Matthew Flatt
d7bf677645 track import "shapes" as procedure or structure type
Shape information allows the linker to check the importing
module's compile-time expectation against the run-time
value of its imports. The JIT, in turn, can rely on that
checking to better inline structure-type predicates, etc.,
and to more directy call JIT-generated code across
module boundaries.

In addition to checking the "shape" of an import, the import's
JITted vs. non-JITted state must be consistent. To prevent shifts
in JIT state, the `eval-jit-enabled' parameter is now restricted
in its effect to top-level bindings.
2012-10-30 13:29:28 -06:00
Matthew Flatt
cfb256fe16 cocoa: update PSMTabBarControl for x86_64
The update avoids a now-deprecated method.
2012-10-28 12:04:37 -06:00
Eli Barzilay
cdf7cad8ac New Racket version 5.3.1.3. 2012-10-28 03:35:15 -04:00
Matthew Flatt
fadf8a8860 avoid compiler warnings 2012-10-27 21:34:08 -06:00
Matthew Flatt
847360aa60 avoid compiler warning 2012-10-27 09:24:02 -06:00
Matthew Flatt
5f30cc87ea track information about `struct' bindings during compilation
This tracking allows the compiler to treat structure sub-type
declarations as generating constant results, and it also allows
the compiler to recognize an applications of a constructor or
predicate as functional.
2012-10-27 07:58:56 -06:00
Matthew Flatt
e698be778b remove a level of indirection in struct selectors/mutators 2012-10-27 06:53:21 -06:00
Matthew Flatt
736e6efc2d recognize `struct' bindings as constant
The JIT takes advantage of known-constant bindings to avoid the
check that a variable is still bound to a structure predicate,
selector, or mutator; that makes the code short enough to really
inline. The inlined version takes about half the time of the
indirect version.

The compiler does not yet track bindings precisely enough to
recognize constants for sub-type declarations.
2012-10-27 06:53:21 -06:00
Matthew Flatt
1bf5fda869 fix `chaperone-prompt-tag' 2012-10-24 13:18:53 -07:00
Matthew Flatt
a2c4f6064d fix GC alignment bug
Merge to v5.3.1
2012-10-24 05:47:46 -07:00
Matthew Flatt
1b589c1529 fix a JIT problem with inline stuct allocation 2012-10-23 11:39:23 -07:00
Matthew Flatt
9708a01a0a ffi/unsafe: defend against some finalization bugs
Turn use of a finalized ffi callout into a reported error,
instead of a crash. Clarify the existence of the finalizer
in the docs. Fix error logging of the finalizer thread.

Merge to v5.3.1
2012-10-21 08:11:45 -06:00
Matthew Flatt
70fee17ef9 fix mismanagement of temporary print buffer
Closes PR 13199

Merge to v5.3.1
2012-10-20 09:37:16 -06:00
Matthew Flatt
3407b2e73f more clean-up for even?'/odd?' change
Along the same lines as 44078a1f01.
2012-10-20 09:36:23 -06:00
Eli Barzilay
ad4af39146 New Racket version 5.3.1.2. 2012-10-20 03:30:16 -04:00
James Swaine
44078a1f01 Eliminate code duplication for futures/non-futures mode 2012-10-20 01:36:14 -05:00
James Swaine
9a0f19da59 Fix futures-disabled build errors introduced by changes to even? and odd? 2012-10-19 13:49:05 -05:00
Matthew Flatt
e59066debe bytecode validator: check "constant" annotations on variable references
Bytecode changes in two small ways to help the validator:
 * a cross-module variable reference preserves the compiler's
   annotation on whether the reference is constant, fixed, or other
 * lifted procedures now appear in the module body just before the
   definitions that use them, instead of at the beginning of the
   module body
2012-10-19 11:27:52 -06:00
James Swaine
05e0836b88 Make odd? and even? future-safe 2012-10-18 21:22:11 -05:00
Matthew Flatt
b912d0f059 fix check for constructor of struct setter of immutable field
Merge to v5.3.1
2012-10-18 11:02:06 -06:00
Matthew Flatt
1052852fd4 avoid compiler warning 2012-10-17 20:54:21 -06:00
Matthew Flatt
04e8689a9b add another argument to `{chaperone,impersonate}-prompt-tag'
The new argument gets to chaperone/impersonate a guard at
the prompt, and it is applied when the continuation is applied ---
based on a wrapper on th prompt tag of the continuation (as opposed to
the prompt tag of the prompt).
2012-10-17 10:24:09 -06:00
Samuel Bronson
a86f1751bc Add "install-html" and "install-pdf" targets to Makefile. 2012-10-17 08:47:01 -04:00
Matthew Flatt
843c722146 add an argument to `{chaperone,impersonate}-prompt-tag'
The new argument gets to filter results that come from a
non-composable continuation that replaces one delimited
by a prompt using the chaperoned/impersonated prompt tag.
2012-10-16 15:11:50 -04:00
Matthew Flatt
755cd47cc5 make chaperone-of?' accept prop:equal+hash'
There appears to be no reason to block equality based on
`prop:equal+hash' when using `chaperone-of?'.
2012-10-16 12:17:42 -04:00
Matthew Flatt
9dd83008a6 minor GCs: reduce constant factor on total memory use
I think we're not far from getting the constant down to 0, but
there are still some traversals of the complete page list.
2012-10-15 20:36:19 -04:00
Matthew Flatt
bdff5e8379 avoid compiler warning 2012-10-15 08:24:21 -04:00
Matthew Flatt
2c56ace436 JIT-inline structure allocation
For simple structure types (no guards, no auto fields, no
procedure property). Inlined allocation makes structure
allocation a little faster; more significantly, it
make structure allocation future-safe.
2012-10-15 06:05:33 -04:00
Matthew Flatt
79ada3b16e fix JIT bug in struct pred/get/set corner case
When thie JIT guesses that an identifier is bound to a
structure predicate, getter, setter, etc., but that guess
turns out to be wrong, and the call is in a tail position,
then preserve tail-call behavior.

(Changes include some setup to inline structure constructors.)
2012-10-15 06:05:33 -04:00
Matthew Flatt
15812a94d8 make `make-fsemaphore' atomic (i.e., not blocking) 2012-10-14 11:10:23 -04:00
Matthew Flatt
33db9589a4 make `list-ref' future-safe even for large fixnum indices 2012-10-14 11:10:23 -04:00
Ryan Culpepper
f2e87ed72f fix expander bug introduced by my last commit 2012-10-11 19:16:41 -04:00
Ryan Culpepper
678fc4d6f8 make macro stepper recover from jumps within expansion 2012-10-11 17:44:51 -04:00
Eli Barzilay
e713ccd885 New Racket version 5.3.1.1. 2012-10-08 03:40:14 -04:00
Ryan Culpepper
42d2e60a2f Post-release version for the v5.3.1 release 2012-10-08 02:33:53 -04:00
Matthew Flatt
6edcc4b20f fix error message
Closes PR 13166
2012-10-05 19:43:23 -06:00
Matthew Flatt
909a6fb5c7 Mac OS X: make --disable-libffi the default
Avoids a common problem with libffi installed by MacPorts
causing problems with a mismatch between an iconv installed
by MacPorts and the system iconv. (When libffi is installed,
then -I/opt/include for the libffi heads also picks up the
iconv headers, but the ordering of the lib flags doesn't
pick up libiconv from /opt/lib. We could try to hack around
this by ordering the flags just right, but it seems better
to avoid the issue.)
2012-09-23 09:42:25 -05:00
Matthew Flatt
82bec92418 error message fix 2012-09-20 16:46:07 -06:00
Matthew Flatt
f82a19c963 fix protected/unexported access check 2012-09-19 07:43:56 -06:00
Matthew Flatt
58b054c6a2 patches for Dragonfly
Closes PR 13115
2012-09-15 09:20:27 -06:00
Matthew Flatt
ab251eaca6 win64: defensive check for stack-trace collection 2012-09-13 11:05:52 -06:00
Matthew Flatt
7a772ce09d fix Win64 build for newer SDK 2012-09-13 11:05:52 -06:00
Matthew Flatt
7ce7da8f53 fix for `reroot-path' on Windows 2012-09-12 11:31:58 -06:00
Matthew Flatt
cf120bc4a6 win64: stack-trace repair: add cached tail to trace 2012-09-12 11:30:48 -06:00
Matthew Flatt
90dad98220 fix error message 2012-09-12 11:17:25 -06:00
Matthew Flatt
98cf0429f8 win64: make JIT stack traces work
JIT-generated doesn't actually conform to the constraints
of the Win64 stack-unwind protocol. In pariticular,
JITted code might move the stack pointer after a "preamble"
that saves non-volatiles, and the frame pointer isn't in
the right place. So, we can't implement the generic unwind
hook --- but the JIT's stack traversal can interleave its own
unwinding with the OS-supplied unwinding interface.
2012-09-12 11:13:38 -06:00
Eli Barzilay
a5fd17b16f New Racket version 5.3.0.24. 2012-09-12 03:30:11 -04:00
Matthew Flatt
f1671f2044 fix default logging levels for stderr and syslog 2012-09-11 13:18:18 -06:00
Matthew Flatt
4f351dd6b1 add `current-compiled-file-roots', PLTCOMPILEDROOTS, and -R/--compiled
The new parameter (and supporting environment variables and
command-line flags) can bytecode lookup to a tree other than
where a source file resides, so that sources and generated
compiled files can be kept separate. It also supports storing
bytecode files in a version-specific location (either with
the source or elsewhere).
2012-09-11 13:18:18 -06:00
Eli Barzilay
e208fe645f New Racket version 5.3.0.23. 2012-09-08 15:50:30 -04:00
Matthew Flatt
4d8ee32fd7 fix Windows build
Thanks to Ben Goetter
2012-09-07 16:11:34 -06:00
Matthew Flatt
834f4a5bf3 adjust initial abort handler
Clients of scheme_apply(), scheme_eval(), etc. (i.e., the variants
without a leading "_") except aborts to continue jumping out, while
a recent change to make them behavior more like a default prompt
handler caused them to return on errors. Changethe handler to behave
like the default, except that after running a result thunk, the
handler effectively aborts again.
2012-09-07 13:49:17 -06:00
Matthew Flatt
ff5ce02744 fix bug in places `subprocess' support 2012-09-07 10:41:29 -06:00
Matthew Flatt
9f8e1d792e QNX: use vfork() instead of fork()
Patch by Tobias Hammer

Closes PR 13101
2012-09-07 09:12:45 -06:00
Matthew Flatt
d92b9cb404 add `define-logger' and filtering based on logger name
The `make-log-receiver' function now includes a logger-name
filter. This filter is implemented as a low enough level that
it affects `log-level?' tests to check whether a log message
needs to be constructed at all.

The -W and -L flags and PLTSTDERR and PLTSYSLOG environment variables
support filters of the form "<level> <level>@<name> ...", where
<level>@<name> specializes filtering of events for a logger whose
name matches <name> to show <level> and higher.
2012-09-07 08:16:38 -06:00
Matthew Flatt
2f7d4b5eaf change a thread's initial prompt to use the default handler
The thread's initial prompt previously ignored its arguments.
2012-09-05 12:21:43 -06:00
Matthew Flatt
8bd5dbf7cc ffi/unsafe: change `cast' to avoid pitfalls for you
The old `cast' didn't work right for a mismatch between
a pointer GCableness and the source or target types, and
it didn't work right for an GCable pointer with a non-zero
offset. While those pitfalls were documented, the first
of them definitely has been a source of bugs in code that
I wrote.

Also added `cpointer-gcable?'
2012-09-04 15:28:18 -06:00
Matthew Flatt
99de1b3efa fix problems with `raise-range-error'
Problems include bad index reporting for vectors, bad treatment of
empty strings and byte strings, and misformatting of given name.
2012-09-02 15:57:01 -06:00
Asumu Takikawa
cd23fd48cf Comment and clarify top-level evaluation & barriers 2012-08-31 16:27:35 -04:00
Matthew Flatt
d11e58b639 ffi/unsafe/atomic: add `in-atomic-mode?'
The new function can be useful for debugging, at least.
2012-08-31 07:33:08 -06:00