Commit Graph

212 Commits

Author SHA1 Message Date
Asumu Takikawa
d85a267c42 Declare require/typed internal identifier first
Uses the `define-syntaxes` trick to declare the identifier
so that its binding symbol doesn't change later.
2015-08-14 21:25:54 -04:00
Asumu Takikawa
e031d6c47e Typecheck the top-level using trampolining macros
Instead of local-expanding the entire top-level forms at
once, wrap expressions in a top-level begin in trampolining
macro forms. This allows the typechecker to trampoline back
to the evaluator, which is necessary to declare/register
declarations made in a top-level begin.

The point of this change is to eliminate top-level hacks
and faciliate various macros that need to communicate using
multiple top-level forms.
2015-08-14 21:25:54 -04:00
Asumu Takikawa
84bd502d46 Refactor TR top-interaction
Use a macro to abstract out the implementation of most
of the top-level TR commands.
2015-08-14 21:25:54 -04:00
Asumu Takikawa
94ce4b203e Use tc-expr for top-interaction functions instead
This restricts operations like `:print-type` to only
work on expressions. This seems like a reasonable
restriction and simplifies the implementation.
2015-08-14 21:25:54 -04:00
Vincent St-Amour
e997f02095 Rewrite compound pair operation optimization.
Previous version replaced calls to, e.g., `cadr` with calls to `cdr`
then `car`, called the typechecker to populate the type table, then
optimized the exploded operations. The call to the typechecker failed
on open terms, limiting the applicability of the optimization, and was
just generally brittle.

The new version instead explodes operations, then optimizes them inside
out for as long as the argument's type guarantees it's safe. This works
on open terms, and should be more robust.
2015-08-14 17:28:47 -05:00
Asumu Takikawa
509f1aa20c Update type for copy-directory/files 2015-08-14 01:02:54 -04:00
Vincent St-Amour
aae17a0bc0 in-pairs -> in-dict 2015-08-13 10:41:15 -05:00
Vincent St-Amour
b6362e7eb3 unstable/sequence -> racket/sequence
And move to TR one of the functions that didn't make it.
2015-08-13 10:41:15 -05:00
Asumu Takikawa
4f050888e2 Export let*-values from TR correctly
Closes PR 14997
2015-08-12 12:16:05 -04:00
Asumu Takikawa
29144c7932 Fix handling of let rhs that don't return
In the case that a let rhs doesn't return and therefore the
bodies of the let are unreachable, the bodies need to be marked
as ignored for the optimizer.

In addition, don't attempt unboxed let optimization at all
if the return type is Nothing since it probably means some
body expressions have no type.

Closes GH issue #165
2015-08-11 12:07:27 -04:00
Asumu Takikawa
6512b52b1d Fix polymorphic recursion check for type aliases
The old check was broken for cases with type constructors
with more than one type argument and was also too conservative
in some cases (e.g., when one cycle refers to another cycle of
 aliases in a non-recursive manner).

The new check is still conservative, but it allows more types
than before.

Closes GH issue #157
2015-08-07 19:05:13 -04:00
Vincent St-Amour
b9268e99db Move syntax-length to TR. 2015-08-05 13:13:51 -05:00
Vincent St-Amour
11a8a3e1d9 unstable/syntax -> syntax/location 2015-08-05 13:13:51 -05:00
AlexKnauth
0c1d58a07b handle define-new-subtype in earlier phase 2015-07-30 23:24:17 -04:00
Brian Lachance
a97489cc80 Fix attempt at handling internal errors when binding AnyValues results
This is the correct change for how attempting to bind AnyValues results
caused internal type-checking errors. The root cause was get-type/infer
violating its own contract by using the default return value from
tc-error/expr

This (partially) reverts 5e0e8ed713.
2015-07-30 16:21:07 -04:00
AlexKnauth
a58c2e317f add define-new-subtype
inspired by haskell newtypes
http://www.mail-archive.com/racket-users@googlegroups.com/msg27118.html
https://www.haskell.org/tutorial/moretypes.html
2015-07-30 01:39:06 -04:00
Sam Tobin-Hochstadt
a0b7123d4c Handle for-meta in TR requires. 2015-07-29 14:28:24 -07:00
Brian Lachance
5e0e8ed713 Fix missing match cases when trying to bind AnyValues typed "results"
tc-toplevel has fixes for define's, tc-let-unit has fixes for let's
2015-07-29 11:44:29 -04:00
Brian Lachance
1e5bc30b95 Prevent -let-internal name from leaking to users
Because -let-internal wasn't rename-out'd, users would see its name in
syntax error messages. Adding #:context forces the error messages to be
phrased in terms of the given form.
2015-07-29 11:07:54 -04:00
Asumu Takikawa
91279f46c7 Add types for recent functions moved from unstable 2015-07-28 14:49:26 -04:00
Asumu Takikawa
2819a62b30 Add types for new syntax operations 2015-07-27 17:15:54 -04:00
Daniel Feltey
44a93b7e43 Merge print-syntax? and show-input? parameters into just the print-syntax? parameter 2015-07-26 19:30:39 -05:00
Alex Knauth
f1da9c22c1 Merge pull request #160 from btlachance/colon-checksyntax-arrows
Cancel marks for 'disappeared-use ids in colon macros
2015-07-23 16:51:41 -04:00
Brian Lachance
045bf05381 Cancel marks for 'disappeared-use ids in colon macros
Fixes check-syntax arrows for the id and optional second :
2015-07-23 14:59:52 -04:00
Vincent St-Amour
f92bddd21b Move rest of unstable/logging from typed-racket-lib to unstable-lib. 2015-07-23 11:48:39 -05:00
Vincent St-Amour
a097521f38 Move part of of unstable/logging to racket/logging. 2015-07-23 11:48:39 -05:00
Vincent St-Amour
6c9593bd73 Move unstable/match to the unstable-lib package.
See additional comments in the corresponding commit to the `unstable` repo.
2015-07-23 11:48:39 -05:00
Sam Tobin-Hochstadt
577b5225cd Fix construction of promise contracts; broken in 5cd5f772. 2015-07-22 16:29:39 -04:00
Sam Tobin-Hochstadt
5cd5f772d6 Don't allow promises created with delay/name as (Promise T).
Since these promises re-evaluate their bodies every time they
are forced, allowing them makes `force` not idempotent and not
safe to treat as a path.

This change is slightly backwards-incompatible, since programs
that previously passed `delay/name` promises across the typed
boundary will now fail at runtime. The alternative is also
incompatible: stop treating `force` as a path. Since `delay/name`
is quite obscure, this approach seems like the safer choice.
2015-07-22 14:22:34 -04:00
Vincent St-Amour
19c42b28a7 Move filter-multiple to utils file. 2015-07-20 16:17:39 -05:00
Vincent St-Amour
28c9bdf37b Fix base version dependency. 2015-07-20 16:17:39 -05:00
Vincent St-Amour
f35b5a9182 check-duplicate -> check-duplicates 2015-07-20 16:17:39 -05:00
Vincent St-Amour
9abb1927ee Replace uses of unstable/hash with racket/hash. 2015-07-20 16:17:39 -05:00
Vincent St-Amour
72fb041211 Replace uses of unstable/function and /list with the equivalent core libs. 2015-07-20 16:17:39 -05:00
Sam Tobin-Hochstadt
fca96dcdc1 Quote typecheck-fail-internal properly.
Caught by existing unit tests.
2015-07-20 15:34:49 -04:00
Matthew Flatt
1842aaa2bd fixes for some tests
The `identifier-binding` function is now senstive to the "macro
introduction" scope that's on an indentifier provided to a currently
expanding macro. Unit tests for TR need to use
`syntax-local-intorduce` to remove it, in the same way that `tc-setup`
already does.

Also, recognize a class expansion when it's wrapped with
`#%expression`, since `class` now expands that way sometimes.
2015-07-16 08:40:35 -06:00
Matthew Flatt
8c006da763 remove syntax-local-make-delta-introducer 2015-07-16 08:40:34 -06:00
Matthew Flatt
2d095c4112 adapt to letrec-syntaxes+values removal and quote-syntax extension
The `quote-syntax` form now suports a `#:local` option, which is
used for type annotations to preserve binding context.

Since `letrec-syntaxes+values` is now removed by `local-expand`,
some patterns must be adjusted, including the pattern used
for type annotations.
2015-07-16 08:40:34 -06:00
Matthew Flatt
2f00de99d0 declare empty namespace for submodules
Using the enclosing module's context for the `#f` part of the
`(module* _ #f ....)` would generally enable a compact encoding of
bindings for the purposes of `module->namespace`. Disabling
`module->namespace` for the generated submodules seems more reliable,
and it seems unlikely that anyone will miss the extra debugging
capability (which is all that is lost for these submodules whose
content is, I think, unspecified).
2015-07-16 08:40:34 -06:00
AlexKnauth
aec5fad4be make append preserve non-emptyness of first argument
see https://github.com/racket/scribble/pull/8#discussion_r33423152
2015-06-28 12:07:42 -04:00
Sam Tobin-Hochstadt
9a2b74dc33 Generate trivial constraints for missing type variables.
If the type variable isn't mentioned anywhere, then just
pick `Any` as its substitution.

Fixes #152.
2015-06-23 16:08:23 -04:00
Vincent St-Amour
6bef6e6ca8 Make type of abs and magnitude more precise.
Fixes a failing test.
2015-06-16 12:00:07 -05:00
Eric Dobson
0498f548c1 Fix the type of abs on negative zeros. 2015-06-16 10:43:01 -05:00
Asumu Takikawa
0892e23892 Resolve expected type in tc-lambda-unit
Closes #144
2015-06-10 12:23:39 -04:00
Asumu Takikawa
bc3443b393 Change Module-Path type to accommodate submodules
Closes #84
2015-06-10 12:21:51 -04:00
Sam Tobin-Hochstadt
91e3a1b5f0 Make sure that user-specified clauses come before default clauses in type-case.
Avoids nasty hash ordering bugs.
2015-06-02 17:32:33 -04:00
Asumu Takikawa
b63514a2c3 Allow more flexible keywords in ->* types
Keyword argument types in ->* are now allowed intermixed with
positional arguments instead of at the end.

Closes #145
2015-06-02 01:05:05 -04:00
Eric Dobson
8014db0f7d Make infer unfold Mu before spliting on Unions. 2015-05-19 20:44:15 -07:00
Eric Dobson
d4eaa47b27 Make subtype use hash of hashs.
This has a 1% improvement on new-metrics.rkt by my measurements.
2015-05-19 20:37:41 -07:00
AlexKnauth
e075523e5e change type of partition 2015-05-19 16:29:49 -04:00