468 Commits

Author SHA1 Message Date
Patrick Walton
0857d22c04 rustc: Print out a real error message on unresolved types. Puts out burning tinderbox. 2011-06-07 23:03:41 -07:00
Patrick Walton
ddec6b5f47 rustc: Use a set-based approach to unification; remove ty_bound_param and ty_local.
Sorry, big perf regression; will fix soon.
2011-06-07 19:33:18 -07:00
Marijn Haverbeke
4bd5f834b0 First take on an alias-safety checker
The alias checker works by ensuring that any value to which an alias
is created is rooted in some way that ensures it outlives the alias.

It is now disallowed to create an alias to the content of a mutable
box, or to a box hanging off a mutable field. There is also machinery
in place to prevent assignment to local variables whenever they are
the root of a live alias.
2011-06-06 21:24:03 +02:00
Brian Anderson
53ea2a4751 stdlib: Use spans for #fmt errors originating in std
Issue #444
2011-06-04 19:48:19 -04:00
Brian Anderson
3ca5fff195 rustc: Use spans for #env errors
Issue #444
2011-06-04 17:14:32 -04:00
Brian Anderson
ecf1bd7651 rustc: Use spans on extfmt error messages
Issue #444
2011-06-04 17:10:04 -04:00
Paul Stansifer
dbd066a02a "macro" -> "syntax extension" for now 2011-06-03 18:47:11 -07:00
Paul Stansifer
79fcd51b46 Make the macro system more modular. 2011-06-03 18:47:11 -07:00
Marijn Haverbeke
07667d29aa Temporarily xfail compile-fail/pattern-tyvar
So that the tinderboxes can go green again. Patrick, please look into
this at some point.
2011-06-03 10:23:13 +02:00
Paul Stansifer
1377e9b341 Implement pcwalton's code review suggestions. 2011-06-02 15:12:17 -07:00
Paul Stansifer
5cd10d2fef Error message, instead of segfault, when recursive types are used. 2011-06-02 14:03:17 -07:00
Lindsey Kuper
528c6516f0 Use span_err instead of err. Fixes issue #444. 2011-06-01 17:22:23 -07:00
Paul Stansifer
9f5dddf08c Now imports are not re-exported unless 'export' is explicitly used. 2011-05-31 18:43:26 -07:00
Michael Sullivan
78b0d33c35 More tests for <-. 2011-05-31 17:39:14 -07:00
Michael Sullivan
68b4688875 Add some simple tests for move. 2011-05-31 17:39:14 -07:00
Brian Anderson
9daa00bf83 rustc: Teach rustc to use block results as fn return values. Closes #372 2011-05-31 19:18:55 -04:00
Tim Chevalier
18a1cce2bc change fn to pred in pred-on-wrong-slots (but it's still xfailed 2011-05-31 10:13:25 -07:00
Tim Chevalier
b6e0c5829f Check the declaration type in a for loop against the sequence type
Changed the typechecker to correctly typecheck the declared variable
type in a for or for-each loop against the vector element type (for
a for loop) or the iterator type (for a for-each loop). Added a
test case.
2011-05-27 17:42:09 -07:00
Michael Sullivan
a7a42c24be Change the syntax for RECV from "var <- port" to "port |> var". 2011-05-27 12:01:20 -07:00
Paul Stansifer
af6b4821c1 Handle circularity in glob imports in a more elegant fashion. 2011-05-27 02:42:33 +00:00
Paul Stansifer
7fe3d821ac Add a map from def_id s to items in resolve::env.
Use it to provide better error messages in the event of
glob-importing the same name multiple times.
2011-05-27 02:42:33 +00:00
Paul Stansifer
54ca8565c9 Fix bugs: make sure glob imports show up in the right module,
and make sure that circular glob imports don't diverge.
2011-05-27 02:42:33 +00:00
Paul Stansifer
40fe44d23e "import module::*;" now works. 2011-05-27 02:42:33 +00:00
Graydon Hoare
fc31aa7f85 Fix testcase to be slightly less fussy about line number of error, as it just drifted. 2011-05-26 18:29:28 -07:00
Tim Chevalier
4f792f2dbb Track spans for each local variable in typestate
This lets us print better messages in situations with name
shadowing.
2011-05-26 18:14:32 -07:00
Brian Anderson
29a801565a rustc: Fail better when the first argument to #fmt is not a string literal 2011-05-25 23:50:19 -04:00
Brian Anderson
c4e9d8fb91 rustc: Fail when #fmt is given too many arguments 2011-05-25 23:43:04 -04:00
Brian Anderson
6473b73174 rustc: Use demand functions instead of open-coded typecheck for spawn
Un-xfail spawn-non-nil-fn
2011-05-24 20:23:21 -04:00
Marijn Haverbeke
fbc0e840e3 Stop showing a 'cyclic import' message for unresolved imports
This only happened for single-length import paths, because the import
was being looked up in its own scope.
2011-05-24 20:58:38 +02:00
Tim Chevalier
bad05e20a3 Improve nonexistent-module error message
The error message for (for example) "import vec;" without "use std;"
was "cyclic import", which was misleading because there were no
cycles. I changed it to "cyclic import or nonexistent module",
which doesn't break existing tests.
2011-05-24 10:47:58 -07:00
Brian Anderson
029c1e71ff test: Remove compile-fail/export-boot.rs
This was a rustboot-specific test which is covered by other tests in rustc.
2011-05-23 23:13:18 -04:00
Brian Anderson
e5e2811bc6 test: Un-xfail some compile-fail tests
Changed a few error patterns to match rustc's errors where it seemed
reasonable.
2011-05-23 23:13:18 -04:00
Tim Chevalier
c22100ab2d Un-XFAIL vector-no-ann
and update it to reflect the new friendly error message
2011-05-23 19:46:27 -07:00
Tim Chevalier
b620be9cd2 Typecheck @[] correctly
Previously, if you wrote
let @vec[int] foo = @[];

that would be a type error. That didn't seem right, so I changed
pushdown to unify the inner type in an unop application with the
argument type of the operator type.
2011-05-23 17:17:49 -07:00
Brian Anderson
4bcdf57d78 test: Add a test for mismatched types of if branches 2011-05-21 18:18:48 -04:00
Tim Chevalier
7b4eec215c Some tests for ! annotations 2011-05-20 19:54:14 -07:00
Tim Chevalier
a1b440baaa Un-XFAIL some tests that now pass. 2011-05-20 19:54:14 -07:00
Tim Chevalier
77f56f3154 XFAIL two tests for stage0 2011-05-20 19:54:14 -07:00
Tim Chevalier
5de9d27fcc un-XFAIL forgot-ret and update error pattern 2011-05-20 18:20:54 -07:00
Marijn Haverbeke
8a7b544995 Finish name collision testing.
And fix a the single screw-up in the source code it caught.
2011-05-19 21:58:57 +02:00
Graydon Hoare
0a74ffaea3 xfail vector-no-ann.rs. 2011-05-19 12:18:23 -07:00
Tim Chevalier
8cbdaf4f93 Make trans use span_err for the dreaded "ty_var in trans::type_of" error
This required quite a bit of tiresome plumbing about of spans.
On the bright side, now other errors can be converted to span_err too.

Includes test cases.
2011-05-19 11:40:16 -07:00
Paul Stansifer
1fdc75ee7c Parser fix: 'fail' was eating the next token that came after it. 2011-05-17 05:40:17 +00:00
Graydon Hoare
a2e2e78103 Merge remote branch 'origin/master' into HEAD
Conflicts:
	src/comp/middle/trans.rs
2011-05-16 19:04:45 -07:00
Graydon Hoare
fbbc1a77d2 Rewrite everything to use [] instead of vec() in value position. 2011-05-16 18:21:22 -07:00
Tim Chevalier
b42bb2cff2 Two tests that the typechecker correctly unifies type arguments in patterns with their expected tag types 2011-05-16 16:59:30 -07:00
Tim Chevalier
971b5d5151 Started adding support for return checking and non-returning function annotations
* Reorganized typestate into several modules.

* Made typestate check that any function with a non-nil return type
  returns a value. For now, the check is a warning and not an error
  (see next item).

* Added a "bot" type (prettyprinted as _|_), for constructs like be, ret, break, cont, and
  fail that don't locally return a value that can be inspected. "bot"
  is distinct from "nil". There is no concrete syntax for _|_, while
  the concrete syntax for the nil type is ().

* Added support to the parser for a ! annotation on functions whose
  result type is _|_. Such a function is required to have either a
  fail or a call to another ! function that is reached in all control
  flow paths. The point of this annotation is to mark functions like
  unimpl() and span_err(), so that an alt with a call to err() in one
  case isn't a false positive for the return-value checker. I haven't
  actually annotated anything with it yet.

* Random bugfixes:

* * Fixed bug in trans::trans_binary that was throwing away the
    cleanups for nested subexpressions of an and or or
    (tests: box-inside-if and box-inside-if2).

** In typeck, unify the expected type arguments of a tag with the
   actual specified arguments.
2011-05-16 16:59:25 -07:00
Brian Anderson
f33d490032 Remove xfail-boot lines from tests 2011-05-14 21:05:22 -04:00
Marijn Haverbeke
7647b838a1 Remove reserved word tests (since reserved words were removed)
Ping me if you disagree, but I think that in a language that's as
in-flux as rust currently is, it is silly to try and enforce a single
future-compatibility. The reserved words didn't work well with the
parser refactor, so I dropped them for the time being. We can,
eventually, bring them back as type-only reserved words.
2011-05-13 22:00:13 +02:00
Marijn Haverbeke
ae26b775b4 Implement module namespaces
Module names no longer clash with type and value names. The
tokenizer/parser still needs to be taught to be more careful in
identifying keywords, so that we can use 'str' and 'vec' and so as
module names.
2011-05-13 17:20:46 +02:00