Instead of claiing "beginning of time" and an empty SHA1, use
`file-stamp-in-paths` to get a proper stamp.
This fixes a problem when installing built packages into user scope
where the built packages refers to an installation-scope library
and SHA1s need to be checked to fix up file timestamps.
No joy in mudville. See
http://drdr.racket-lang.org/28175/ for details
Also fix (just introduced) infinite loop in class/c contract-name
implementation and tweak naming stuff a little so tests pass
Fixed:
- class-field-accessor and class-field mutator,
- the interaction between init args contracts and subclasses,
- object=? on wrapped objects (ie if 'this' flows out and
is compared to the object thatn 'new' returns)
- contract-name for class/c
Also, the code now uses impersonator properties internally to track a
class that is wrapped (instead of a wrapper struct). This simplifies
a bunch of places in the code and paves the way for classes that have
a class/c contract to be chapeone-of the original class (altho that
doesn't work yet)
this change is mostly motivated by improving how generics work on
contracted objects.
Also fix dynamic-send
TR's optimizer seems to get angry at the new send expansion, so
disable optimizations auto-language.rkt and insert-large-letters.rkt
(for now)
Done by pairing up incomplete blame objects with the missing blame party
before attaching it to the continuation mark. Other approaches were
explored (having a separate mark for each, imperatively updating blame
objects to add missing blame parties, etc.), but pairing had the least
overhead.
parts of a contract (field, method, init, absent clauses)
Still to do:
- delay the creation of the class that checks internal contracts
until a new derived class is created from a contracted class.
- extend the new implementation so it handles interface contracts
(currently the old version of the external contracts is still there,
just to handle this case)
The first of those is what (I hope) will bring down the memory
footprint for class/c contracts.
that is, instead of (class/c [m (->m integer? integer?)] n) turning
into a call to a constructor that has calls to coerce-contract for
the 'm' method, it instead expands the 'n' method contract into an
identifier reference (that isnt' bound to #f, since #f is coercable to
a contract) and the 'm' contract argument just sits there in the expansion
The main change in this commit is to refactor the class/c projection
such that it actually build two classes internally when only a single
class/c is applied to a single class. The goal is to further adjust
class/c so that the projection corresponding to the external method
contracts goes away (to be replaced by a new strategy) and the
projection corresponding to the internal method contracts gets delayed
using some as-yet-underminded strategy that avoids creating the new
class until someone actually creates a subclass.
This commit, but itself, however is a performance lose to the tune of
about 2 megabytes in DrRacket's startup footprint. Hopefully this
doesn't last too long.
Instead of preserving specific configuration entries, it's probably
better to preserve all of them that are not specifically replaced.
I'm going with the simpler change for now, though.
This commit is a follow-up to e96d592735. The bug fixed this time is
more subtle, because the overflowing computation is never used, but
that doesn't matter in terms of avoiding undefined behavior.
Thanks for Pascal Cuoq and John Regehr.
The launcher was always create assuming a specific relative path
from the "bin" drectory to the "lib" directory, but that relative
path changes in a Unix-style install.
Also, extend fixnum fast path to work more often in 64-bit mode.
More review would be appreciated to help ensure that the revised
implementation avoids undefined behavior in C.
On FreeBSD and related systems, calling localtime() on an out-of-range
value (e.g., where the year doesn't fit in 32 bits) still returns a
tm pointer, instead or returning NULL for an error. To avoid this
problem, restrict the argument to 51 bits (which seems like a lot
of bits, but is still confortably away from the overflow point).
Closes PR 14305