77 Commits

Author SHA1 Message Date
Marijn Haverbeke
b24f978011 Drop arguments on the caller side, not the callee
This makes it easier for the caller to optimize the take/drop away for
temporary values, and opens up new possibilities for alias handling.

Breaks tail calls.
2011-08-22 10:16:09 +02:00
Brian Anderson
518dc52f85 Reformat
This changes the indexing syntax from .() to [], the vector syntax from ~[] to
[] and the extension syntax from #fmt() to #fmt[]
2011-08-20 11:04:00 -07:00
Brian Anderson
4fc3618233 Change ast::ty_ivec, ty::ty_ivec to ty_vec 2011-08-18 14:11:06 -07:00
Brian Anderson
c2d2dad093 Remove ast::ty_vec 2011-08-18 13:09:50 -07:00
Marijn Haverbeke
cd440d338e Remove or _-prefix all unused function arguments
This should make the compilation process a bit less noisy.
2011-08-18 10:02:13 +02:00
Erick Tryzelaar
af21a27002 Port the compiler to the expr foo::<T> syntax. 2011-08-16 15:05:56 -07:00
Erick Tryzelaar
e4a0f997fb Port the compiler to the typaram foo<T> syntax. 2011-08-16 15:05:56 -07:00
Brian Anderson
f05a91a0dc Rename std::ivec to std::vec 2011-08-16 10:36:19 -07:00
Lindsey Kuper
f91351aaf6 The wonky for...in... whitespace was bothering me. Sorry! 2011-08-15 22:19:50 -07:00
Marijn Haverbeke
29ea87542f Tuple fields are immutable 2011-08-15 12:08:05 +02:00
Marijn Haverbeke
9538b00363 Tuple types back, not constructable yet 2011-08-15 11:40:38 +02:00
Patrick Walton
19424dfab6 rustc: Add unique pointers to the set of types we support 2011-08-10 17:24:22 -07:00
Erick Tryzelaar
8b15045224 Port the compiler to the ivec type [T] syntax. 2011-08-09 15:53:26 -07:00
Patrick Walton
59e9b629c0 Revert "rustc: Introduce the concept of inline to the AST"
This reverts commit 9b9170f9fe2e4701255a5bd0630c203409d8e934.
2011-08-05 11:38:06 -07:00
Patrick Walton
9b9170f9fe rustc: Introduce the concept of inline to the AST 2011-08-05 11:33:48 -07:00
Michael Sullivan
c5d55ef918 Prohibit assignment to upvars in lambdas. Closes #805. 2011-08-04 19:35:44 -07:00
Marijn Haverbeke
d08c0f0ec1 Make ast::pat_bindings an iterator
And use it to get rid of some repetetive code
2011-08-03 10:26:41 +02:00
Marijn Haverbeke
985c32ef4c Partially implement destructuring locals
You can now say

    let {bcx, val} = some_result_returner();

Similar for loop variables. Assigning to such variables is not safe
yet. Function arguments also remain a TODO.
2011-08-01 17:51:37 +02:00
Graydon Hoare
3e63fdc4c9 Thread kinds into the type system. Don't quite activate yet, since it breaks stdlib and snapshot isn't ready to compile modified stdlib. 2011-07-28 13:29:39 -07:00
Marijn Haverbeke
f379c97913 Don't allow globals or immutable locals to be passed by mut alias
Closes #747
2011-07-27 17:19:46 +02:00
Marijn Haverbeke
6e2a7bff7f Fix damage done by the pretty-printer 2011-07-27 15:54:33 +02:00
Marijn Haverbeke
df7f21db09 Reformat for new syntax 2011-07-27 15:54:33 +02:00
Marijn Haverbeke
2c1250780d Remove tuple support from the compiler 2011-07-26 15:19:56 +02:00
Marijn Haverbeke
aea537779e Remove all uses of tuples from the compiler and stdlib 2011-07-26 14:06:02 +02:00
Michael Sullivan
25a89e068d Rename the block type to be blk also. Sorry. 2011-07-25 14:18:07 -07:00
Michael Sullivan
6bcdb48e35 Disallow block as a variable name in preparation for it becoming a keyword. 2011-07-25 13:42:38 -07:00
Marijn Haverbeke
b9b674abe7 Start adding support for multiple variable declarations per stmt
This adds parser support and most of the machinery for

    auto x = 10, y = 20;

However, the above still goes wrong somewhere in typestate, causing
the state checker to believe only the last variable in the list is
initialized after the statement.

Tim, if you have a moment, could you go over the changes to the tstate
code in this patch and see where I'm going wrong?

Multi-var-decls without the typestate extension

Add a loop
2011-07-22 17:51:26 +02:00
Marijn Haverbeke
93ffed4c16 Fix unboxing in alias pass
The alias checker would only deref once for autoderef, and only deref
boxes. It should now do the right thing. Closes #725.
2011-07-22 09:29:01 +02:00
Michael Sullivan
f8bb5a3b58 Make ty::ctxt be boxed.
Arguably we should leave ty_ctxt as a bare rec and just always work with
boxes of it. This winds up being simpler and prettier, though.
2011-07-21 17:39:06 -07:00
Patrick Walton
917afa4cc9 rustc: Remove a bunch of exterior vectors 2011-07-15 11:38:46 -07:00
Marijn Haverbeke
6cb5c0980a box patterns, expect for the trans part 2011-07-13 10:50:16 +02:00
Marijn Haverbeke
6914d32acc Do not allow moving out of obj fields, properly check move inits
Closes #591
2011-07-13 10:23:13 +02:00
Patrick Walton
79ce5a4614 rustc: Implement pointer dereference; add a test case 2011-07-11 15:19:16 -07:00
Marijn Haverbeke
7595fe5153 Implement record patterns
Closes #469.
2011-07-11 15:32:41 +02:00
Marijn Haverbeke
12cb128a0a Move visit to newtype-style nominal type
This makes getting the function fields out of the visitor less
cumbersome and more efficient (no take/drop).
2011-07-11 13:53:50 +02:00
Marijn Haverbeke
86ee3454a1 Implement or-patterns in case clauses
You can now say

    expr_move(?dst, ?src) | expr_assign(?dst, ?src) { ... }

to match both expr_move and expr_assign. The names, types, and number
of bound names have to match in all the patterns.

Closes #449.
2011-07-11 11:01:54 +02:00
Patrick Walton
0e2fff5337 rustc: Change lots of AST nodes to use interior vectors 2011-07-07 12:53:17 -07:00
Marijn Haverbeke
007a736642 Improve handling of move and swap by alias checker
Closes issue #541.
Closes issue #591
2011-07-07 10:37:19 +02:00
Marijn Haverbeke
7661c08496 Remove temporary stdlib placeholders, use actual stdlib functions
(Possible now that a snapshot took place.)
2011-07-06 16:46:17 +02:00
Marijn Haverbeke
6fd6fdea93 Move everything syntax-related to syntax/, break deps on rest of compiler
src/comp/syntax is currently just a sub-module of rustc, but it will,
in the near future, be its own crate. This includes:

 - The AST data structure
 - The parser
 - The pretty-printer
 - Visit, walk, and fold
 - The syntax extension system
 - Some utility stuff that should be in the stdlib*

*) Stdlib extensions currently require a snapshot before they can be
   used, and the win build is very broken right now. This is temporary
   and will be cleaned up when one of those problems goes away.

A lot of code was moved by this patch, mostly towards a more organized
layout. Some package paths did get longer, and I guess the new layout
will take some getting used to. Sorry about that!

Please try not to re-introduce any dependencies in syntax/ on any of
the other src/comp/ subdirs.
2011-07-05 15:57:21 +02:00
Marijn Haverbeke
fb10829aef Switch the alias checking pass to use span_err instead of span_fatal
It'll now spit out all problems it finds, and only abort after
the whole pass has run.
2011-07-04 22:00:07 +02:00
Marijn Haverbeke
b1423be1d6 Move the ids of pat AST nodes into their struct
Just like it was done with items and exprs. Simplifies some code.
2011-07-04 22:00:06 +02:00
Marijn Haverbeke
432e5e9f7f Allow dereferencing of single-variant, single-argument tag values
(Using the * operator.)

This makes tags more useful as nominal 'newtype' types, since you no
longer have to copy out their contents (or construct a cumbersome
boilerplate alt) to access them.

I could have gone with a scheme where you could dereference individual
arguments of an n-ary variant with ._0, ._1, etc, but opted not to,
since we plan to move to a system where all variants are unary (or, I
guess, nullary).
2011-07-01 17:51:47 +02:00
Michael Sullivan
7b1b5d5a8a Implement autoderef for function calls.
This is important since we are going to be making functions noncopyable
soon, which means we'll be seeing a lot of boxed functions.
(*f)(...) is really just too heavyweight.

Doing the autodereferencing was a very little bit tricky since
trans_call works with an *lval* of the function whereas existing
autoderef code was not for lvals.
2011-07-01 12:39:58 +02:00
Patrick Walton
108cc4e0ed rustc: Change function argument types to interior vectors 2011-06-30 16:11:39 -07:00
Tim Chevalier
d8db9a0fe1 Kill unused variables 2011-06-30 12:37:30 -07:00
Marijn Haverbeke
86f16b90cd Support type parameters in resources
Some rather dodgy code was added to trans in the process. I'd love to
discuss it with someone who knows more about types during translation.
2011-06-30 18:36:12 +02:00
Michael Sullivan
1d05718c2d Extend visit to use visit_fn to visit fn expressions. 2011-06-29 09:04:00 -07:00
Michael Sullivan
b944d8d72e Require that both sides of a swap be lvals. 2011-06-28 17:28:06 -07:00
Marijn Haverbeke
d730bb730a Make it possible to use * to dereference a resource 2011-06-28 18:00:05 +02:00