Commit Graph

207 Commits

Author SHA1 Message Date
dyb
ee9a4b3f59 profile counts are now maintained even for code that has been
reclaimed by the collector and must be released explicitly by the
programmer via (profile-release-counters).
  pdhtml.ss, primdata.ss,
  globals.h, externs.h, fasl.c, prim5.c, prim.c, alloc.c, scheme.c,
  misc.ms,
  release_notes.stex, system.stex

original commit: 68e20f721618dbaf4c1634067c2bee24a493a750
2019-01-17 09:43:18 -08:00
Matthew Flatt
84d1e19487 Merge branch 'eqvnan' of github.com:mflatt/ChezScheme
original commit: 55b68c7585947c9c07d1be1b643d10dede983874
2019-01-17 09:05:51 -07:00
Matthew Flatt
6a54141df2 change eqv? to recognize +nan.0s as equivalent
original commit: 46ad2395a2c81326efe555876b8e0be012e24814
2019-01-17 09:05:13 -07:00
Matthew Flatt
6974fad58e Merge branch 'strnum' of github.com:mflatt/ChezScheme
original commit: 7e2ba9a879b4b59304616bc6867f25a09b2cda02
2019-01-16 14:49:25 -07:00
Matthew Flatt
d8d4b76917 fix precision on reading with large exponents
A large-magnitude mantissa can cancel some of the magnitude of an
exponent.

Also, make numbers like 1/0e1 be divide-by-zero parse errors
instead of +inf.0 (like 1/0, and in contract to 1/0# or 1/0#e1).

original commit: 820145370046aa3b4d4863ad896d40ffeae01453
2019-01-16 14:48:48 -07:00
Matthew Flatt
3e297e025e adjust make-arity-wrapper to enforce the supplied arity mask
original commit: a9ec7da3ea3b8edc665b060bcba675248119d260
2019-01-15 11:56:03 -07:00
Bob Burger
523384742a fixed 7.ms to specify the relative path of testfile.boot
original commit: 3ee3ffaccd2c50f69b183b4b14318b6a7aa382e7
2019-01-15 13:21:17 -05:00
Matthew Flatt
54282dedc4 Merge branch '17-5-Types-Pass' of github.com:gus-massa/ChezScheme
original commit: caf857a33e13c116afa6e2d960eccbada3604190
2019-01-11 15:35:20 -07:00
Matthew Flatt
ea29ba02f7 Merge branch 'sv' of github.com:mflatt/ChezScheme
original commit: 9dd62e2d4a44879ddb210bb6ebe7ad600b832634
2019-01-10 19:26:37 -07:00
Gustavo Massaccesi
6afcc310dd use "single-valued" to simplify some call-with-values patterns
original commit: 0b9d2f0d778789ee9fda8a7249c8d7da329c9bcd
2019-01-10 19:23:36 -07:00
Matthew Flatt
b78838a641 cp0: move only known-single-valued out of single-value context
In safe compilation modes, avoid turning an error like

 (let ([x (values 1 2)]) x)

or

 (car (list (values 1 2)))

into a program that returns multiple values or

 (if (list (values 1 2)) 3 4)

into a program that returns without an error.

In addition, refrain from moving an expression from a non-tail
position within a procedure to a tail position, unless the expression
is not only single valued but also gauarnteed not to inspect the
immediate continuation (e.g., using `call/cc` and comparing the result
to a previously captured continuation). This constraint applies even
in unsafe compilation modes, because the intent it to provide some
guarantees about non-tail positions to complement existing guarantees
of tail positions.

original commit: 91e9631576e7b97137be856e985609320e327f32
2019-01-08 20:27:26 -07:00
Matthew Flatt
2fd94d5573 repair to cp0 changes for single-value checking
original commit: 1d0d02a1fd01629a2b72b82e95b60084f5bff4fb
2019-01-08 18:46:43 -07:00
Matthew Flatt
8e53fec779 revise optimizations from the "noncm" branch
original commit: 444a284e69c652344174d730596caf7852be050b
2019-01-08 10:09:02 -07:00
Matthew Flatt
3658fad6b7 Merge branch 'count' of github.com:mflatt/ChezScheme
original commit: 9d0a647e87089c91195cc49480d848212025a7ed
2019-01-05 09:55:07 -07:00
Matthew Flatt
aaaa5fefa1 add compute-size-increments
Also adds `get-initial-thread`, since threa values are useful with
`compute-size[-increments]`.

Changes the compiler to inline `weak-pair?` and `ephemeron-pair?`,
since that provides better performance for `compute-size-increments`.

original commit: 57d0cc13f8e932972cba3837b4f54e9c86786091
2019-01-05 09:49:12 -07:00
Matthew Flatt
f6b40d39ba Merge branch 'noncm' of github.com:mflatt/ChezScheme
original commit: b99995a8d38565cbedfbe46ab8a6006ee936b331
2018-12-30 08:18:13 -07:00
Matthew Flatt
9a366730f4 cp0: move only known-single-valued out of single-value context
Aviod turning an error like

 (let ([x (values 1 2)]) x)

or

 (car (list (values 1 2)))

into a program that returns multiple values.

original commit: 4efb3d6f226d9131f87023e45ff2b7e4713da8ae
2018-12-30 08:15:55 -07:00
Matthew Flatt
a0e9eed93f Merge dfasl branch of mflatt/ChezScheme
original commit: c6168b2d0b1b97e9822bc8eae2e08900cebb7152
2018-12-28 08:45:06 -06:00
Matthew Flatt
7c548bb3a1 update vfasl merge
original commit: 99dac3f53f4a7d2b2c373489135e5d270c256726
2018-12-28 08:39:21 -06:00
Matthew Flatt
6d3fc30233 avoid fasl overflow of C stack
When writing a fasl stream, add extra graph points as needed
to limit recursive reading to about 500 non-tail recursions.

original commit: a6759efdc6ac68e45ec8755a5fe9b75038e173a5
2018-12-28 08:26:50 -06:00
Matthew Flatt
ed1d5c982d Merge ../ChezScheme-vfasl
original commit: 78ba118cbde76dd42bc4275ccc76219e159e04d7
2018-12-20 17:51:38 -07:00
Matthew Flatt
efb93d2653 Merge branch 'gcbt' of github.com:mflatt/ChezScheme
original commit: 51c6b2a880000ce754e1595f4481957e9fc7f722
2018-12-16 07:00:22 -07:00
Matthew Flatt
7864a1f45e Merge branch 'arity-wrapper' of github.com:mflatt/ChezScheme
original commit: 1967e6fb2948ea59d9f3b403b7b6e20d228502b1
2018-12-16 06:51:39 -07:00
Matthew Flatt
5a27f6de14 Merge branch 'orderfnl' of github.com:mflatt/ChezScheme
original commit: 04618715b7b447877cd874715d78094befb0b988
2018-12-16 06:46:34 -07:00
Matthew Flatt
31e65b1554 reliably preserve cp in thread context for S_call_help
Also, for completeness, correct the listing of callee-save registers
in callable return for x86 & x86_64.

original commit: 276f8da076a5692457226ea6ad74ba5f0e71cc06
2018-12-05 16:13:25 -07:00
Matthew Flatt
54ffb5dfbe reliably preserve cp in thread context for S_call_help
Also, for completeness, correct the listing of callee-save registers
in callable return for x86 & x86_64.

original commit: 4cd942be6ab2eb5e02f6d6c5c509db3131bd015f
2018-12-05 07:53:49 -07:00
Bob Burger
4699fc1db0 improved consistency of Windows filename handling
original commit: 9017943cdba8c54c8f0acf20b037174780c10039
2018-10-22 16:17:12 -04:00
Oscar Waddell
8b9b2e6b10 restore the import code on reset to provide consistent error message
original commit: 3da0f8ed90b849ea4a72d37169fa78652058d70f
2018-08-25 18:35:29 -04:00
Matthew Flatt
b81c2daf76 merge compiler repair from github.com:cisco/ChezScheme
original commit: 16de1bdcb5616d4796360643e3371594bb84731f
2018-08-23 20:16:17 -06:00
dyb
61df2f25f7 fix for issue #343
- the compiler now uses a temporary variable to hold the return
  value of a nested call across the restore-local-saves form to
  properly handle the case where the destination lvalue is an mref
  whose base and/or index is a local save.
    cpnanopass.ss,
    misc.ms

original commit: 835cbc2430be4f7381cee27133d42e77ace2b37f
2018-08-23 15:29:01 -07:00
Gustavo Massaccesi
6ff9e9ecd5 Fix call case with rest argument in cptypes
And add special case for list to reduce
  (pair? (list x y ...)) ==> (begin x y ... #t)

original commit: 196bb8c18b604cd599e154c63f95a9d0117d4d6e
2018-07-31 20:00:00 -03:00
Matthew Flatt
08a9c8ecf6 Merge addition of hashtable-cells
original commit: 180948f4a6b18ffcc45fe1231b04b69c4b0bc3ff
2018-07-30 15:39:49 -06:00
Matthew Flatt
19bb7d2498 add hashtable-cells
original commit: 96c421421da95e5625f4bdec543ef31c619e876e
2018-07-30 14:19:33 -06:00
Matthew Flatt
6b40582dac merge change to non-tail attachment handling
original commit: 8268daedf38ea3e978da9646860500439c855f55
2018-07-26 17:53:28 -06:00
Matthew Flatt
f19dd5f010 avoid closure
original commit: e3fc13f2b5a5314bfb88e813fc8d0158ddf70ff5
2018-07-26 11:24:22 -06:00
Matthew Flatt
95d3146c16 Merge branch 'cm' of github.com:mflatt/ChezScheme
original commit: 9d8e3e99e79c1a2fa2cd20849c99f05b91db70d9
2018-07-25 16:07:41 -06:00
Matthew Flatt
755a9252c5 Merge branch 'genid' of github.com:mflatt/ChezScheme
original commit: 0ded12c942cb47f3d9cb7d255fab1b07874f139c
2018-07-25 16:05:48 -06:00
Matthew Flatt
4b5daf4594 Merge branch 'arity-wrapper' of github.com:mflatt/ChezScheme
original commit: 23102af98ccd2dacd3529dd37c182d00f1d12490
2018-07-25 16:05:17 -06:00
Matthew Flatt
1860fec019 Merge branch 'gcbt' of github.com:mflatt/ChezScheme
original commit: 59bd17ca5713fbe913e9297e7cbb719b2c45ca7d
2018-07-25 16:01:11 -06:00
Matthew Flatt
b54495f58d Merge branch 'orderfnl' of github.com:mflatt/ChezScheme
original commit: abb84eb7b0dbb9824d0b32407143589ff309a0fb
2018-07-25 16:01:03 -06:00
Matthew Flatt
73e4ea603f add support for continuation attachments
original commit: 330ce0bb349965f82e38a7f29fc5d19646f3c246
2018-07-25 09:43:50 -06:00
Matthew Flatt
f919bbcab6 add support for continuation attachments
original commit: 32669b104ef1119aea21f8592cee09d55f696afa
2018-07-25 06:33:46 -06:00
Bob Burger
be2777e261 fix boot_call and the invoke code object to handle multiple values
original commit: 7fd080903d96a1ef9ab79780bf73aa1619f33894
2018-07-18 14:55:53 -04:00
Bob Burger
02131784f9 Merge branch 'procloc' of https://github.com/mflatt/ChezScheme into procloc
# Conflicts:
#	LOG
#	release_notes/release_notes.stex

original commit: 67b326cb9199a021d7c025834dedc8ac6285fc46
2018-07-18 10:18:24 -04:00
Bob Burger
2ba4f2fefc rebuild bootfiles, update patchfiles
original commit: a0241cd857085d02ac1b34cad23edf7cb42ae213
2018-07-18 10:01:29 -04:00
Bob Burger
15bcad22b4 Merge branch 'cas' of https://github.com/mflatt/ChezScheme
original commit: 9866aa6aa4b1cf54bd9e2e5ec64d08628fb46bc0
2018-07-17 15:27:51 -04:00
Bob Burger
5de438ba7d Merge fdstart from mflatt
original commit: 40faa8c4b489c34da44ccaf269c7b807740f5396
2018-07-17 10:26:20 -04:00
Matthew Flatt
48228739fe add object-references to reflect GC's tracing of objects
The `object-references` function is intended to support debugging of
memory leaks by providing a mapping from each live object to the
object that retained it.

original commit: 61f6602b7e6c388c529f3c5995dcf71a7c42e005
2018-07-16 18:08:48 -06:00
Bob Burger
4ee5abdf0b update patch files
original commit: fb826e55ac9135c65c0bfcf86c861ed3215a30a4
2018-07-16 14:56:05 -04:00
Matthew Flatt
3a422fabb2 update tests for "prefer closest binding name"
original commit: 0c7bb874a2357187e6012601b32ed354c0ff9ba9
2018-07-16 11:01:17 -04:00
Matthew Flatt
28c8ebaeff add make-arity-wrapper-procedure
A program can use `make-arity-wrapper-procedure` to synthesize a
function that reports a given arity mask (without calling `compile`).

In addition, `set-arity-wrapper-procedure!` suports modifying the
implementation of a synthesized procedure. Although similar
functionality could be achieved with `(lambda args (apply (unbox proc)
args))`, an arity wrapper procedure can dispatch to another procedure
without allocating a list for the arguments.

The interpreter now uses an internal variant of arity wrappers to
cooperate with `procedure-arity-mask`.

original commit: 5fede14302840b55edbeb7565e28d09350a4b2e9
2018-07-16 07:52:55 -06:00
Matthew Flatt
8fdf68f10a add box-cas! and vector-cas!
original commit: a416f68a7a02c777881f4848599deefb120d33ae
2018-07-16 07:51:32 -06:00
Matthew Flatt
067555c251 add load-compiled-from-port and Sregister_boot_file_fd
original commit: a0adfa18af879f90d746b0b3541b036016957324
2018-07-15 20:44:34 -06:00
Matthew Flatt
6dd593ed89 add current-generate-id
original commit: 1e4cff5631e9e6615528b60ebcf3c04a8f38e3a0
2018-07-15 20:22:15 -06:00
Matthew Flatt
9521af1518 add generate-procedure-source-information
original commit: b42213a65e75b29f51d29a77d258fa1ba8a336b0
2018-07-15 19:51:54 -06:00
Matthew Flatt
2ca43d6c6f add ordered guardians
Also, avoid quadratic time in GC for guardian chains.

original commit: a07c7e14b61862989777909ee63a2ec120c2ea47
2018-07-15 19:12:43 -06:00
Matthew Flatt
3f9da4af46 prefer closest binding name for procedures
In some cases, such as

 (define g (let ([f (lambda (x) x)]) f))

the inner name `f` could get replaced by the outer name `g`.
Prefer the inner name so that macros can use a `let` wrapper
to reliably name a procedure.

original commit: 9ae0f856b0f81610c6caea13a5bfdf3b135de5b0
2018-06-22 09:09:56 -06:00
Matthew Flatt
49be8b2e3a x86_64: fix foreign-procedure & results that are not multiples of a word
Relevant to #320

original commit: 8143c414c078ec1a0898d7d25340668e855013f0
2018-06-15 13:59:34 -04:00
Bob Burger
5501a81a31 fix mats/foreign4.c compiler error when used in non-threaded systems
original commit: 778c79f6f6c4706b4072b46dc704712365421c16
2018-06-13 15:39:16 -04:00
Oscar Waddell
84352b6b7d add tests for some library-manager uses cases
original commit: 2e6bbc5148bdbcc0546652d8c6c94b89302da4ac
2018-05-21 17:13:18 -04:00
Oscar Waddell
0d829bbdfb reject attempts to visit invisible library
Libraries incorporated via compile-whole-program are, by default,
not visible to environment or eval, unless libs-visible? is true;
complain if we try to visit such libraries.

original commit: 220dca39d0cb482a1cff3f31b8a3197f8b5ee1bc
2018-05-21 17:13:18 -04:00
Oscar Waddell
c5e349cacb propagate enable-check-prelex-flags to separate-eval sub-process in tests
original commit: 760c3414e412ecb6708c890e32fdb8056be1e805
2018-05-21 12:03:30 -04:00
Bob Burger
f425d8846d fix typo in code comment
original commit: 5a11fac7fb92cd8a1bc278ddc782d33bd24c7106
2018-05-16 15:44:16 -04:00
Andy Keep
1f0e42f0ec Merge branch 'pthread' of https://github.com/mflatt/ChezScheme into mflatt-pthread-2
original commit: 2230e5adcb61ac8b27c9deee682270f4e17fbafb
2018-04-21 22:09:05 -04:00
Matthew Flatt
270b0a44c5 Improvements to __collect_safe
Improve error reporting and improve docs as suggested by Andy, and
adjust `conv` -> `conv*` to fit a naming convention.

original commit: b34817aea5d3c4862e7bb313ee9f5281472a832f
2018-04-20 21:55:09 -06:00
Oscar Waddell
528e055466 use patch-exec-path in 7.ms
original commit: a4cc341a57b381c63ed79f316a9bf4fec12bfb70
2018-04-13 11:12:25 -04:00
Oscar Waddell
8220ce2b32 handle compiled library code in boot files once base boot is loaded
original commit: 23788415327a5396d14e452fca410ba68431098b
2018-04-13 10:25:03 -04:00
Andy Keep
18b12f21fd Fixes and small improvements for type recovery.
Removed counter field from prelex, using the operand field instead to
provide the index into the fxmap.  This follows other uses within the compiler
where we use the operand field as a little place for state that is used
within a single pass.  This has a few advantages.  First, it keeps the record a
little smaller.  Second, it means that the prelex numbering can start from 0
for each compilation unit, which should help keep the numbers for the fxmap a
bit smaller in longer running sessions with multiple calls to the compiler.
Finally, it avoids adding to the burden of the tc-mutex, since within the pass
it is safe for us to set the prelexes, since only the instance of the pass
holding this block of code has a handle on it.  As part of this change
prelex-counter is now defined in cptypes and the operand is cleared after the
variables go out of scope.
  base-lang.ss

Fixed the highest-set-bit function in fxmap so that it will work in the 32-bit
versions of Chez Scheme.  The fxsrl by 32 raises an exception, and was leading
to tests to fail in 32-bit mode.
  fxmap.ss

Restructured predicate-implies? so that it uses committed choice instead of
uncommitted choice in comparing x and y.  Basically, this means, instead of
doing:
(or
  (and (predicate-1? x) (predicate-1? y) ---)
  (and (predicate-2? x) (predicate-2? y) ---)
  ...)
we now do:
(cond
  [(predicate-1? x) (and (predicate-1? y) ---)]
  [(predicate-2? x) (and (predicate-2? y) ---)]
  ...)
This avoids running predicates on x that we know will fail because an earlier
predicate matches, generally getting out of the predicate faster.  This did
require a little restructuring, because in some cases x was dominant and in
other cases y was dominant.  This is now restructured with y dominate, after
the eq? and x 'bottom check.

Replaced let-values calls with cata-morphism syntax, including removal of maps
that built up a list of values that then needed to be separated out with
(map car ...) (map cadr ...) etc. calls.  This avoid building up structures we
don't need, since the nanopass framework will generate a mutltivalued let for
these situations.

The if clause in cptypes/raw now uses types1 (the result of the recursive call
on e1) in place of the incoming types clause when processing the e2 or e3
expressions in the cases where e1 is known statically to produce either a false
or non-false value.

Fixed a bug with directly-applied variable arity lambda.  The original code
marked all directly-applied variable arity lambda's as producing bottom,
because it was chacking for the interface to be equal to the number of
arguments.  However, variable arity functions are represented with a negative
number.  For instance, the original code would transform the expression:
(begin
  ((lambda (a . b) (set! t (cons* b a t))) 'a 'b 'c)
  t)
to
((lambda (a . b) (set! t (cons* b a t))) 'a 'b 'c)
anticipating that the call would raise an error, however, it is a perfectly
valid (if some what unusual) expression.  I tried to come up with a test for
this, however, without building something fairly complicated, it is difficult
to get past cp0 without cp0 turning it into something like:
(let ([b (list 'b 'c)])
  (set! t (cons* b 'a t))
  t)

Fixed make-time, time-second-set!, and time-second to indicate that second can
be an exact-integer, since it is not really restricted to the fixnum range (and
if fact we even test this fact in the mats on 32-bit machines).
  primdata.ss

Changed check of prelex-was-assigned (which is not reliably on the input to any
give pass) with prelex-assigned, which should always have an accurate, if
conservative, value in it.

Added enable-type-recovery parameter to allow the type recover to be turned on
and off, and added cptype to the cp0 not run path that runs cpletrec, so that
cptypes can be run independent of cp0.  This is helpful for testing and allows
us to benefit from type recovery, even in cases where we do not want cp0 to
perform any inlining.
  compile.ss, front.ss, primdata.ss

Stylistic changes, mostly for consistency with other parts of the compiler,
though I'm not married to these changes if you'd really prefer to keep things
the way the are.
1. clauses of define-record type now use parenthesis instead of square brackets.
2. indented by 2 spaces where things were only indented by one space
3. define, let, define-pass, nanopass pass productions clauses, now use
   parenthesis for outer markers instead of square brackets.
  fxmap.ss,

original commit: 5c6c5a534ff708d4bff23f6fd48fe6726a5c4e05
2018-04-12 21:54:01 -03:00
Gustavo Massaccesi
05c81335a4 Add safeongoodargs flag to primref
for example reduce (car <pair>) => (#3%car <pair>)

original commit: fedfc84d6abf348f9d2579d479b08f727eb7d445
2018-04-12 21:53:56 -03:00
Gustavo Massaccesi
6e5ddb6968 Add cptypes pass to cp0 to reduce expression using types
- cptypes.ss, ...

Thanks to Jon Zeppieri.

original commit: af0a075e479e8831c9961102e97db9f00f141fa8
2018-04-12 21:53:33 -03:00
dyb
052e48e9e8 committing @akeep library change with rebuilt boot files:
- fixed an issue with the library system where an exception that occurs
  during visit or revisit left the library in an inconsistent state that
  caused it to appear that it was still in the process of running.  This
  manifested in it raising a cyclic dependency exception, even though
  there really is not a cyclic dependency.  The various library
  management functions involved will now reset the part of the library
  when an exception occurs.  This also means that if the library visit
  or revisit failed for a transient reason (such as a missing or
  incorrect library version that can be fixed by updating the
  library-directories) it is now possible to recover from these errors.
    expand-lang.ss, syntax.ss, interpret.ss, compile.ss, cprep.ss,
    8.ms

original commit: 6dbd72496fb4eaf5fb65453d0ae0a75f0ef2ad80
2018-04-05 21:28:33 -07:00
dyb
30934965f3 - added identifier? checks to detect attempts to use non-identifier
field names in define-record-type field specs.
    syntax.ss,
    record.ms, root-experr*

original commit: be022d947b3831afcb4c538151899f9bd6559615
2018-04-04 15:34:54 -07:00
Matthew Flatt
9aa1fc4caa add collect-rendezvous
original commit: f7cb82d97e34b14bfbafe635b0d4a294527b02c3
2018-04-02 13:52:03 -04:00
Oscar Waddell
9d1b935705 standalone export form now handles (import import-spec ...)
original commit: 09b6745679892fe2fac761d5849fe78b87d57dcf
2018-04-02 10:44:17 -04:00
Matthew Flatt
7c94235f6b Change __thread to __collect_safe
Also, report an error if a string type is misused as an argument (for
foreign procedures) or result (for foreign callables) with
`__collect_safe`.

original commit: cdbfa3d86cb0719bf0979b3fe0aa5c4383282b77
2018-03-28 09:29:47 -06:00
Matthew Flatt
22d4fd9978 Add __thread foreign-call convention
See the `foreign-callable` docs for a good example use.

original commit: e3463c78c511ad861dfa49865bb447e9777f9eb8
2018-03-14 17:20:33 -06:00
Matthew Flatt
743800bbb5 support struct args to and results from foreign procedures
original commit: f0a94bdb9f57c1bf7ffbb66693fb5476a6f0e65b
2018-03-12 21:01:47 -06:00
Bob Burger
5f704d57da fix ftype mats on Windows by unsetting the CL environment variable
original commit: 829d7f52e7e35e2277c4c5037b9d70771df4541c
2018-02-21 11:40:08 -05:00
dyb
59c87c8e9f minor corrections to 4.ms; updated root-experr-compile-{0,2}-f-f-f
original commit: 86591f9dd45f36aa0e7d320d2286ffdb1b49076e
2018-02-18 20:41:15 -05:00
Gustavo Massaccesi
4991067ed7 Remove special case for (#2%map p '()) in cp0
So the reduced version checks that p is a procedure
Also make the same change for #2%for-each.
  cp0.ss, 4.ms

original commit: 5caa11c85bc74c0af25ac215d48b7f5f0c1d3e42
2018-02-13 17:47:43 -03:00
dybvig
f7c414bda3 Various updates, mostly to the compiler, including a new lambda
commonizatio pass and support for specifying default record
equal and hash procedures:

- more staid and consistent Mf-cross main target
    Mf-cross
- cpletrec now replaces the incoming prelexes with new ones so
  that it doesn't have to alter the flags on the incoming ones, since
  the same expander output is passed through the compiler twice while
  compiling a file with macro definitions or libraries.  we were
  getting away without this just by luck.
    cpletrec.ss
- pure? and ivory? now return #t for a primref only if the prim is
  declared to be a proc, since some non-proc prims are mutable, e.g.,
  $active-threads and $collect-request-pending.
    cp0.ss
- $error-handling-mode? and $eol-style? are now properly declared to
  be procs rather than system state variables.
    primdata.ss
- the new pass $check-prelex-flags verifies that prelex referenced,
  multiply-referenced, and assigned flags are set when they
  should be.  (it doesn't, however, complain if a flag is set
  when it need not be.)  when the new system parameter
  $enable-check-prelex-flags is set, $check-prelex-flags is
  called after each major pass that produces Lsrc forms to verify
  that the flags are set correctly in the output of the pass.
  this parameter is unset by default but set when running the
  mats.
    cprep.ss, back.ss, compile.ss, primdata.ss,
    mats/Mf-base
- removed the unnecessary set of prelex referenced flag from the
  build-ref routines when we've just established that it is set.
    syntax.ss, compile.ss
- equivalent-expansion? now prints differences to the current output
  port to aid in debugging.
    mat.ss
- the nanopass that patches calls to library globals into calls to
  their local counterparts during whole-program optimization now
  creates new prelexes and sets the prelex referenced, multiply
  referenced, and assigned flags on the new prelexes rather than
  destructively setting flags on the incoming prelexes.  The
  only known problems this fixes are (1) the multiply referenced
  flag was not previously being set for cross-library calls when
  it should have been, resulting in overly aggressive inlining
  of library exports during whole-program optimization, and (2)
  the referenced flag could sometimes be set for library exports
  that aren't actually used in the final program, which could
  prevent some unreachable code from being eliminated.
    compile.ss
- added support for specifying default record-equal and
  record-hash procedures.
    primdata.ss, cmacros.ss, cpnanopass.ss, prims.ss, newhash.ss,
    gc.c,
    record.ms
- added missing call to relocate for subset-mode tc field, which
  wasn't burning us because the only valid non-false value, the
  symbol system, is in the static generation after the initial heap
  compaction.
    gc.c
- added a lambda-commonization pass that runs after the other
  source optimizations, particularly inlining, and a new parameter
  that controls how hard it works.  the value of commonization-level
  ranges from 0 through 9, with 0 disabling commonization and 9
  maximizing it.  The default value is 0 (disabled).  At present,
  for non-zero level n, the commonizer attempts to commonize
  lambda expressions consisting of 2^(10-n) or more nodes.
  commonization of one or more lambda expressions requires that
  they have identical structure down to the leaf nodes for quote
  expressions, references to unassigned variables, and primitives.
  So that various downstream optimizations aren't disabled, there
  are some additional restrictions, the most important of which
  being that call-position expressions must be identical.  The
  commonizer works by abstracting the code into a helper that
  takes the values of the differing leaf nodes as arguments.
  the name of the helper is formed by concatenating the names of
  the original procedures, separated by '&', and this is the name
  that will show up in a stack trace.  The source location will
  be that of one of the original procedures.  Profiling inhibits
  commonization, because commonization requires profile source
  locations to be identical.
    cpcommonize.ss (new), compile.ss, interpret.ss, cprep.ss,
    primdata.ss, s/Mf-base,
    mats/Mf-base
- cpletrec now always produces a letrec rather than a let for
  single immutable lambda bindings, even when not recursive, for
  consistent expand/optimize output whether the commonizer is
  run or not.
    cpletrec.ss,
    record.ms
- trans-make-ftype-pointer no longer generates a call to
  $verify-ftype-address if the address expression is a call to
  ftype-pointer-address.
    ftype.ss

original commit: b6a3dcc814b64faacc9310fec4a4531fb3f18dcd
2018-01-29 09:20:07 -05:00
Andy Keep
ef497bf210 Merge branch 'bounds' of https://github.com/mflatt/ChezScheme into mflatt-bounds
original commit: b619c426142eaa8ae410138e17d16bd1e7f133e9
2018-01-15 13:10:29 -05:00
Andy Keep
3cedf42ed2 - added tests to ensure the optimize-level version 2 of map and for-each raise
a non-procedure exception when the first argument is not a procedure, even
  when the rest of the program is compiled at optimize level 3.
    4.ms, root-experr-compile-0-f-f-f, patch-compile-0-t-f-f,
    patch-compile-0-f-t-f, patch-interpret-0-f-t-f, patch-interpret-0-f-f-f,
    patch-interpret-3-f-t-f, patch-interpret-3-f-f-f

original commit: 7916447d1a482ec91ae63927692053d727d9b459
2018-01-15 13:07:23 -05:00
Matthew Flatt
1dba8c4624 fix bounds check on immutables values and an immediate index
original commit: fc064b5b91bc5c7da8b7c71441a37e3c05523986
2018-01-07 08:48:57 -07:00
Bob Burger
350f87ba4d fix bug in date->time-utc caused by incorrect use of difftime in Windows
original commit: 4748dad50c7f0e9b3ba002c27990d4c88c0189fc
2017-12-29 16:48:30 -05:00
Matthew Flatt
9a51376b5a even? and odd?: reject exceptional flonums, since they're not integers
original commit: 94a28793313c714520635bd09359ef8bde2d52a8
2017-12-28 17:00:04 -06:00
Gustavo Massaccesi
dc0be2bfbe fix mat of substring-fill!
after the recent change, the result of substring-fill! is void
  5_5.ms

original commit: a2cd9856be74008cc23b6ca3476339e79a1cd5ff
2017-12-15 19:28:43 -03:00
dyb
893dfe5d35 maybe-compile-{file,program,library} and automatic import
compilation now treat a malformed object file as if it were
not present and needs to be regenerated.  A malformed object
file (particularly a truncated one) might occur if the compiling
processes is killed or aborts before it has a chance to delete
a partial object file.
  syntax.ss,
  7.ms

original commit: c2cb8c79a925c0eb2f9d589e3a497712800bd1dc
2017-11-07 21:49:08 -05:00
dyb
59d2ca053c Merge branch 'master' of github.com:cisco/chezscheme
original commit: 5cfeee1f12507b70a1aa9fe1fd2094c8ff592bca
2017-10-30 21:02:54 -04:00
dyb
64b0db8e30 fixed gather-filedata's sort of profile entries. for any two
entries x and y in the list produced by the sort call, if x's
bfp = y's bfp, x should come before y if x's efp < y's efp.
The idea is that enclosing entries should always come later
in the list.  this affects only languages where two expressions
can start at the same character position.
  pdhtml.ss
expanded capability of ez-grammar with support for simpl
parsing of binary operators w/precedence and associativity
and automatically generated markdown grammar descriptions.
ez-grammar-test.ss now also doubles as a test of pdhtml for
algebraic languages.
  mats/examples.ms,
  examples/ez-grammar.ss, examples/ez-grammar-test.ss,
  examples/Makefile

original commit: 53b8d16a1e86f3956585dbec0c7b573e485f7844
2017-10-30 21:01:43 -04:00
Bob Burger
029fe628f3 updated newrelease to handle mats/Mf-*nt
original commit: 02a321479626d2a9e9f5ee0d5b4862eaed4859c8
2017-10-30 17:32:37 -04:00
dyb
9b6b6d32ee attempt to stabilize timing tests let-values source-caching
test and ephemeron gc test while resensitizing the former
  8.ms, 4.ms
various formatting and comment corrections
  workarea,
  s/Mf-base, bytevector.ss, cpnanopass.ss, date.ss,
  5_6.ms, examples.ms

original commit: 19e2505fc6477fce2d1d0e61187bd504b58ea994
2017-10-29 17:48:43 -04:00
dyb
983e8b6c00 Numerous changes to improve register/frame allocation speed for
procedures with large numbers of variables:
- added pass-time tracking for pre-cpnanopass passes to compile.
    compile.ss
- added inline handler for fxdiv-and-mod
    cp0.ss, primdata.ss
- changed order in which return-point operations are done (adjust
  sfp first, then store return values, then restore local saves) to
  avoid storing return values to homes beyond the end of the stack
  in cases where adjusting sfp might result in a call to dooverflood.
    cpnanopass.ss, np-languages.ss
- removed unused {make-,}asm-return-registers bindings
    cpnanopass.ss
- corrected the max-fv value field of the lambda produced by the
  hand-coded bytevector=? handler.
    cpnanopass.ss
- reduced live-pointer and inspector free-variable mask computation
  overhead
    cpnanopass.ss
- moved regvec cset copies to driver so they aren't copied each
  time a uvar is assigned to a register.  removed checks for
  missing register csets, since registers always have csets.
    cpnanopass.ss
- added closure-rep else clause in record-inspector-information!.
    cpnanopass.ss
- augmented tree representation with a constant representation
  for full trees to reduce the overhead of manipulating trees or
  subtress with all bits set.
    cpnanopass.ss
- tree-for-each now takes start and end offsets; this cuts the
  cost of traversing and applying the action when the range of
  applicable offsets is other than 0..tree-size.
    cpnanopass.ss
- introduced the notion of poison variables to reduce the cost of
  register/frame allocation for procedures with large sets of local
  variables.  When the number of local variables exceeds a given
  limit (currently hardwired to 1000), each variable with a large
  live range is considered poison.  A reasonable set of variables
  with large live ranges (the set of poison variables) is computed
  by successive approximation to avoid excessive overhead.  Poison
  variables directly conflict with all spillables, and all non-poison
  spillables indirectly conflict with all poison spillables through
  a shared poison-cset.  Thus poison variables cannot live in the
  same location as any other variable, i.e., they poison the location.
  Conflicts between frame locations and poison variables are handled
  normally, which allows poison variables to be assigned to
  move-related frame homes.  Poison variables are spilled prior to
  register allocation, so conflicts between registers and poison
  variables are not represented.  move relations between poison
  variables and frame variables are recorded as usual, but other
  move relations involving poison variables are not recorded.
    cpnanopass.ss, np-languages.ss
- changed the way a uvar's degree is decremented by remove-victim!.
  instead of checking for a conflict between each pair of victim
  and keeper and decrementing when the conflict is found, remove-victim!
  now decrements the degree of each var in each victim's conflict
  set.  while this might decrement other victims' degrees unnecessarily,
  it can be much less expensive when large numbers of variables are
  involved, since the number of conflicts between two non-poison
  variables should be small due to the selection process for
  (non-)poison variables and the fact that the unspillables introduced
  by instruction selection should also have few conflicts.  That
  is, it reduces the worst-case complexity of decrementing degrees
  from O(n^2) to O(n).
    cpnanopass.ss
- took advice in compute-degree! comment to increment the uvars in
  each registers csets rather than looping over the registers for
  each uvar asking whether the register conflicts with the uvar.
    cpnanopass.ss
- assign-new-frame! now zeros out save-weight for local saves, since
  once they are explicitly saved and restored, they are no longer
  call-live and thus have no save cost.
    cpnanopass.ss
- desensitized the let-values source-caching timing test slightly
    8.ms
- updated allx, bullyx patches
    patch*

original commit: 3a49d0193ae57b8e31ec6a00b5b49db31a52373f
2017-10-27 23:16:47 -04:00
dyb
09366c6247 - the $case macro used by r6rs:case and case now unconditionally trims
redundant keys and expands into exclusive-cond rather than cond.
  it catches references to => before expanding into exclusive-cond
  to avoid supporting => as an undocumented and useless extension
  of the case syntax.  the r6rs:case and case macros now require
  multiple clauses rather than leaving the enforcement to exclusive-cond,
  and the exclusive-cond macro now requires multiple clauses rather
  than leaving the enforcement to cond.
    syntax.ss,
    4.ms, root-experr*, patch*

original commit: 303921d8515b101c558a056dcf9c05f7cad97f4a
2017-10-13 14:33:32 -04:00
dyb
e7fd8172a0 - Added setting of CHEZSCHEMELIBDIRS to s and mats make files so that
an existing setting will not interfere with the build process, and
  added a note to BUILDING that CHEZSCHEMELIBDIRS should be unset in
  Version 9.5 and before.
    s/Mf-base, mats/Mf-base, BUILDING

original commit: 1cccd56693911a38ece784da677e35f724950700
2017-10-12 09:47:58 -04:00
Gustavo Massaccesi
070dd62d0d fix cp0 reduction of fx[+-*]/carry and their signatures
cp0.ss
  primdata.ss
  fx.ms

original commit: 8c0ec93c9eb16bae8a920bb9b5e2f9d3e96ed250
2017-10-09 12:09:50 -03:00
Andy Keep
c854ef9ab7 - fixed np-normalize-context pass to process trivs list in mvset forms
in tail and predicate context and added regression tests.  Thanks to
  @marcomaggi for reporting the bug and @yjqww6 for providing a
  simplified test and finding the initial solution.
    cpnanopass.ss,
    3.ms

original commit: 28f31d84b6c45e2fa701655e9131801dd603d925
2017-08-31 23:24:14 -04:00
Bob Burger
5c5bdcd841 added support for Microsoft Visual Studio 2017 on Windows
updated ez-grammar-test to write temp files to current directory and delete them when finished

original commit: 89885b73d679759de9c62bab0b407318df123d6f
2017-08-11 13:10:37 -04:00
dybvig
ff64811604 - added "ez-grammar" example program
examples/ez-grammar.ss, examples/ez-grammar-test.ss,
    examples/Makefile, examples.ms

original commit: dd0dec63e7c333d2edc51e7340a8b14e7e3d130b
2017-08-08 22:04:52 -04:00
Bob Burger
7ba018bd41 fixed broken mats on Windows caused by Bash/WSL changes
original commit: 996ba3897f1c4ea27b4b6a15264dc6f6a14c6cdb
2017-08-03 11:51:16 -04:00