Commit Graph

383 Commits

Author SHA1 Message Date
Ben Greenman
9fe2252eef add regression test for (Sequenceof T)
Test to make sure `(Sequenceof (Boxof T))` wraps sequence elements in a contract
2017-11-08 21:04:30 -05:00
Sam Tobin-Hochstadt
f35a6fd5cb Avoid wrapping 5 when contracted as (Sequenceof Integer)
Closes racket/math#13
2017-11-08 09:49:22 -05:00
Ben Greenman
966845304e static-contracts: improve optimizer's test for flat scs
* Add `instantiate/optimize` to the static contracts API
  (new function in `instantiate.rkt`)
* Add optional kwd arg `#:recursive-kinds` to sc optimizer
* SC optimizer uses recursive kinds to tell if a `name/sc` or `recursive-sc`
  will generate a flat contract
* `instantiate/optimize`
  - solves for a recursive kinds table
  - calls `optimize` with the table
  - calls `instantiate` with the same table
2017-11-07 00:35:28 -05:00
Andrew Kent
cd181f9d90
check-below use props if with-refinements on 2017-11-05 21:10:58 -05:00
Andrew Kent
f372bdda3e
more general linear exp stx for props 2017-11-05 19:20:03 -05:00
Andrew Kent
1a042f8520
fix parsing of refinements and type aliases 2017-11-05 15:32:21 -05:00
Andrew Kent
160e926da8
add make-vector refinement types 2017-11-02 17:07:41 -04:00
Andrew Kent
8b2c31cab8
fix safe-vector test file 2017-11-02 13:33:19 -04:00
Ben Greenman
26f65f13f7 improve hash/c error message when non-flat-key applied to non-equal?-hash 2017-10-06 16:59:08 -04:00
Ben Greenman
cfa9918ac5 change out-of-date test 2017-10-06 16:03:46 -04:00
Ben Greenman
a58fc276c9 cleanup names, add tests 2017-10-06 16:00:50 -04:00
Andrew Kent
2ef852ae91 fix case lambda (#620)
fix case-lambda checking when no expected type

Not we will check each clause against the other applicable
arrows that are derived during type synthesis for soundness
sake. At a future date, if we instead compute a more 
complete "intersection" of these arrows and then
check against that intersection, that would admit more
correct programs.
2017-10-03 14:20:30 -04:00
Andrew Kent
ffcf5afe92 fix optional and rest arg reasoning (#618) 2017-10-02 23:44:23 -04:00
Sam Tobin-Hochstadt
f1af04fcfa Handle subtyping with all-optional kw args better.
Problem reported by @schackbrian2012. Closes #608.
2017-10-02 12:37:37 -04:00
Ben Greenman
d3efa46003 static-contract: temporary fix for 'Syntax' contract (#617)
Add a case to the static contract optimizer so that contracts
 generated from the `Syntax` type disappear in trusted positions.

This restores the "old" behavior for the `Syntax` type --- the behavior
 before fixing the 'or/c' unsoundness in issue 598.

<https://github.com/racket/typed-racket/issues/598>

Note: this fix is temporary, until the definition of `Syntax` can
 be in terms of _immutable_ vectors & boxes.
2017-10-01 21:02:12 -04:00
Alex Knauth
ee7207d67d Fix cast under multiple cases of case-> (#589)
* fix cast under multiple cases of case->

* add test

* Comments explaining cast-table's lists of types and what they mean
2017-09-30 19:19:18 -04:00
Ben Greenman
9df037b0f6 static-contracts: less or/sc optimization
Prevent the static contract optimizer from changing constructors under `or/sc`.

i.e., for static contracts of the form `(or/sc other-scs ...)`,
 the optimizer cannot optimize any of the `other-scs ...` to `any/sc`
 but it can optimize sub-contracts of the `other-scs ...`

Example:
  `(or/sc set?/sc (box/sc set?/sc))` in a trusted position now optimizes to itself,
  instead of `any/sc`

Optimization can resume under a sub-contract that represents a "heavy" type constructor.
(I mean, `U` is a type constructor but it's not "heavy" like that.)
2017-09-28 23:48:22 -04:00
Andrew Kent
8aa05bebff add dependent function types (#584)
Adds the following:
+ dependent function Types
+ some existential object support when applying
  dependent functions
+ simplify linear arith support
+ add unsafe-require/typed/provide
2017-09-25 12:52:33 -04:00
Ben Greenman
137c138b2e static-contracts: fix list-length/sc
- Change `list-length/sc` to be a contract for lists
- Add tests to check sc-generated contracts against values
2017-09-19 00:13:00 -04:00
Sam Tobin-Hochstadt
75208f4328 Improve loop inference heuristics.
Closes #579
2017-07-16 19:54:14 -04:00
Jack Firth
6369753c28 Fix typed/rackunit contract exception when using run-tests (#583)
* Add a test that suites and run-tests work in typed/rackunit

* Fix Seed type

The "seed" parameter of fold-test-results is passed to each test suite but, near as I can tell, never actually interacted with by the suite.
2017-07-14 08:58:11 -04:00
Ben Greenman
afa0530b3a backwards-compatibility: make HashTableTop generate a flat contract
Changing `HashTableTop` from a singleton to the union:

```
  (U (Immutable-HashTable Any Any) MutableHashTable WeakHashTable)
```

is a backwards compatibility issue because the type `Any` requires a chaperone,
therefore `HashTableTop` requires a chaperone.

This commit adds a case to make sure `HashTableTop` generates a flat contract.
2017-07-13 15:13:59 -04:00
Ben Greenman
4bf6961551 fix type of integer-bytes->integer
and the corresponding tests
2017-07-12 16:41:51 -04:00
Vincent St-Amour
55114e298e Tests for #577.
Closes #576
2017-07-10 16:24:57 -05:00
Andrew Kent
000af1f28c add generalize clauses for new hash types 2017-07-01 22:44:48 +01:00
Andrew Kent
f2bf1062bc erase object when inst is present (#572) 2017-07-01 18:11:18 +01:00
Andrew Kent
9a6c1ba63d fix trivial bug in subtract (#571) 2017-07-01 17:46:36 +01:00
Andrew Kent
fa828df919 simplify arrows a little, less list allocation (#566) 2017-07-01 16:56:22 +01:00
Ben Greenman
6c2a7eb512 patch: check duplicates before making an or/c for hash keys
The contract for `(U (I-Hash k1 v1) (M-Hash k2 v2) (W-Hash k3 v3))`
 is now `(hash/c (or/c k1 k2 k3) (or/c v1 v2 v3))`
 ONLY WHEN the key and value types are distinct.
The contract should no longer include duplicate key or value types.
2017-06-27 01:38:18 -04:00
Ben Greenman
fae58e140d add types for Immutable-HashTable, Mutable-HashTable, Weak-HashTable (#559)
The old 'HashTable' type is now the union of the other 3 hash types.

- all operations that used to work on 'HashTable's still work,
  but some now have more specific outputs
- `#hash` literals have type `ImmutableHash`
- `immutable?` and `hash-weak?` are filters
- `Mutable-` and `Weak-` hashes have corresponding `Top` types, `HashTableTop` is now a union
- the contact for `(U (Immutable-Hash K1 V1) (Mutable-Hash K2 V2))` is ONE `hash/c`

Minor notes:

- renamed internal identifiers containing 'Hashtable' to all use 'HashTable'
- add Racket guide/reference 'secref' functions
2017-06-26 18:00:19 -04:00
Ben Greenman
6e3c509a86 require-typed: more informative error when struct field is missing
add a typed-field syntax class (`[id : expr]`) and use it to report errors + simplify other code
2017-06-05 20:21:32 -04:00
Andrew Kent
dda8b1da20 fix resolve usage in overlap, allocate less (#555)
check calls to resolve-once to see if they return #f
(i.e. if a type is not yet defined), and have overlap
only extend its seen list when it is resolving/unfolding
a potentially infinite type
2017-05-22 22:55:33 +01:00
Sam Tobin-Hochstadt
2785e6f950 Handle new potential printing of empty list type. 2017-05-22 16:33:57 -04:00
Vincent St-Amour
3432f80a20 Have Andrew get email for failing tests on DrDr. 2017-05-22 11:20:06 -05:00
Andrew Kent
1eff41d39e fix abstract/instantiate bug and typos (#554) 2017-05-21 10:42:37 +01:00
Andrew Kent
fea71732d2 fix intersection printing err (#551) 2017-05-20 19:22:05 +01:00
Andrew Kent
d6166b0ad3 fix intersection bug (#549)
fix intersection bug

intersections with resolvable types would occasionally generate
spurious weird types (e.g. μx.x) when a type name
is not yet fully defined -- this patches that problem by
using resolve-once instead of resolve and checking the result
for #f before proceeding to compute the intersection
2017-05-20 10:39:10 +01:00
Vincent St-Amour
c0af5235d2 Add support for #:ps argument in command-line. 2017-05-18 15:50:18 -05:00
Daniel Feltey
764696752d Disarm syntax in typed unit macros
Closes #536
2017-04-27 17:46:23 -05:00
Daniel Feltey
4b35df2c96 Be less rigid about the shape of type annotations in units
Closes #535
2017-04-27 17:24:54 -05:00
Andrew Kent
80d1654dee add more refinement support for inference and literals (#528)
This PR adds more support for refinement reasoning, in particular
type inference is now aware of argument objects which allows for
more programs w/ refinements to typecheck. Additionally, working
with vector types and literals that are refined or need to have
properties about their length proven now works.
2017-04-22 18:45:22 -04:00
Alex Knauth
2262eb9eaf provide for/flvector, for/extflvector, etc. as aliases for : versions (#534)
Since the type-checker can now handle their expansions.

* add typed/racket/flonum and provide typed for/flvector and for*/flvector from it

* add typed/racket/extflonum and provide typed for/extflvector and for*/extflvector from it
2017-04-21 09:35:29 -07:00
Scott Moore
214d597e4b Use code-inspectors to prevent optimization in unsafe contexts. (#531)
The optimizer should only run when the code being compiled could
directly access racket/unsafe/ops. This prevents unsoundness in Typed
Racket from giving untrusted code access to dangerous operations.
2017-04-12 15:17:41 -04:00
Andrew Kent
5fbf4d30a8 singleton char types if expected type (#527) 2017-03-31 18:04:05 -04:00
Andrew Kent
bcc5c26ca8 disable with-tr-contracts for now
Running with-tr-contracts as-is takes an unreasonable
amount of time because the tests are run w/o recompiling
typed racket. We need to find a way to make this more
reasonable (i.e. make sure we recompile before running
the unit tests) before enabling them for DrDr again.
2017-03-31 18:01:18 -04:00
Andrew Kent
6a0dc61102 fix metafunction tests (#524) 2017-03-30 19:33:02 -04:00
Vincent St-Amour
52b4507585 Fix filters of comparisons in the presence of NaN.
Closes #112.
2017-03-28 15:48:37 -05:00
Andrew Kent
81b134cbb9 add refinement types, linear expr objs, and ineq props (#510)
This PR adds about half of the needed primitives and logic for
reasoning about linear integer arithmetic in programs with interesting
dependent types. Things have been added in a way s.t. programs will
still continue to typecheck as they did, but if you want integer literals
and certain operations (e.g. *,+,<,<=,=,>=,>) to include linear inequality
information by default, you need to include the
'#:with-linear-integer-arithmetic' keyword at the top of your module.

The other features needed to get TR to be able to check things like
verified vector operations will be to ajust function types so
dependencies can exist between arguments and a minor tweak to get
type inference to consider the symbolic objects of functions arguments.
These features should be coming shortly in a future pull request.
2017-03-27 14:32:29 -04:00
Ben Greenman
2804bd4a93 update path-add-extension type with new optional argument (#519) 2017-03-27 10:18:53 -04:00
Andrew Kent
bf0761b500 fix serialization of objects (#516) 2017-03-20 20:57:28 -04:00