Commit Graph

3632 Commits

Author SHA1 Message Date
Niko Matsakis
6237368cc2 plug leak: free shared type descrs recursively, as we ought to 2012-01-06 22:40:32 -08:00
Niko Matsakis
d1b987d292 hack the tydesc that is registered with a malloc to be what cc expects 2012-01-06 22:40:31 -08:00
Niko Matsakis
8506241f3a fix how we walk functions to match new closure fmt 2012-01-06 22:40:31 -08:00
Niko Matsakis
8e89df69de rejigger impl to have an opaque closure ptr rather than
opaque closure
2012-01-06 22:40:31 -08:00
Niko Matsakis
7db640e63d collapse sizeof, alignof into metrics, pass along an instance if avail 2012-01-06 22:40:31 -08:00
Niko Matsakis
4f52e5a5ec make size_of and align_of take an optional value 2012-01-06 22:40:31 -08:00
Niko Matsakis
2074e06278 emit the take glue for closure tydescs 2012-01-06 22:40:31 -08:00
Niko Matsakis
98f5109cde simplify task impl 2012-01-06 22:40:31 -08:00
Brian Anderson
396a8bd4e5 rustc: Use std::homedir to locate /home/banderson
Issue #1359
2012-01-06 16:38:29 -08:00
Tim Chevalier
7c7559edaf Disallow variable names that shadow tags in scope
Now, if you have a tag named "foo", a variable declaration like
"let foo..." is illegal. This change makes it possible to eliminate
the '.' after a nullary tag pattern in an alt (but I'll be doing
that in a future commit) -- as now it's always obvious whether a
name refers to a tag or a new declared variable.

resolve implements this change -- all the other changes are just to
get rid of existing code that declares variables that shadow tag
names.
2012-01-06 14:44:43 -08:00
Tim Chevalier
da519c8587 Eliminate a use of map::get in freevars
map::get is evil -- just say no!
2012-01-06 14:44:43 -08:00
Marijn Haverbeke
7b00bac540 Add some basic comments to trans_imp.rs 2012-01-06 17:50:55 +01:00
Marijn Haverbeke
822acdd170 Make binding of fns with bounded type parameters work
Interns non-static dicts to heap-allocated equivalents so that they no
longer have stack scope.

Closes #1436
2012-01-06 17:40:05 +01:00
Marijn Haverbeke
d23e2052e0 Support interface casting in the typechecker
Issue #1437
2012-01-06 17:40:05 +01:00
Marijn Haverbeke
cf5c877fc0 Statically allocate static dicts
Issue #1436
2012-01-06 17:40:05 +01:00
Marijn Haverbeke
41a2d8495e Fix pretty-printing of ty params in iface methods 2012-01-06 17:40:05 +01:00
Marijn Haverbeke
7c1f683c6d Fix bug in method type parameter passing
It would occasionally pass the wrong type parameter, when calling
a generic method from a generic impl on a bounded param type.
2012-01-06 17:40:05 +01:00
Brian Anderson
b532812572 rustc: Stop exported back::rpath::test
Tests no longer need to be exported
2012-01-05 18:23:30 -08:00
Brian Anderson
51e6df689c rustc: Allow the test runner to run unexported tests 2012-01-05 18:16:56 -08:00
Brian Anderson
c2c497ff53 rustc: Configure out #[test] functions when not testing 2012-01-05 17:31:57 -08:00
Brian Anderson
e746ed6880 rustc: Add cargo's lib directory to search paths 2012-01-05 16:03:31 -08:00
Marijn Haverbeke
54cf0e9c0d Use precise return type to allocate retslot in trans_args
Using type_of_or_i8 did, predictably, allocate an i8 for a type parameter,
which leads to memory corruption and general confusion.

Closes #1443
2012-01-05 22:45:02 +01:00
Niko Matsakis
e1a0d0f03d fix pretty printer to correctly insert parens for disamb 2012-01-05 10:44:38 -08:00
Niko Matsakis
f832edc369 require a non-semi expr acting as a stmt to have unit return type 2012-01-05 10:44:38 -08:00
Niko Matsakis
37ba5f3b32 make parser handle parenthesized block-sugar exprs properly 2012-01-05 10:44:38 -08:00
Stefan Plantikow
c8467977c4 Merge branch 'master' into kmath
Conflicts:
	src/libcore/float.rs
2012-01-05 17:20:13 +01:00
Stefan Plantikow
1f10ee365c Moved generic float::min, max to core::math and cleaned up some imports 2012-01-05 17:11:34 +01:00
Marijn Haverbeke
cc929fc9f9 Clean up translating of def_ids in metadata reader
Reduces the amount of closure allocation, and makes the code cleaner.
2012-01-05 17:03:38 +01:00
Marijn Haverbeke
60ae1590af Switch to new param kind bound syntax
And remove support for the old syntax
2012-01-05 15:50:02 +01:00
Marijn Haverbeke
1f71a0f48d Clean up some FIXMEs related to impls 2012-01-05 14:55:23 +01:00
Marijn Haverbeke
3a20dda7ea Get external interfaces / impls working
Issue #1227
2012-01-05 14:17:31 +01:00
Marijn Haverbeke
516fbed230 Fix bad spans for ast::ty parsing
The span would be pointing after the actual text.
2012-01-05 11:09:19 +01:00
Marijn Haverbeke
6559aa8bfb Write the iface type of an impl in the crate data
Also, move checking of ifaces into the collect phase of typeck
to give further passes some guarantees.

Issue #1227
2012-01-05 11:04:41 +01:00
Marijn Haverbeke
3eb35900c7 Remove ty::bind_params_in_type
It does nothing that substitute_type_params can't do better.
2012-01-05 10:07:33 +01:00
Josh Matthews
0e98e64bc2 Add more item types to the ast_map so the test suite can build with debug info. 2012-01-05 01:20:51 -05:00
Marijn Haverbeke
3971b520bc Use the right types for methods in trans_impl
This prevents misalignment between function and argument
types in corner cases.
2012-01-04 22:12:48 +01:00
Tim Chevalier
1e54684093 Reformat typestate error messages so as not to confuse emacs compilation mode 2012-01-04 10:53:56 -08:00
Marijn Haverbeke
94d40be746 Prevent typenames in param bounds from resolving to their own param
I.e. fn foo<T: seq<T>>(...). This leads to weird circularities that seem to
never make any sense, so it seems prudent to forbid it.

Issue #1227
2012-01-04 17:30:36 +01:00
Marijn Haverbeke
42f6608ffd Add visit_ty_params to visit.rs
And use it to make typechecking of bounds less error-prone.
2012-01-04 17:30:36 +01:00
Marijn Haverbeke
a7e1a35f88 Properly typecheck and compile invocations of generic methods.
Aligning the type parameters of the ifaces, impls, and methods
correctly in typeck is almost brain surgery. Seems to work now for
everything I threw at it, but might still break in other corner cases.

Issue #1227
2012-01-04 17:28:51 +01:00
Lenny222
d1ffe5034b "str": rename "str_from_cstr" to "from_cstr" (analogous to the other "from_*") 2012-01-04 09:33:07 +01:00
Tim Chevalier
439e28b751 Add missing ty_constr cases to trans::type_of_inner and ty::fold_ty.
Closes #970
2012-01-03 15:50:05 -08:00
Niko Matsakis
72a3667eb3 Allow tail expressions even in no_value blocks. Type checker
will guarantee they have unit type.
2012-01-03 13:13:52 -08:00
Niko Matsakis
de383bcfed extend parser so that expressions that do not require semi-colons
to be statements are not considered expressions in the tail position
2012-01-03 13:13:51 -08:00
Niko Matsakis
9e1dc703d2 rewrite to put blk as 2nd arg 2012-01-03 13:13:51 -08:00
Niko Matsakis
e34abbacf6 minimal changes to permit fn blocks in expr 2012-01-03 13:13:51 -08:00
Brian Anderson
513a263e81 Merge pull request #1392 from Lenny222/list
list: add "is_not_empty" requirement to "head" and "tail" (analogous to "vec")
2012-01-03 12:18:53 -08:00
Marijn Haverbeke
4e88d5ae92 Make resolution of dictionaries on bounded params work
Issue #1227
2012-01-03 16:37:41 +01:00
Marijn Haverbeke
5ea3c96938 Wire in resolution of param bounds for method calls
Issue #1227
2012-01-03 16:18:40 +01:00
Marijn Haverbeke
506a6ec38b Make syntax for impls less magical
The trick of interpreting parameters to the iface type as parameters
to the impl was just too magical.

Issue #1227
2012-01-03 15:37:41 +01:00
Marijn Haverbeke
e1dc40b271 More work on translating dictionary-passing
Reached a point where simple uses of interfaces without bounds work.

Issue #1227
2012-01-03 15:36:57 +01:00
Marijn Haverbeke
cdd806d324 Add a clause ty_ptr to ppaux::ty_to_str
Closes #1383
2012-01-02 15:42:13 +01:00
Marijn Haverbeke
8c14943dea Properly handle expression blocks in kind.rs
It was only noticing them in expr_block form, not as function
bodies.

Closes #1390
2012-01-02 15:23:11 +01:00
Marijn Haverbeke
1741ef75ac Write out vtables for interface implementations
Issue #1227
2012-01-02 15:15:28 +01:00
Marijn Haverbeke
371b61a23d Drop two useless sub-passes from trans
Neither collect_tag_ctors nor the second pass in collect_items needed
to be separate passes.

Also remove obsolete obj_methods table kludge.
2012-01-02 15:15:28 +01:00
Marijn Haverbeke
a4694ce146 Create a trans_impl module 2012-01-02 15:15:27 +01:00
Marijn Haverbeke
3a1710d21e Key tcx.ty_param_bounds on node_ids, not def_ids
This makes it clearer that it's only valid for local nodes.
2012-01-02 15:15:27 +01:00
Marijn Haverbeke
9f2369dc9f Box arrays of parameter bounds 2012-01-02 15:15:27 +01:00
Marijn Haverbeke
270b4273e7 Pass bounds to trans::type_of_fn 2012-01-02 15:15:27 +01:00
Marijn Haverbeke
664a0443ad More resolving and typechecking of bounded type parameters.
Extern interfaces still don't get recognized.

Issue #1227
2012-01-02 15:15:27 +01:00
Marijn Haverbeke
40d5f288c3 Check that type parameter bounds are interface types
Issue #1227
2012-01-02 15:15:27 +01:00
Marijn Haverbeke
bd6646e698 Make last-use pass properly handle closed-over variables
Closes #1399
2012-01-02 10:20:58 +01:00
Jyun-Yan You
4566578fbd link with gcc44+ 2012-01-01 20:18:55 -08:00
Jyun-Yan You
274fc1b59c fix link error 2012-01-01 20:18:55 -08:00
Jyun-Yan You
21eadbe6f1 add missing library, enable segmented stacks for freebsd 2012-01-01 20:18:55 -08:00
User Jyyou
a59c4b1b47 freebsd support 2012-01-01 20:18:55 -08:00
Niko Matsakis
8319b5a252 add cap clause to pretty printer, with a test 2011-12-30 16:25:55 -08:00
Graydon Hoare
bfc9a499c2 Print usage messages to rustc and rustdoc when invoked with no args. Close #1394. 2011-12-30 15:26:49 -08:00
Niko Matsakis
aa5382bb13 split proto from fn_decl, as not all fn_decls know the proto.
this will address the (crashing) new test added.
2011-12-29 20:29:28 -08:00
Graydon Hoare
36c55b20a8 Add support in lexer for utf8 identifiers. No NFKC logic in char yet. 2011-12-29 14:45:18 -08:00
Lenny222
d07c6e8a0e list: use predicate to enforce non-empty requirement 2011-12-29 21:24:03 +01:00
Marijn Haverbeke
816b0ac8ae Box ty_param_bounds_and_ty
It contains a vector, which shouldn't be copied all the time.
2011-12-29 09:29:08 +01:00
Graydon Hoare
2ed1005bd7 On second thought, re-land pull request #1385 with backquotes; easier to grep, can change in the future. 2011-12-28 13:41:31 -08:00
Graydon Hoare
f2c88c1b80 Merge pull request #1385 from Lenny222/quotes
Use singlequotes in the typechecker error messages too, to distinguish code and English
2011-12-28 13:08:28 -08:00
Graydon Hoare
51227c1e8a Merge pull request #1389 from erickt/master
misc standard library additions
2011-12-28 13:05:02 -08:00
Marijn Haverbeke
9236fdf39f Move the kind datatype to middle::ty
The AST no longer references it.
2011-12-28 21:18:16 +01:00
Marijn Haverbeke
1ed6a27548 Change representation of type params to handle interface bounds
Issue #1227
2011-12-28 21:18:16 +01:00
Erick Tryzelaar
5d84652f51 comp: minor cleanup. 2011-12-28 11:19:41 -08:00
Stefan Plantikow
7fd62bb2b5 Made matching machine types equal to float, int, uint (fixes #1376) 2011-12-28 18:02:49 +01:00
Lenny222
0b9751b141 Use singlequotes in the typechecker too, to distinguish code and English 2011-12-25 20:27:09 +01:00
Marijn Haverbeke
46cddffb8f Go back to a single visit_fn function in visit.rs 2011-12-23 18:45:02 +01:00
Marijn Haverbeke
711ff657e2 Get rid of visit_fn_block in visit.rs
It seems redundant and error-prone.
2011-12-23 18:24:49 +01:00
Marijn Haverbeke
25e65239ad Check impls methods against the type of their iface. 2011-12-23 18:11:36 +01:00
Marijn Haverbeke
057617c665 Parse iface items and interface references in impl items.
The (temporary) syntax is

    iface seq<T> {
        fn len() -> uint;
        fn iter(f: block(T));
    }

    // The 'blah<T>' can be left of to default the name of the
    // impl to seq<T>. The 'of seq<T>' can be left off when
    // not implementing a named interface.
    impl blah<T> of seq<T> for [T] {
        fn len() -> uint { vec::len(self) }
        fn iter(f: block(T)) { for x in self { f(x); } }
    }
2011-12-23 18:09:25 +01:00
Marijn Haverbeke
9292744959 Use the same type of record in ty::ty_fn and ty::method
Removes some more code duplication.
2011-12-23 16:11:35 +01:00
Marijn Haverbeke
970f5cc0e4 Make ast::ty_method hold a fn_decl, rather than duplicating its fields 2011-12-23 13:32:17 +01:00
Graydon Hoare
f0dfbe7b1b Register new snapshots, purge log_err and log_full in favour of log(...). 2011-12-22 17:53:53 -08:00
Graydon Hoare
ccb5b6fb25 Switch core macros to expand to log(level, ...). 2011-12-22 16:36:55 -08:00
Graydon Hoare
389329ef1e Merge all 3 log syntaxes, tidy up residual misuses. 2011-12-22 16:14:00 -08:00
Graydon Hoare
dcd771cd48 Merge branch 'master' of github.com:graydon/rust 2011-12-22 14:50:52 -08:00
Graydon Hoare
8b580954fe Register snapshots and switch logging over to use of log_full or #error / #debug. 2011-12-22 14:42:52 -08:00
Marijn Haverbeke
eacb629442 Work around unwinding bug
See issue #1374
2011-12-22 20:38:09 +01:00
Marijn Haverbeke
0490c36143 Unify some data structures in syntax::ast that were doing the same thing
As a preparation to removing some duplication in typeck.
2011-12-22 20:18:56 +01:00
Graydon Hoare
3b61064631 Revert all of yesterday's snapshots and try again. Cursed! 2011-12-22 10:30:04 -08:00
Graydon Hoare
47d27af228 Merge branch 'master' of github.com:graydon/rust 2011-12-22 09:30:03 -08:00
Marijn Haverbeke
07d7f828cd Fix tag_var_cache to cache crate-external tags
And to not return a bogus mutable box.
2011-12-22 16:23:49 +01:00
Marijn Haverbeke
44f921c8a9 Do not use == and != to compare ty::t values
Issue #828
2011-12-22 15:05:38 +01:00
Marijn Haverbeke
3ee630bbee Add ty::new_ty_hash, clean up comparing of ty::t's 2011-12-22 15:05:38 +01:00
Marijn Haverbeke
e2e077c831 Remove trivial cast checker
I consider the added complexity not justified at this point, and it
interacts badly with the patches for issue #828. Feel free to discuss.
2011-12-22 15:04:00 +01:00
Graydon Hoare
047b02d5bc More flailing on log syntax due to call-expr ambiguity in previous attempt. 2011-12-21 18:05:08 -08:00