Commit Graph

34281 Commits

Author SHA1 Message Date
Matthew Flatt
d9f2a84951 repairs for {impersonator,chaperone}-struct
Commit 0b71b8481d didn't have the tests that I thought I had
written, and so the changes were unsurprisingly buggy.
2014-10-21 21:09:36 -06:00
Matthias Felleisen
2d422da25a fixing error message 2014-10-21 22:54:11 -04:00
Robby Findler
e589f591fb take advantage of the new impersonator support to hack in something that
avoids piling up redundant instanceof/c contracts

This is not a general purpose solution, but instead a hack that covers
certain hopefully likely patterns of redundant contracts for objects.

This commit looks for redundant contracts according in a slightly more
general pattern than just "is the most recently attached contract
stronger than the one I'm about to put on here and does it have the
same blame labels?", because that predicate isn't good enough to cover
the example below. In the example below, we repeatedly get the same
contract put on an object, but with different blame labels. So we need
to drop "inner" contracts. That is, when we have two contracts on
there and we go to add the third, we can tell that the second one
would no longer ever signal blame, so we can keep just the first in
the third.

More concretely, if we had these two contracts on 'v' with the given
blame labels (higher lines means the contract is "outside" or applied
later and the blame labels are in positive/negative order):

  (-> x y)  <c,d>
  (-> x y)  <a,b>

then the two possible blames we get here are blaming d for a non-x
argument and blaming a for a non-y result. And now lets say we add a
third contract to the stack that's a copy of the first, but possibly
with different blame labels:

  (-> x y)  <e,f>
  (-> x y)  <c,d>
  (-> x y)  <a,b>

Now we can blame f for non-x argument and a for a non-y result, both
of which are things covered by the first and third contract, so we can
safely drop the middle one and use this stack:

  (-> x y)  <e,f>
  (-> x y)  <a,b>

The example above is couched in terms of arrow contracts, but this
commit doesn't do this for arrow contracts, it does it for
instanceof/c contracts.

And also the way that we tell that the inner contract is redundant
isn't that it is equal; instead we use contract-stronger?. In
particular, the above reasoning works, I believe, when we have that
the inner contract is stronger than the one we're removing and when
the outer contract is also stronger than the one we're
removing. That's the check that actually happens in the code.

-------

The code below is the example below is an example Asumu sent me (but
with the TR parts stripped out). Before this commit, the contract
wrapping grows without bound, but with this commit it stays constant.

In the example below we get only two different sets of blame labels
(and equal contracts) and thus are actually more contracts that could
be eliminated, but this commit does limit it to just two contracts. (I
think it could be alternating between one and two contracts instead of
always two if the code that dropped the contracts were more clever.)

 #lang racket/base
(module State racket/base
  (require racket/contract racket/class)

  (define state/c
    (recursive-contract
     (class/c
      [m (-> any/c (instanceof/c state/c))]
      [n (-> any/c (instanceof/c state/c))])))

  (define state%
    (class object%
      (super-new)
      (define/public (m) (send this n))
      (define/public (n) (new state%))))

  (define (tree-next o) (send o m))
  (define (make-tree) (new state%))
  make-tree
  (provide
   (contract-out
    [tree-next (-> (instanceof/c state/c) (instanceof/c state/c))]
    [make-tree (-> (instanceof/c state/c))])))

(require (submod "." State))
(require racket/sandbox)
(with-limits #f
             100
             (let loop ([o1 (make-tree)] [n 0])
               (printf "~a\n" n)
               (define o2 (tree-next o1))
               (loop o2 (add1 n))))
2014-10-21 20:12:26 -05:00
John Clements
74efd8394a updated HISTORY.txt
merge to 6.1.1 release
2014-10-21 14:39:32 -07:00
Matthew Flatt
a6102229aa unstable/options: fix for chaperone-struct change
Contrary to the comment for 0b71b8481d, the `unstable/options`
implementation used the first argument to a mutator wrapper.
Adjust to close over the wrapped value.
2014-10-21 14:00:43 -06:00
Matthew Flatt
8a45f9d341 impersonated mutator: fix internal stack overflow
This is not a new bug, but it was exposed by the interaction
of the changed to the impersonated-mutator protocol and
the `unstable/option` test suite.
2014-10-21 13:53:09 -06:00
Spencer Florence
d81f09d11e change typeset-code to conform to text:color<%>'s interface
The `typeset-code` function assumed that a lexeme must be `eof` on an
end-of-file, but `test:color<%>` allows it to be anything. Instead,
the check should be on type as 'eof.
2014-10-21 12:46:14 -06:00
Robby Findler
9d863ca2fe fix small mistake in the docs 2014-10-21 13:11:43 -05:00
Kat Lyons
f54ea70ae0 Fix documentation error in net/sendurl 2014-10-21 10:17:45 -06:00
noryb009
76e68be818 Add %F to drracket desktop file 2014-10-21 10:16:49 -06:00
Eli Barzilay
e52f273491 Prevent irregular real numbers from being treated as valid JSON values.
Fixes PR 14628.
2014-10-21 10:15:36 -06:00
Martin DeMello
bc5d86f494 Add a disposal arg to write-animated-gif 2014-10-21 10:14:21 -06:00
Matthew Flatt
1f4edfd0f6 fix doc typo 2014-10-21 10:08:00 -06:00
Matthew Flatt
0b71b8481d {impersonator,chaperone}-struct: change protocol to receive self
When calling a wrapper procedure for a field accessor or mutator,
provide the structure that was originally passed to the accessor or
mutator, instead of the value that was wrapped to create an
impersonator.

This is a backward-incompatible change, but I can't find any uses of
that initial argument to the wrapper procedure. Also, a wrapper can
capture the original value in its closure, while passing "self" allows
wrappers that are sensitive to overridden impersonator properties.
2014-10-21 10:05:02 -06:00
Matthias Felleisen
923a785867 improved fix, Matthew's suggestion
please merge into 6.1.1
2014-10-21 12:09:36 -04:00
Vincent St-Amour
22d9e36150 Fix tabular to satisfy table's contract. 2014-10-21 12:01:27 -04:00
Matthias Felleisen
3568db5f4f improve error message 2014-10-21 11:06:40 -04:00
Matthias Felleisen
4624a99420 make to-draw (alt-kw) error messages more correct, see test for flaws; closes PR 14781
please merge with 6.1.1
2014-10-21 11:06:40 -04:00
Asumu Takikawa
200f1cdb45 Add contracts and omit an unused definition 2014-10-21 10:14:50 -04:00
Asumu Takikawa
dc578cdbc0 Greatly reduce size of class static contracts.
This helps generate contracts for GUI classes using less
time and memory.
2014-10-21 10:14:50 -04:00
Asumu Takikawa
608dfcf335 Use a new approach to generating Name contracts
This handles contract generation for recursive or
mutually recursive Name types in the static contract
framework.

Instead of just generating recursive-sc static contracts,
it memoizes the recursive contract within a single
type->contract call by indirecting through a table.

When static contracts are instantiated, the table is
consulted for computing contract kind information and for
generating the actual contracts for the recursive names.
2014-10-21 10:14:50 -04:00
Asumu Takikawa
3d4f7906c8 Add a test for generating GUI contracts for TR 2014-10-21 10:14:49 -04:00
Matthew Flatt
99832efb45 openssl: fix ssl-load-default-verify-sources! for Win64
Closes PR 14784

Merge to v6.1.1
2014-10-21 07:33:11 -05:00
Matthew Flatt
e019583acc Inside Racket: document Windows-specific treatement of "UTF-16" 2014-10-21 07:31:08 -05:00
Matthew Flatt
13f5aa240c pkg manage docs: clairfy in overview that a git repo tag is allowed 2014-10-21 07:31:07 -05:00
Matthew Flatt
c15422b577 correct register-finalizer docs by clarifying prohibitions 2014-10-21 07:31:07 -05:00
Matthew Flatt
3323605fa9 racket/udp: adjust receive into a zero-sized buffer
The OS doesn't necessarily react to a zero-sized buffer the way
that `udp-receive!` is supposed to work, so provide only a
non-zero-sized buffer to the OS.
2014-10-21 07:31:07 -05:00
Matthew Flatt
95b083165c syntax-color/racket-lexer: fix problem with unclosed "| "
... where the whitespace character after "|" is non-ASCII.

This bug was found by random testing in `syntax-color/lexer-contract`.
2014-10-21 07:31:07 -05:00
Matthew Flatt
a1bac35b60 syntax-color/lexer-contract: make random-test failure declare itself
Random tests that are implciitly injected into a program should
declare themselves as such when they fail. Otherwise, random
crashes are really confusing.
2014-10-21 07:31:07 -05:00
Matthew Flatt
66729a4473 raco test: show more of stderr on failure 2014-10-21 07:31:07 -05:00
Matthew Flatt
53cbb8b03a raco test: fix -l 2014-10-21 07:31:07 -05:00
Asumu Takikawa
3b006df29d Fix TR docs on #:implements in Class types
Please merge to v6.1.1
2014-10-21 00:57:46 -04:00
Asumu Takikawa
2bad36a6a1 Fix Guide typo
Please merge to v6.1.1
2014-10-21 00:40:33 -04:00
Asumu Takikawa
c1a27951a3 Fix TR treatment of parent row in class types
This bug manifested in having extraneous class
members in a type for a class whose superclass
expression was a mixin application.
2014-10-20 18:18:39 -04:00
Asumu Takikawa
125d993c64 Fix type for stx->list in typed/syntax/stx
Please merge to v6.1.1
2014-10-20 17:39:17 -04:00
Vincent St-Amour
84dfc60ef6 Add missing parenthese. 2014-10-20 16:07:39 -04:00
Breanndán Ó Nualláin
c420da3c30 Make: Dependency Manager. Documentation fix. 2014-10-20 16:07:39 -04:00
Asumu Takikawa
4a32fa1551 Work around a type alias bug in framework types
The type alias analysis is unable to detect a rare kind
of type dependency and as a result initializes type aliases
in an order that doesn't work. Adding the extra `Class`
boilerplate here accommodates the analysis.

Please merge to v6.1.1
2014-10-20 15:56:23 -04:00
Vincent St-Amour
9030680e31 Fix types for foldl and foldr with 3 lists.
Thanks to Jack Firth for the report.
2014-10-20 15:44:45 -04:00
Matthias Felleisen
538bb75d64 eliminated bug introduced with latest revision
please add to 6.1.1.
2014-10-20 15:31:45 -04:00
Matthias Felleisen
5eb21343b6 fixed warning and tests 2014-10-20 09:07:26 -04:00
Asumu Takikawa
d486fa1839 Typo fixes in docs 2014-10-20 02:54:03 -04:00
Asumu Takikawa
7d241e9214 Add typed/net/git-checkout 2014-10-20 02:53:40 -04:00
Asumu Takikawa
a70588ac4f Fix a bug in typechecking kw function application
Mandatory kw arguments in function types could confuse
the typechecker when the function had the
`syntax-procedure-converted-arguments-property` property
set.
2014-10-20 02:50:24 -04:00
Asumu Takikawa
96310d823e Fix types for init arguments in framework
Please merge to v6.1.1
2014-10-19 21:14:45 -04:00
Asumu Takikawa
ca79eceb60 Remove types for interfaces from TR framework.
We don't yet support types for interface values.

Please merge to v6.1.1
2014-10-19 21:14:38 -04:00
Matthias Felleisen
dede06f2a0 bring htdp/*sl languages up-to-date with #true, #false, '() 2014-10-19 17:24:57 -04:00
Robby Findler
bbd9c432b6 adjust docs for drracket/check-syntax so the example
doesn't include paths directly into the plt tree

please include on the release branch.
2014-10-19 14:27:08 -05:00
Robby Findler
0005e1d8ab fix some threading issues in set-language-level!
also, minor rackety
2014-10-19 07:39:29 -05:00
Robby Findler
dd12f79b07 update history for true, false, empty change 2014-10-18 22:03:50 -05:00