Commit Graph

1830 Commits

Author SHA1 Message Date
Robby Findler
a1e6c94fda lift a few fewer negative parties 2015-08-25 05:09:28 -05:00
Matthew Flatt
3d452fdba6 raco exe: make Windows exes as proper PE32 images
Instead of simply tacking bytecode onto the end of an executable,
generate a proper PE32 image.
2015-08-24 17:12:11 -06:00
Matthew Flatt
d16c5c08b6 Windows: update default icons
Includes a 256x256 icon.
2015-08-24 17:12:11 -06:00
Matthew Flatt
96292cdf27 raco exe --ico: replace icon set wholesale
Use exactly the icons in the given icon file for the executable,
instead of coercing to the sizes and depths already in the executable.
2015-08-24 15:08:21 -06:00
Matthew Flatt
e2b27be099 file/ico: support PNG icons and arbitrary icon-set replacement
Support PNG-encoded icons in ".ico" files and executables.

For executables, instead of supporting only new icons that match the
sizes and encodings of existing icons in an executable, support
arbitrary replacement icons in an executable.

The improved funcitonality relies on a new library (currently
private) for general updates to a Windows executable's
resources.
2015-08-24 15:08:21 -06:00
Matthew Flatt
b9a5e92c37 file-truncate: flush on Windows before truncating
Otherwise, writes to the output port can get lost.
2015-08-24 15:08:21 -06:00
Matthew Flatt
cbb4ffee4d JIT: replace a multiplcation with a shift
In the implementation of `with-continuation-mark`.
2015-08-24 12:20:31 -06:00
Matthew Flatt
620ccbfa03 JIT: streamline values result delivered to let-values
In a case like

  (let-values ([(X ...) (with-continuation-mark M_k M_v
                          (values M ...))])
     ....)

where the bytecode compiler cannot convert to a sequence of `let`
bindings, make the JIT implement `values` as delivering argument
results directly to the corresponding variable locations.
2015-08-24 12:20:30 -06:00
Robby Findler
b7f500fc26 create the blame+neg-party pair only once, not once for the domain
and once for the range
2015-08-23 23:18:14 -05:00
Matthew Flatt
49c4d9272f change let/cc and let/ec macros back to call/cc and call/ec
When `call/cc` and `call/ec` were moved out of `#%kernel`, the
`let/cc` and `let/ec` macros changed to refer to
`call-with-current-continuation` and `call-with-escape-continuation`.
Move `call/cc` and `call/ec` again and restore the macros, so that
matching on the expansion of the macros (e.g,. in the web server's
language that looks for `call/cc`) work as before.
2015-08-23 10:58:04 -06:00
Robby Findler
0c31a0c0b8 add some missing contract profiler wcm expressions and start a test suite for them 2015-08-22 20:22:00 -05:00
Ryan Culpepper
70ab4cfb12 fix date*->seconds handling of nanoseconds field 2015-08-22 19:33:57 -04:00
Matthew Flatt
a135c78baf add module-suffixes and doc-module-suffixes to "info.rkt"
A `module-suffixes` entry in a collection's "info.rkt" adds a
file suffix that is meant to be recognized globally (i.e., in
all collections) by all Racket tools.

The new fields are reported by `compiler/module-suffix` library, which
is (so far) used by `raco setup`.

Note that if package A includes files with a suffix that is registered
by package B, then A should have a dependency on B, but `raco setup`
cannot currently detect that such a dependency is needed. That
dependency is likely to happen, anyway, since package A is likely
using libraries form package B.
2015-08-22 09:36:19 -06:00
Matthew Flatt
f63220682b add support for compile-include-files as an "info.rkt" field
The `compile-include-files` entry lists additional files to be
compiled (when their extensions do not trigger compilation).
2015-08-22 07:41:49 -06:00
Matthew Flatt
787500f339 reduce timestamp adjustments in raco pkg create
Comments in the implementation suggest that a timestamp
specialization was intended for directories, which makes
sense given that directory-modification dates are
not preserved when unpacking an archive. The change
also affected all bytecode timestamps, however, which
can create inconsistencies across package creations.
2015-08-21 18:55:12 -06:00
Robby Findler
725536b8b4 add missing contract checking 2015-08-20 15:41:29 -05:00
Vincent St-Amour
ac462be47c Fix uses of unstable/struct. 2015-08-19 15:07:26 -05:00
Vincent St-Amour
ed70381d70 Move rest of unstable/struct to unstable-lib. 2015-08-19 15:07:25 -05:00
Vincent St-Amour
5ce75816c5 Move struct->list to racket/struct. 2015-08-19 15:07:25 -05:00
Vincent St-Amour
5c9995ee9a Move unstable/custom-write to unstable-lib. 2015-08-19 15:07:25 -05:00
Blake Johnson
674ab66d7b Added support for ref args in lifts to unresolver 2015-08-18 14:40:41 -06:00
Matthew Flatt
7371ab0cc2 remove accidentally added file 2015-08-18 14:40:41 -06:00
Vincent St-Amour
1079b2b790 Move unstable/socket to its own package. 2015-08-18 14:03:03 -05:00
Matthew Flatt
629697d14a remove accidentally added file 2015-08-17 12:36:51 -06:00
Matthew Flatt
1b493f2146 fix MzCOM's atexit replacement 2015-08-17 10:16:02 -06:00
Matthew Flatt
641c56b6e9 repair leak in managing OS-level locks 2015-08-17 09:51:20 -06:00
Matthew Flatt
693cdc673d GC: use ofm_malloc() and ofm_free() for admin allocation
Using ofm_....() makes it easier to check that memory allocated for GC
administrtation is itself reclaimed.
2015-08-17 09:39:11 -06:00
Matthew Flatt
fea2b1ce5e repairs for MinGW build
Fix compiler warnings and installation bugs related to the
".exe" extension.
2015-08-17 08:32:12 -06:00
Geoff Hill
be66fde64c write-xexpr: consistently use parameter port. 2015-08-15 00:41:46 -07:00
Gustavo Massaccesi
1753335d34 Fix string-replace when the string is mutable
The `from` string argument is converted to a regexp and cached. When `from` is
a mutable string this can cause wrong results in the following calls
to string-replace. So the string is first converted to an immutable string to
be used as the key for the cache.
2015-08-14 21:17:48 -03:00
Matthew Flatt
80aac79507 change place to create a submodule
When `place` expands, the body of the `place` form is placed into a
`(module* place-body-<n> #f ....)` submodule.

The `place` form previously placed its body in a lifted function,
where the function's exported name was based on
`(current-inexact-milliseconds)`. The generated submodules have
deterministic names, so that compilation is deterministic, and
submodule names don't collide (unlike exported function names) when
multiple `place`-using module are imported into some other module.
Also, using a submodule avoids the problem that the clock doesn't
change fast enough on Windows.
2015-08-14 17:55:47 -06:00
Matthew Flatt
0caf079637 add syntax-local-lift-module 2015-08-14 16:52:56 -06:00
Matthew Flatt
dbd5470805 move call/cc and call/ec to racket/private/more-scheme
Those aliases were moved out of `#%kernel` as part of the
determinstic-bytecode changes, but putting them in
`racket/private/pre-base` meant that they weren't included in
`mzscheme` or Pretty Big. The new location is with `let/cc`, which
makes more sense, and makes them picked up by `mzscheme` and Pretty
Big.
2015-08-14 07:45:47 -06:00
Matthew Flatt
111a7e085d fix prefab checking in printer
Mishandling of a chaproned prefab when, for example, determining
whether to use quoted printing caused the `tests/compiler/zo` test to
sometimes fail.
2015-08-14 07:28:37 -06:00
Matthew Flatt
e82e61e84c restore needed call in unresolver
Add back a call incorrectly removed in bd82646d81.
2015-08-13 18:22:51 -06:00
Matthew Flatt
cfa1d39166 add compiler/exe-dylib-path
Provide a clean interface to a private library for updating
dynamic-library paths in Mac executables.
2015-08-13 17:06:55 -06:00
Gustavo Massaccesi
07816f2ca4 Use scheme_getenv in eval.c 2015-08-13 19:05:40 -03:00
Matthew Flatt
15eadbb868 copy-directory/files: add #:preserve-links? argument 2015-08-13 15:13:46 -06:00
Blake Johnson
12315ec964 using correct inspector for unresolved module 2015-08-13 15:13:46 -06:00
Juan Francisco Cantero Hurtado
f3098a946a Fix an error in racket-test-core/number.rktl on OpenBSD-current/sparc64
"Errors were:
(Section (got expected (call)))
((numbers) (0.0 -0.0 (#<procedure:round> -0.0)))
((numbers) (125.0+0.0i 125.0-0.0i (#<procedure:z-round> 125.00000000000023-0.0i)))
((numbers) (100.0+0.0i 100.0-0.0i (#<procedure:z-round> 99.99999999999999-0.0i)))"
2015-08-13 15:13:46 -06:00
Matthew Flatt
33cf716835 include phantom bytes consistently in memory-use reports 2015-08-13 15:13:46 -06:00
Alex Knauth
3c5ed5d8e1 syntax-parse: keep more srclocs in attribute bindings
to cooperate more with DrRacket check-syntax arrows
2015-08-13 15:35:35 -05:00
Vincent St-Amour
033d5afb19 Revert adding in-pairs to racket/sequence.
`in-dict` is more general, and `for` loops optimize it already.
2015-08-13 14:43:57 -05:00
Vincent St-Amour
9508c251ee Move rest of unstable/sequence to unstable-lib. 2015-08-13 14:43:56 -05:00
Vincent St-Amour
36bb0e568c Merge part of unstable/syntax with racket/syntax. 2015-08-13 14:43:56 -05:00
Vincent St-Amour
1a7b71fb20 Improve the implementation of in-slice. 2015-08-13 14:43:56 -05:00
Matthew Flatt
bd82646d81 avoid compiler warnings 2015-08-13 11:57:06 -06:00
Matthew Flatt
7741b4b361 local-expand: fix argument checking
Also, fix contract in the docs, since the first argument is allowed to
be an S-expression.
2015-08-13 11:48:20 -06:00
Matthew Flatt
86ee9c5071 signature-members: adjust element ids based on reference
Make the resulting content ids compatible with binding and reference
at a use site, as needed for the new macro expander.
2015-08-13 10:44:26 -06:00
Ryan Culpepper
aee93fb200 added racket/struct with make-constructor-style-printer 2015-08-12 18:42:29 -04:00
Ryan Culpepper
0f6e2f8029 change sets to use make-constructor-style-printer 2015-08-12 18:42:29 -04:00
Ryan Culpepper
59300afbef add racket/private/custom-write 2015-08-12 18:42:29 -04:00
Matthew Flatt
02574d2501 SGC: use PRIdPTR and PRIxPTR
Avoid compiler warnings by using the right format string.
2015-08-12 14:48:11 -06:00
Tim Brown
3f53d214c6 url-exception? exported wrongly 2015-08-12 11:20:10 -05:00
Tim Brown
9473f394b7 url-strings: Separate URL parsing from URL actions
`net/url` provides functions for both converting strings
and paths to and from URLs.

`net/url` also includes functions for creating (pure and import)
network ports. This functionality `require` the HTTP client stack
which is unnecessary when URLs simple need parsing for their
"bits".

New library: `net/url-strings` handles `url->string` and `string->url`
(and also the related `path->url` and `url->path` functions). This is
required by net/url for compatability.

`net/url-exception.rkt` is factored out for use by both libraries.

- See also racket/net changes for T&D

url-string.rkt changes requested by mflatt

url-strings.rkt is now called url-string.rkt

identifiers from url-string.rkt are reprovided by url.rkt
using (all-from-out "url-string.rkt") instead of explicit
exports
2015-08-12 11:20:10 -05:00
Ryan Culpepper
3e2b916f5b annotated common version list for openssl libs 2015-08-11 18:43:35 -04:00
Ryan Culpepper
49dc0625d4 more detail in openssl error 2015-08-11 18:43:34 -04:00
Matthew Flatt
956d538164 fix missing zero of allocated atomic memory in unresolver 2015-08-11 16:01:54 -06:00
Blake Johnson
d39801c937 ref_args off by one 2015-08-11 16:01:54 -06:00
Matthew Flatt
13bd013528 fix JIT-inlined set-cpointer-tag! for non-x86 2015-08-11 16:01:53 -06:00
Matthew Flatt
820ab7126c fix enum mismatch in ARM JIT
Also, recognize `__ARM_ARCH_6ZK__`.
2015-08-11 16:01:53 -06:00
Daniel Feltey
b16f0b24b7 Improvements to unit/c contracts in preparation for unit support in typed/racket
Changes:

 - Allow unit contracts to import and export the same signature.
 - Add "invoke" contracts that will wrap the result of invoking a unit contract,
   no wrapping occurs when a body contract is not specified
 - Improve error messages
 - Support for init-depend clauses in unit contracts.
 - Fix documentation to refelct the above
 - Overhaul of unit related tests

Handling init-depend clauses in unit contracts is a rather large and somewhat
non-backwards-compatible change to unit contracts. Unit contracts must now
specify at least as many initialization dependencies as the unit value being
contracted, but may include more. These new dependencies are now actually
specified in the unit wrapper so that they will be checked by compound-unit
expressions.

This commit also adds more information to the first-order-check
error messages. If a unit imports tagged signatures, previously the errror
message did not specify which tag was missing from the unit contract. Now
the tag is printed along with the signature name.

Documentation has been edited to reflect the changes to unit/c contracts
made by this commit.

Additionally this commit overhauls all tests for units and unit contracts.
Test cases now actually check that expected error messages are triggered when
checking contract, syntax, and runtime errors. Test forms now expand into uses
of rackunit's check-exn form so only test failures are reported and all tests in
a file are run on every run of the test file.
2015-08-11 16:30:39 -05:00
Matthew Flatt
1757348b23 repairs for MSVC
Don't use `for (int i ....`, which is too modern.
2015-08-10 17:14:09 -06:00
Blake Johnson
fbe8537f18 add compiled-expression-recompile
Uses an unresolver pass, which is expanded to work on more programs.
2015-08-10 16:39:43 -06:00
Matthew Flatt
2661d46929 toward deterministic bytecode generation
Progress toward making the bytecode compiler deterministic, so that a
fresh `make base` always produces exactly the same bytecode from the
same sources. Most changes involve avoiding hash-table order
dependencies and adjusting scope identity. The namespace used to load
a reader extension is also better defined. Plus many other little
changes.

The identity of a scope that is unmarshaled from a bytecode file now
incorporates the hash of the file, and the relative order of scopes is
preserved in a bytecode file. This combination allows compilation to
start with modules that loaded and compiled in different orders
(including delayed loading of bytecode fragments within one file).

Formerly, a reader extension triggered by `#lang` or `#reader` was
loaded in whatever namespace happens to be current. That's
unpredictable and can pollute a module build at the level of bytecode.
To help make builds deterministic, reader extensions are now loaded in
a root namespace of the current namespace.

Deterministic compilation in general relies on deterministic macros.
The two most common ways for a macro to be non-deterministic are by
using `gensym` (use `generate-temporaries`, instead) and by using an
unsorted hash-table traversal (don't do that).

At this point, bytecode generation is unlikely to be completely
deterministic, since I uncovered non-determinism mostly by iterating
attempts over the base collections. For now, the intent is not to
provide guarantees outside of the compilation of the base collections
--- but "more deterministic" is likely to be useful in the short run,
and we can improve further in the long run.
2015-08-07 15:48:39 -06:00
Matthew Flatt
a55eed9718 fix data/integer-set for 32-bit platforms 2015-08-07 05:30:26 -06:00
Matthew Flatt
0efd052218 fix single-float hashing 2015-08-07 05:30:25 -06:00
Matthew Flatt
6bcb449b55 fix impersonator-property:application-mark propagation
Propagate the mark value only if it's on the current continuation
frame, as originally intended. Adjust the docs to clarify.
2015-08-07 05:30:25 -06:00
Matthew Flatt
0480f55f67 add with-immediate-continuation-mark bytecode form
Specialize a
  (call-with-immediate-continuation-mark _key (lambda (_arg) _body) _def-val)
call to an internal
  (with-immediate-continuation-mark [_arg (#%immediate _key _def_val)] _body)
form, which avoids a closure allocation and more.

This optimization is useful for contracts, which use
`call-with-immediate-continuation-mark` to avoid redundant
contract checks.
2015-08-07 05:30:25 -06:00
Matthew Flatt
c308915047 minor streamlining of foreign-call path
JIT-inline `cpointer-tag` and `set-cpointer-tag!`, plus minor
shortcuts and GC hints in Racket->C conversion.
2015-08-06 14:44:30 -06:00
Matthew Flatt
d34416ea02 define-inline: fix call with multiple keyword arguments 2015-08-06 14:44:30 -06:00
Vincent St-Amour
7b70a42361 Move unstable/syntax to unstable-lib. 2015-08-05 13:11:55 -05:00
Vincent St-Amour
5ee37920f5 Move phase-of-enclosing-module to a private syntax/parse module. 2015-08-05 13:11:55 -05:00
Vincent St-Amour
d836a427cc Remove unused dependency on unstable/syntax.
This revealed a missing dependency to racket/syntax elsewhere.
2015-08-05 13:11:55 -05:00
Vincent St-Amour
2c21d61870 Move syntax-source-* to syntax/location. 2015-08-05 13:11:55 -05:00
Vincent St-Amour
7e93b7d426 Move make-variable-like-transformer to syntax/transformer. 2015-08-05 13:11:54 -05:00
Vincent St-Amour
21c44635f6 Move unstable/macro-testing to syntax/macro-testing. 2015-08-05 13:11:54 -05:00
Vincent St-Amour
102fbff5d2 Rename unstable/wrapc to syntax/contract. 2015-08-05 13:11:54 -05:00
Daniel Feltey
265b777b93 Fix unit contracts for new expander 2015-08-03 16:08:18 -06:00
Matthew Flatt
bf76ced8ba work around EPERM error from access()
On OS X, it seems that access() can sometimes fail with EPERM
when checking for execute permission on a file without it.
I've previously seen this result when running as the superuser,
but that's apparently not the only possibility; a long path
may also be relevant.
2015-08-01 21:59:19 -06:00
Matthew Flatt
086d02003a fix linking of compiled reference to a top-level variable
Re-linking in a new namespace doesn't need the namespace of
compilation.

A "namespac.rktl" test exposed this problem, where the "transfer a
definition of a macro-introduced variable" test could fail if a GC
occurred between compilation in one namespace and evaluation in
another.
2015-07-31 11:17:25 -06:00
Matthew Flatt
1f2e0dacb3 minor adjustments
SGC header correction plus extra assert.
2015-07-31 07:32:34 -06:00
Gustavo Massaccesi
a1f04604df JIT: Inline keyword? 2015-07-30 21:27:26 -03:00
Matthew Flatt
51747e86c5 fix raco pkg conflict checking
When a module is currently installed as bytecode, but without
corresponding source and without a "info.rkt" specification that
bytecode should be preserved without source, then `raco pkg` should
not count that module bytecode as a conflict (since `raco setup`
will remove it).
2015-07-30 14:12:05 -06:00
Matthew Flatt
3dc1dc80e3 add setup/collection-search 2015-07-30 14:12:04 -06:00
Matthew Flatt
9a7d046062 raco setup: clean collections before compiling any
In case a collection "a" is composed from two places, and in
case the first place has a bytecode file for "x.rkt" while
only the second place has the source of "x.rkt" (probably it
was recently moved), then `raco setup` should delete the
sourceless bytecode so that any dependency on "x.rkt" will
reference the right version.
2015-07-30 14:12:04 -06:00
Jay McCarthy
2602ff530d Adding no major collection guarantee to collect-garbage minor collections 2015-07-30 11:42:13 -06:00
Jay McCarthy
2f22f86c0a Adding minor collections to collect-garbage 2015-07-30 11:42:13 -06:00
Matthew Flatt
26158a51d2 raise-syntax-error: fix srcloc reporting on #f as 3rd arg 2015-07-29 11:54:18 -06:00
Matthew Flatt
99f29ce8ee repair for nexted splicing forms that define the same name
Nested splicing forms would lead to an "ambigious binding" error
when the nested forms bind the same name, such as in

 (splicing-let ([a 1])
   (splicing-let ([a 2])
     (define x a)))

The problem is that splicing is implemented by adding a scope to
everything in the form's body, but removing it back off the
identifiers of a definition (so the `x` above ends up with no new
scopes). Meanwhile, a splicing form expands to a set of definitions,
where the locally bound identifier keeps the extra scope (unlike
definitions from the body). A local identifier for a nested splicing
form would then keep the inner scope but lose the outer scope, while
a local identifier from the outer splicing form would keep the outer
scope but no have the inner one --- leading to ambiguity.

The solution in this commit is to annotate a local identifier for a
splicing form with a property that says "intended to be local", so the
nested definition will keep the scope for the outer splicing form as
well as the inner one. It's not clear that this is the right approach,
but it's the best idea I have for now.
2015-07-29 06:11:13 -06:00
Alex Knauth
3a3d17dbb5 Fix check-syntax arrows within units 2015-07-28 15:45:01 -06:00
Vincent St-Amour
496cd97351 Rename open-place to place/context. 2015-07-28 16:14:29 -05:00
Matthew Flatt
e3ed57633e syntax/module-reader: add a #:module-wrapper option
A `#:module-wrapper` option is useful for adding a scope to an
entire `module` form.
2015-07-28 14:55:02 -06:00
Matthew Flatt
7864436594 fix top-level scope introduction
Although `eval-syntax` is not supposed to add the current namespace's
"outer edge" scope, it must add the "inner edge" scope to be consistent
with adding the inner edge to every intermediate expansion (as in
other definition contexts).

In addition, `eval`, `eval-syntax`, `expand`, and `expand-syntax`
did not cooperate properly with `local-expand` on the inner edge.
2015-07-28 13:14:00 -06:00
Vincent St-Amour
5d9c0cf1c7 Move markparam to its own package/repo. 2015-07-28 13:05:54 -05:00
Rui Paulo
84996ff2ac sconfig: FreeBSD uses clang. 2015-07-25 20:57:59 -06:00
Rui Paulo
6dd1aa0cd8 sconfig: add FreeBSD/arm. 2015-07-25 20:57:40 -06:00
Matthew Flatt
98bd78e7f0 remove unused counter 2015-07-25 20:56:09 -06:00
Matthew Flatt
5e2b6c2b74 JIT: repair some runstack-pointer syncs
Some failure paths were missing an update before calling failure
code, and the new failure paths need to unconditionally update the
runstack pointer (because the common stub doesn't know whether the
calling context needs an update).
2015-07-25 20:49:58 -06:00
Gustavo Massaccesi
8430daa628 Jitinline string-length and bytes-length
Previously only the unsafe versions were inlined in the jit compiler.
2015-07-25 20:31:44 -03:00
Matthew Flatt
20728278bf raco setup: fix bootstrap phase to recognize indirect dependencies
Recent changes introduced an indirect dependency in the core of
`raco setup` --- possibly the recent addition to `racket/place`.
2015-07-25 16:24:43 -06:00
Matthew Flatt
9593b4c806 make-syntax-introducer: add optional argument to change kind of scope
Genereating a use-site scope, instead of a macro-introduction scope,
prevents the scope's presense from triggering a #f result from
`syntax-original?`.
2015-07-25 14:37:54 -06:00
Vincent St-Amour
0f2d02cdd2 Move part of unstable/logging to racket/logging.
... and improve and extend its interface at the same time.
2015-07-23 12:22:51 -05:00
Vincent St-Amour
4ee1864941 Merge unstable/place with racket/place. 2015-07-23 12:22:50 -05:00
Vincent St-Amour
91c422bb66 Merge unstable/future with racket/future. 2015-07-23 11:43:37 -05:00
Matthew Flatt
1d380864e9 remove accidentally committed debugging change 2015-07-23 09:09:03 -06:00
Matthew Flatt
f4d05aaba8 fix bytecode-marshaling problem related to rename transformers 2015-07-23 08:04:34 -06:00
Matthew Flatt
120f1329c6 change bytecode marshaling of scopes
This change mostly reverts 1465ff25fc, which turned out to be a hassle
because it created more cyclic structure.

A simpler strategy is to allow a phase-specific scope to be detached
(perhaps temporarily, due to on-demand loading of bytecode) from its
group; when that's possible, the scope is not reachable from a place
where it can be moved to other syntax objects, so it's ok to be
detached. Debugging output needs to handle that gracefully, though.
Also, in case of broken bytecode, fix up a detached scope if it
does end up in an unexpected place.
2015-07-23 08:04:34 -06:00
Sam Tobin-Hochstadt
960fc831fc Provide promise/name?. 2015-07-22 14:33:30 -04:00
Matthew Flatt
2cf01f0257 raco exe: fix interaction of submodules and using source
Also, fix the interaction of submodules plus `--collects-dest`, but
there's room for improvement there in pruning unused submodules.
2015-07-22 10:54:31 -06:00
Matthew Flatt
176777b05f adjust transfer of compiled in one namespace and run in another
Formerly, compiling a definition in one namespace and evaluating it in
another would cause the definition to take place in the original
namespace --- unless the compiled code is marshaled to a byte string
and back. Adjust the "linking" process to redirect the variable
definition and any references to the new namespace. (This is a change
relative to the compiler with the old macro expander.)

Also, repair a compiled `require` form along similar lines. (This is
*not* a change relative to the compiler with the old macro expander;
the mismatch is part of the motivation for changing `define`
handling.)
2015-07-22 10:54:31 -06:00
Robby Findler
4899200177 add what appears to be the right missing argument, judging from other uses
of simultaneous-installs and the fact that the build seems to go through now
2015-07-21 22:21:42 -05:00
Matthew Flatt
1465ff25fc in ".zo", keep module's set of scopes together
For a set of phase-specific scopes that correspond to the "inside
edge" of a module, make sure the whole set is marshaled together.
2015-07-21 12:50:48 -06:00
Matthew Flatt
444518b344 racket/unit: fix problem with contracts
Part of the expansion to handle contracts confused internal and
external names of signature elements. The new macro expander is less
tolerant of the mistake.
2015-07-21 10:19:40 -06:00
Matthew Flatt
ea612d255f don't export old-case from racket/base
Reverts a change that was accidentally included in the set-of-scopes
switch.
2015-07-20 15:05:09 -06:00
Vincent St-Amour
1083a31965 check-duplicate -> check-duplicates
For consistency with remove-duplicates.
2015-07-20 16:00:53 -05:00
Vincent St-Amour
7700b3d736 Move contents of unstable/hash to racket/hash. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
952df81877 Move remf from unstable/list to racket/list.
Add remf* for consistency.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
c0408de912 Move various common prefix functions from unstable/list to racket/list.
Make their interface consistent with the rest of racket/list.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
067ed4ccac Move list-update and list-set from unstable/list to racket/list. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
5e23ad6ccf Move group-by and cartesian-product from unstable/list to racket/list. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
6b9fc4551d Add error checking to check-duplicate.
To replace its original contract, and avoid introducing a dependecy to contracts.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
4d9751e98c Move check-duplicate from unstable/list to racket/list.
Make its interface uniform with remove-duplicates.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
60e7f1b7c7 Add argument checking to conjoin and disjoin. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
0e6baea9f6 Move contents of unstable/function to racket/function.
Split implementation of racket/function to avoid circular dependencies.
2015-07-20 16:00:52 -05:00
Matthew Flatt
57ea02616c fix inspector tracking in syntax objects
Repair a NULL vs. #f mismatch.
2015-07-20 13:41:04 -06:00
Matthew Flatt
3d87d61039 fix expansion loop in a definition context
Add the current definition context's scope to any expression that is
produced by macro expansion before trying to expand again, in case the
expansion needs to refer to a definition introduced by a previous
expansion.

Previously, the scope was added before any expansion and after any
expansion, but that misses intermediate points.

The old expander had this bug, too (some of the new tests fail there),
but it showed up less often and was sometimes considered correct, for
various reasons.
2015-07-20 13:20:03 -06:00
Matthew Flatt
54cf4c7f16 racket/generics: fix generated <gen>/c
The revised implementation of `define-generics` for the new macro
expander wasn't right, because the macro attached to `<gen>/c` for a
given `<gen>` used a macro-introduced reference to the generic to
match up method names with the generic's methods.
2015-07-20 06:39:18 -06:00
Matthew Flatt
0bc5a1b06a fix nested begin-for-syntax
Initialize a phase-2 namespace before trying to use it.
2015-07-19 12:07:53 -06:00
Gustavo Massaccesi
597eb161f5 avoid compiler warning 2015-07-18 20:44:36 -06:00
Matthew Flatt
1eba8ac2a7 fix place-channel support for eq[v] hash tables
Bug caught by an existing test.
2015-07-18 20:44:36 -06:00
Matthew Flatt
053cfc0ddb fix an incorrect simpliciation in the GC
I had tried to simplify the "generation 0" allocation function to
always use `GEN0_PAGE_SIZE`, but "generation 0" is also used for place
messages, in which case a much smaller size should be used.

The "place-in-channel-fnl.rkt" test exposed this problem.
2015-07-17 09:55:17 -06:00
Sam Tobin-Hochstadt
ab07280e71 Reduce syntax/parse dependencies in match. 2015-07-17 10:58:13 -04:00
Matthew Flatt
123f724c47 fix GC problem with chains of ephemerons
A recent GC change (included with the set-of-scopes expander)
allows the GCs marking procedure to recur directly to a limited
depth, instead of always pushing pointers onto a stack. Direct
recursion is not cmopatible with ephemeron-resolution process,
so switch to no-recur mode.

This problem was uncovered by an existing test.
2015-07-17 02:10:04 -06:00
Matthew Flatt
dd0ced3c02 avoid compiler warnings 2015-07-16 21:04:01 -06:00
Matthew Flatt
aaee824f68 optimizer: fix coordinate shift when a letrec is split
The combination of splitting a `letrec` and optimizing
the resulting `(let ([x <proc>]) x)` to just `<proc>`
used a bad coordinate shift, which made property testing
incorrect, etc.

For reasons that are not clear, the new expander triggered
the problem through an existing test.
2015-07-16 18:18:58 -06:00
Matthew Flatt
b72dceb865 avoid excessive fallbacks via eval-syntax
The `eval-syntax` function (which is used by other functions, such as
loading a module) should not install fallback-binding scopes from
the current namespace.
2015-07-16 14:20:00 -06:00
Matthew Flatt
fc5e32e526 switch to set-of-scopes expander
The development history for set-of-scopes is preserved in a "scope"
branch in the main Racket repository, which is commit
 ae88c96f50
2015-07-16 14:20:00 -06:00
Matthew Flatt
bfc2b27d65 fix optimizer's single-use tracking, especially on inlining
When `(let ([x ...]) (let ([y x]) ... y ... y ...))` turns into
`(let ([x ...]) ... x ... x ...)`, make sure that `x` is not
still marked as single-use. Incorrect marking as single-use could
cause the optimizer to inline too much, for example.

Thanks to Gustavo for tracking down the problem.
2015-07-16 07:48:17 -06:00
Matthew Flatt
ec6c88442d fix length-specifying form of _bytes to include room for nul 2015-07-16 07:10:36 -06:00
Gustavo Massaccesi
bfc9eb8d62 Add ´not´ to the relevant predicates list
Previously all the predicates recognized only non-#f things, so ´not´ can be
added to the list of disjoint predicates. But many of the parts of the code
relied on the non-#f property and had to be modified.
2015-07-14 19:20:11 -03:00
Gustavo Massaccesi
dfc64053b7 Infer type from comparisons in test positions
In (if (eq? x <pred?-expr>) <tbranch> <fbranch>) infer that the type of
x is pred? in the tbranch.

Also, reduce (eq? x y) => #f when the types are different.
2015-07-14 19:19:50 -03:00
Gustavo Massaccesi
bc2cf531e3 Reduce variables with type null? and void? to null and #<void>
The optimizer reduces the variables with a known type to #t in a Boolean context.
But some predicates imply that the variable has a definite values, so they can be
reduced in a non-Boolean context too.

For example, in (lambda (x) (if (null? x) x 0))) reduce the last x ==> null.
2015-07-14 19:19:28 -03:00
Gustavo Massaccesi
58300857db Fix bug in type propagation to avoid the reduction of mutable variables
This fixes the bug twice:
* Don't reduce mutable variables with a type to #t in a Boolean context.
* Don't record the type of mutable variables when a predicate is
     checked in a test condition.
2015-07-14 19:19:05 -03:00
Gustavo Massaccesi
b7ae673ee0 Mark (values <expr>) as single valued
While reducing some ignored constructors, the optimizer may wrap the arguments
<expr> in (values <expr>) to ensure that it's a single value non-cm expression.
This avoids the unnecessary nesting of (values (values <expr>)).

Similarly, add the cases for begin and begin0 to single_valued_noncm_expression
2015-07-14 13:43:54 -03:00
Gustavo Massaccesi
d0c9a894fb Mark many port primitives as non-cm 2015-07-14 13:28:28 -03:00
Robby Findler
2ffa03c626 remove unused definition (some old refactoring lost track of this,
I presume)
2015-07-13 09:34:37 -05:00
Matthew Flatt
231e9b3f81 ffi/com repair
Thanks to Kang Ren.

The repair seems obviously correct, but I don't know how to test
it (i.e., don't have a COM object that would exercise the code).
2015-07-10 08:26:21 +02:00
Matthew Flatt
d6fa581a4c increase signal-handling stack size
On 64-bit Linux platforms other than x86_64 (e.g., AArch64), SIGSTKSZ
isn't big enough. Use a stack 10 times as large.
2015-07-03 12:41:37 -06:00
Matthew Flatt
ff492f9bb6 add comments on how page alisngment 2015-07-03 12:40:26 -06:00