Commit Graph

554 Commits

Author SHA1 Message Date
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
Andy Keep
9f78570343 Changed the base language to allow for a list of conventions.
Changed the base language foregin and fcallable forms to accept a list of
conventions, which are each symbols, instead of a single convention, which was
a list of conventions, mostly to make it clear in the grammar what is going on.
  base-lang.ss, cp0.ss cpcheck.ss, cpcommonize.ss, cpletrec.ss, cpnanopass.ss,
  cprep.ss, cpvalid.ss, interpret.ss, syntax.ss,

Fixed a place where we were checking for eq? of two conventions, which now
should be equal? since it is a list (assuming this list will always be in a
consistent order).
  cpcommonize.ss

Removed a spurious definition of convention?
  np-languages.ss

original commit: dabf5a8abeaef12cdfcb36d9aac236dda9ac9158
2018-04-20 16:50:28 -06:00
Gavin Whelan
bc6795cfac Return descriptions for most-positive-fixnum and most-negative-fixnum
were reversed in csug, flipped to be correct.

original commit: f0ea46428e90095ce864964e5bfe7449c9488d85
2018-04-16 06:42:02 +00:00
Oscar Waddell
cd2dc690b0 add newline to (import-notify) message in compile-whole-library and compile-whole-program
original commit: 3d6d526a77da70d47ddbef7105709bd720ca1fc0
2018-04-13 11:29:35 -04: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
Gustavo Massaccesi
62ae3ff4e6 Additional improvements in cptypes
original commit: e53bae2d4ac549ac466d5f9942a839d624fb58fe
2018-04-12 21:54:19 -03: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
Gustavo Massaccesi
b2f9a3e11f Add more operations to fxmap
original commit: 304cc0adc4dc881dea4d17695b73bf345da07dca
2018-04-12 21:53:28 -03:00
Jon Zeppieri
1a5f731752 Add fxmap for cptypes
original commit: 6c6ff6f6ef513ed586bab4b6bc6bfa4676daed98
2018-04-12 21:53:24 -03:00
Jon Zeppieri
168065175d Hashing of prelex for cptypes
original commit: c3d5c784cdf1ffe73abc35f824e588509d98df38
2018-04-12 21:53:20 -03:00
Gustavo Massaccesi
e37833b603 Add signatures field to primref record
primref.ss, primvars.ss

original commit: 0d044806bd5c645bf2c4caf701c2615d6150f8bf
2018-04-12 21:53:16 -03:00
Andy Keep
7f308c1006 Changed the travis-ci monitoring image to match the current brnach (master).
original commit: 95f0a9073b970cacc3db4c300c7a7507c2dc7533
2018-04-09 21:47:03 -04:00
Andy Keep
946eb7ab0a Merge branch 'master' into build-support
original commit: 5806e07f1899bca867523a5ad973caa668cc7e1d
2018-04-09 21:44:32 -04:00
Andy Keep
e79f9a66eb Fixes #273 (on master this time) with -Wno-implicit-fallthrough
Embarrassingly, I committed this change on the wrong branch initially.
Added -Wno-implicit-fallthrough flag to macOS C makefiles.
  c/Mf-a6osx, c/Mf-i3osx, c/Mf-ta6osx, c/Mf-ti3osx

original commit: 8eb8336a7d2870f8e592f060bab8321703e40b48
2018-04-08 12:22:25 -04: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
dyb
b3cf76c3e8 Makefile-csug.in install target is now consistent with the project
page csug directory and pdf names, and newrelease now updates
Makefile-csug.in accordingly.

original commit: 63b1e7237d82d3af3ec594c35e3d5b9c7e58ae54
2018-03-28 09:25:20 -07:00
dyb
9991dd14ae fixed typo reported by github:@guenchi
original commit: 27e2a5c2d076e03ac6a70da06250a393f2253ea1
2018-03-28 08:56:54 -07: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
dyb
718cfada6f corrected typo reported by github:@ocyzl
original commit: 5b6b89cd8f030d7a94194d94bed8f56fade5af34
2018-03-27 14:06:42 -07:00
Oscar Waddell
68e1ae0ece install equates.h, kernel.o, and main.o on unix-like systems
original commit: fd7812d05c791e05eb65982c93bd8c36f7a0404f
2018-03-27 13:03:48 -04: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
dybvig
aa8bea9648 reworked the S_call_help/S_return CCHAIN handling to fix a bug in which
the signal handler could trip over the NULL jumpbuf in a CCHAIN record.
  schlib.c
remade boot files

original commit: d8c270403121547101cb523cc1f80a569dbb0378
2018-03-13 12:28:20 -04:00
R. Kent Dybvig
062e6a6e4e Merge pull request #213 from mflatt/fp-struct
Foreign-procedure struct args and results
original commit: de860f2f4c50eeda7e540b7b44fd7d0d1b7dad90
2018-03-13 09:11:59 -04: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
fb9d36e050 Use spin loop instead of Sleep for more robust race condition mitigation
original commit: fb9f854d449ee96cccb63a12629a729046f0bee1
2018-02-21 16:39:26 -05:00
Bob Burger
6b1259cfef Mitigate a race condition in Windows when deleting files and directories.
original commit: 1a13def8d6570babe378f4c63b5a488fac58ed3f
2018-02-21 16:05:21 -05: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
de7a304653 Merge branch 'gus-massa-18-2-Map-Null'
original commit: 772766cc7ff8735908062ade7da44ce084ae012b
2018-02-18 20:44:26 -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
af60b1c8df updaed release-notes date
original commit: 1e010f5632306305cf1bd44d86c9c51b33a2e7a1
2018-02-01 00:38:14 -05:00
dybvig
34b328092d Added some adapted charter and contributing text to the user's giude
preface and intro.  Added Matthew Flatt to the acknowledgements.

original commit: 332e015dc2cd96160c468278def7d3b2cf8a1131
2018-02-01 00:13:58 -05:00
dybvig
5933a80445 Adding missing file cpcommonize.ss.
original commit: f94b55e92e329a5ea81938b04b217cb267f4f7af
2018-01-29 16:01:25 -05: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
1cdc2a7e0f Merge pull request #260 from gus-massa/18-1-ProfileQW
Fix a few signatures
original commit: 6ead5d9fcf18bd2311965e401cf3c9a78e50a7b2
2018-01-23 08:49:47 -05:00
Andy Keep
33116e32ae removing the intentional fail from 5_3.ms
original commit: bd6d8721a99c83116f709e76ae954c50d7cf0b1c
2018-01-22 21:47:53 -05:00
Matthew Flatt
3d1cb4684a make bootfiles
original commit: 59045a7e0b41b9ccba9d1a0577fc89c471ef9b0e
2018-01-22 17:55:12 -07:00
Matthew Flatt
261cb9ce1d Merge branch 'pthread' of github.com:mflatt/ChezScheme
original commit: 72597bafba6ff6290ac801aea1390e50252d8f7a
2018-01-22 17:09:55 -07:00
Matthew Flatt
4a2dc8d182 Merge branch 'rendezvous' of github.com:mflatt/ChezScheme
original commit: cccdcf961dfd3de8e2e7d0da651ef827bc128258
2018-01-22 17:08:49 -07:00
Matthew Flatt
76ec46611d Revert "add collect-rendezvous"
This reverts commit aef0458c08d10e02a2b50b7018564c0cca7c709c.

original commit: b50882550673738ac2d93fb2135d117425f34e7a
2018-01-22 17:07:48 -07:00
Matthew Flatt
1e95b761f1 Add __thread foreign-call convention
See the `foreign-callable` docs for a good example use.

original commit: 3645f7568c7ab9ca6a9459a870338b51605a2c6c
2018-01-22 17:06:19 -07:00
Matthew Flatt
a590b5ec35 add collect-rendezvous
original commit: 73cf31d3625e519493918faba650bbfc303f1712
2018-01-22 17:01:46 -07:00
Matthew Flatt
15d1acd2f5 add collect-rendezvous
original commit: aef0458c08d10e02a2b50b7018564c0cca7c709c
2018-01-20 21:02:15 -07:00