Commit Graph

604 Commits

Author SHA1 Message Date
Graydon Hoare
b6971d94df Consolidate formatting functions a bit more. 2011-05-31 11:00:47 -07:00
Graydon Hoare
b48cab962a Add span to field to catch per-field comments in rec exprs. 2011-05-31 11:00:47 -07:00
Graydon Hoare
d12ea39896 Improve comment handling in pp. 2011-05-31 11:00:47 -07:00
Brian Anderson
81fc2d8728 rustc: Remove unneeded type params from alt patterns 2011-05-31 01:23:53 -04:00
Michael Sullivan
a7a42c24be Change the syntax for RECV from "var <- port" to "port |> var". 2011-05-27 12:01:20 -07:00
Michael Sullivan
2119e3b5b9 Fix missing bump in RECV lexer case. 2011-05-27 12:01:20 -07:00
Michael Sullivan
9c79200a7f Pretty print the new RECV token... 2011-05-27 12:01:20 -07:00
Michael Sullivan
ea16e582eb Remove parser support for recv as an initializer in preparation for changing the recv syntax. 2011-05-27 12:01:20 -07:00
Michael Sullivan
55b40e6894 Lex '|>' as the RECV token. 2011-05-27 12:01:20 -07:00
Paul Stansifer
40fe44d23e "import module::*;" now works. 2011-05-27 02:42:33 +00:00
Paul Stansifer
f11f846ead Parsing and folding changes for globbed imports. 2011-05-27 02:42:32 +00:00
Tim Chevalier
250643c549 Remove unused imports 2011-05-26 18:01:48 -07:00
Graydon Hoare
9f95538462 Remove redisue of unused fields from 'ann'. 2011-05-26 17:26:59 -07:00
Graydon Hoare
2561b01211 Remove residual uses of fold, and fold itself. 2011-05-26 17:16:54 -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
Marijn Haverbeke
86d51ec24b Get test-pass/utf8.rs to run
This involved a small fix to the unicode-escape character lexing and
to the pretty-printer.
2011-05-23 23:25:55 +02:00
Tim Chevalier
467b938ea8 Merge remote-tracking branch 'graydon/master' into typestate_4 2011-05-20 18:23:03 -07:00
Tim Chevalier
fed0486c33 Annotate erroring functions in session and parser 2011-05-20 18:20:54 -07:00
Lindsey Kuper
c3410bf927 More work on anonymous objects. 2011-05-20 17:59:56 -07:00
Tim Chevalier
a08a376d6e Make controlflow part of a function type
Change ty_fn to have a controlflow field. A 'controlflow' is
essentially a bit of data that says whether or not this function
never returns to the caller (if it never returns, that means it calls
"fail" or another "never-returns" function on every control path).

Also add syntax for annotating functions that never return:

fn foo() -> ! {
   fail;
}

for example. Functions marked with ! implicitly have a result type of
ty_bot, which is a new type that this commit also adds.
2011-05-20 16:57:37 -07:00
Patrick Walton
7e43a31f08 rustc: Move the interner to a new module intended to be used for general data structures 2011-05-20 13:57:53 -07:00
Graydon Hoare
7f938f4945 Move the ty_item_table into ty::ctxt.items, move variant_info to ty, and start sketching the contains_pointer property on types. 2011-05-19 17:21:36 -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
Tim Chevalier
bb594a03a1 remove now-unused ts field from ann 2011-05-19 11:40:16 -07:00
Patrick Walton
5047ab0b0c rustc: Flatten annotations 2011-05-17 13:55:32 -07:00
Marijn Haverbeke
a90df393f9 Alias-ify the parser and lexer
This only shaves a measly 19k off the rustc binary... but hey, every
little thing helps.
2011-05-17 20:45:49 +02:00
Marijn Haverbeke
09d8ef8d51 Finally rename std::_xxx to std::xxx
Except for _task, which is still a keyword.
2011-05-17 20:41:41 +02: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
Graydon Hoare
ae030c5bf2 Begin vec() -> [] transition. 2011-05-16 17:04:12 -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
Patrick Walton
3ea3d9eed6 rustc: Make the parser use the interner 2011-05-16 14:54:10 -07:00
Marijn Haverbeke
b7d6934ef3 fix a long line that i forgot to commit 2011-05-14 13:27:21 +02:00
Marijn Haverbeke
ee45fd80c6 Mark IDENT tokens that are followed by ::
So that the type parser won't go off and try to parse a vec
type when it sees vec::init_op.
2011-05-14 12:57:42 +02:00
Graydon Hoare
6997adf763 Remove rustboot from the repository. 2011-05-13 18:38:28 -07:00
Lindsey Kuper
5679f5c55e 'with' no longer a token; whitespace police.
Plus renaming the anonymous objects test to a more descriptive name,
and XFAILing it because it doesn't work yet.
2011-05-13 17:37:01 -07:00
Lindsey Kuper
814b17352c Use new module namespace syntax. 2011-05-13 17:35:13 -07:00
Lindsey Kuper
d3242b9644 Bug fixes.
Fixed infinite loop on anonymous objects in parser; added
expr_anon_obj to walk.rs; fixed syntax of test case.
2011-05-13 17:35:13 -07:00
Lindsey Kuper
6c1c5b3948 More progress on anonymous objects.
Still segfaulting on the method-overriding.rs test, though.
2011-05-13 17:35:13 -07:00
Lindsey Kuper
6a53e39e71 Correct capitalization of "Option". 2011-05-13 17:35:12 -07:00
Lindsey Kuper
7c2979e26f Starting on support for anonymous objects. Just syntax so far. 2011-05-13 17:35:12 -07:00
Marijn Haverbeke
571afe71ba Safeguard against using statement or item keywords as value ids
This prevents insane things like 'auto while = 2', which would parse
in the previous revision, but then break when you tried to mutate it
with 'while = 10'.
2011-05-13 22:00:13 +02:00
Marijn Haverbeke
57ffa2a487 Make the parser more careful about keywords
Keywords are now only recognized in contexts where they are valid. The
lexer no longer recognizes them, all words are lexed as IDENT tokens,
that get interpreted by the parser.
2011-05-13 22:00:13 +02:00
Marijn Haverbeke
eb419fd8c7 Extend crate format to allow multiple definitions for a single name
The type/value namespace distinction pretty much works now. Module
namespace is up next.
2011-05-13 17:20:39 +02:00
Marijn Haverbeke
58ec5d1654 Move capture checking into resolve.rs
Drops capture.rs. The new algorithm also checks for captures function
arguments and obj fields.
2011-05-13 12:44:05 +02:00
Brian Anderson
02fdd2d2d9 Rename std.extfmt.CT to std.extfmt.RT to ct and rt
Temporarily duplicate the entire RT module, leaving it with the old name to
accomodate the stage0 compiler. Will be removed after the next snapshot.
2011-05-12 22:22:28 -04:00
Marijn Haverbeke
3816e57fd2 Downcase std modules again, move to :: for module dereferencing
This should be a snapshot transition.
2011-05-12 21:30:44 +02:00
Marijn Haverbeke
b1d3364487 Transitional change to make extfmt output lowercase module name 2011-05-12 21:30:43 +02:00
Marijn Haverbeke
6510f1ce7c Change module dereference syntax from . to ::
This will need to be a snapshot.
2011-05-12 21:30:35 +02:00
Marijn Haverbeke
dd9b6dccb4 Remove some truly wrong logic in parse_constrs 2011-05-12 15:52:12 +02:00
Marijn Haverbeke
358a1aeec9 Keep resolve data in external hash table, rather than embedded defs
One step closer to removing fold and having a single, immutable AST.
Resolve still uses fold, because it has to detect and transform
expr_field expressions. If we go through on our plan of moving to a
different syntax for module dereferencing, the parser can spit out
expr_field expressions, and resolve can move to walk.

(I am truly sorry for the things I did in typestate_check.rs. I expect
we'll want to change that to walk as well in the near future, at which
point it should probably pass around a context record, which could
hold the def_map.)
2011-05-12 15:40:21 +02:00
Marijn Haverbeke
2b36e40c58 Ensure ann tags are actually kept around during typechecking
This way, the tag assigned by the parser stays with the node.
I realize ann replacing is probably going away real soon, but
I needed this now for moving the resolve defs out of the AST.
2011-05-12 10:51:13 +02:00
Marijn Haverbeke
079512494f Properly lex block comments followed by EOF 2011-05-12 09:31:06 +02:00
Brian Anderson
353ed4bdff Remove unused filename parameter from lexer.new_reader 2011-05-11 23:38:20 -04:00
Brian Anderson
a459bcd127 Give the lexer a session so that it can fail more informatively 2011-05-11 23:04:16 -04:00
Marijn Haverbeke
14f1fe0e29 Remove mod indices from the AST
They are now created by the resolve pass, which is the only pass that
needs them, and kept internal to that pass.
2011-05-11 17:11:44 +02:00
Marijn Haverbeke
fe29d24b6e Get rid of arm indices 2011-05-11 15:26:36 +02:00
Marijn Haverbeke
5405f45274 Get rid of block indices 2011-05-11 15:10:24 +02:00
Marijn Haverbeke
7f222423b7 Use a const for crate-num-zero (ast.local_crate) 2011-05-11 12:59:34 +02:00
Marijn Haverbeke
e9c12ab1d0 Rewrite comp/middle/resolve.rs
* Cleans up the algorithm
 * Move first pass to walk (second still folds)
 * Support part of a type/value namespace split
   (crate metadata and module indices still need to be taught about this)
 * Remove a few blatant inefficiencies (import tables being recreated for
   every lookup, most importantly)
2011-05-11 12:32:37 +02:00
Patrick Walton
10c9266525 rustc: Number everything with an annotation 2011-05-10 17:27:59 -07:00
Graydon Hoare
4539f8a03c Alias-ify fold and its users, remove another 85kb. 2011-05-09 17:50:06 -07:00
Graydon Hoare
b00f3074d4 Remove boxes from token.t. 2011-05-09 14:17:45 -07:00
Patrick Walton
662e949540 rustc: Alias fix part 1 -- Separate out AST modes from typechecker modes, and introduce an "either value or alias" mode 2011-05-09 12:27:03 -07:00
Graydon Hoare
0f23bbac01 Fix GenericOS.getenv returning a raw str, return an Option.t[str] instead. 2011-05-06 16:30:39 -07:00
Marijn Haverbeke
a3ec0b1f64 Rename std modules to be camelcased
(Have fun mergining your stuff with this.)
2011-05-06 22:51:19 +02:00
Patrick Walton
2d9ccf3ae5 rustc: Add Rust intrinsic support to the crate metadata reader and writer 2011-05-05 14:35:18 -07:00
Tim Chevalier
e3a68e235c Bring back "pred" syntax for writing predicates for check
This commit reinstates the requirement that the predicate in a
"check" must be a manifest call to a special kind of function
declared with the new "pred" keyword instead of "fn". Preds must
have a boolean return type and can only call other preds; they
can't have any effects (as enforced by the typechecker).
The arguments to a predicate in a check expression must be
slot variables or literals.
2011-05-05 11:26:07 -07:00
Tim Chevalier
3060eadcba Check well-formedness of constraints
Check that the operand in a constraint is an explicit name,
and that the operands are all local variables or literals. Still need
to check that the name refers to a pure function.
2011-05-05 11:26:07 -07:00
Marijn Haverbeke
1f45dda9d2 Remove 'deprecated mutable...' from our code
This should make compilation a bit less noisy.
2011-05-05 20:19:43 +02:00
Graydon Hoare
d55fa2a9a3 Add #env syntax extension for plucking strings out of the compilation environment. 2011-05-04 19:05:32 -07:00
Graydon Hoare
cdb6822405 Add a structure for passing option flags around the compiler, put it in session, and use it. 2011-05-04 16:59:21 -07:00
Patrick Walton
ac8eb20224 rustc: Stub support for Rust intrinsics 2011-05-03 18:03:59 -07:00
Patrick Walton
2bc17adc29 Revert "Rename the "llvm" API to "llvm-intrinsic"" due to tinderbox bustage
This reverts commit 6871c245a6.
2011-05-03 17:50:37 -07:00
Graydon Hoare
b453c3c728 Start sketching --depend support in rustc. 2011-05-03 15:56:00 -07:00
Patrick Walton
6871c245a6 Rename the "llvm" API to "llvm-intrinsic" 2011-05-03 15:55:01 -07:00
Brian Anderson
ed40c85af5 Extract ast.is_exported from the resolve module 2011-05-02 22:07:36 -04:00
Patrick Walton
147a2d655f Un-revert "Use different syntax for checks that matter to typestate", fixing the problem.
This reverts commit d08b443fff.
2011-05-02 17:50:46 -07:00
Graydon Hoare
d08b443fff Revert "Use different syntax for checks that matter to typestate"
This reverts commit aa25f22f19. It broke stage2, not sure why yet.
2011-05-02 17:35:33 -07:00
Tim Chevalier
aa25f22f19 Use different syntax for checks that matter to typestate
This giant commit changes the syntax of Rust to use "assert" for
"check" expressions that didn't mean anything to the typestate
system, and continue using "check" for checks that are used as
part of typestate checking.

Most of the changes are just replacing "check" with "assert" in test
cases and rustc.
2011-05-02 12:16:29 -07:00
Graydon Hoare
a2f68b2d58 Intern metadata while writing, shrink stage1 from 12mb to 5.7mb. 2011-04-29 15:26:28 +00:00
Brian Anderson
2e12fbfc06 Support octal #fmt conversions 2011-04-26 20:20:17 -04:00
Patrick Walton
e102413aad rustc: Pass a "type context" around instead of directly passing the type store; prep for removing type annotations 2011-04-25 12:15:55 -07:00
Patrick Walton
e0eccaddb2 rustc: Thread the type store through everything that needs to access type structures 2011-04-22 17:00:46 -07:00
Patrick Walton
c7473c8260 rustc: Switch @ty.t to ty.t so that we can change it to a uint 2011-04-22 12:27:52 -07:00
Patrick Walton
c1335510d5 rustc: Eliminate the direct use of ty.t.struct 2011-04-22 12:09:09 -07:00
Marijn Haverbeke
2361b65526 Switch to binary search in codemap.lookup_pos
Patrick observed excessive slowness when looking up positions
in rustc. This might help.
2011-04-22 12:11:00 +02:00
Brian Anderson
540344acb9 Fix the signature of expr_ext
The extension body is just a string, not an expression.
2011-04-21 20:42:26 -04:00
Patrick Walton
5dbf554bb3 rustc: Pass a type store around, which does nothing yet 2011-04-21 14:30:27 -07:00
Patrick Walton
3dbfc9310a rustc: Make the parser never assign any types, not even ty_nil 2011-04-21 13:00:06 -07:00
Patrick Walton
cac7524c1a rustc: Remove all manual type construction outside ty.rs 2011-04-20 11:59:10 -07:00
Graydon Hoare
3d9cf15d0b Remove half-baked 'opacity' layer qualifier. 2011-04-19 14:00:04 -07:00
Graydon Hoare
d2bd07dcb0 Remove effect system from src. 2011-04-19 13:35:49 -07:00
Marijn Haverbeke
6511d471ba replace error logging with log_err in stdlib and rustc 2011-04-19 16:57:13 +02:00
Marijn Haverbeke
6d3a423094 add log_err to rustc 2011-04-19 16:57:13 +02:00
Brian Anderson
d4f1a48111 Support 0 flag in #fmt 2011-04-18 21:36:04 -04:00
Marijn Haverbeke
0bf75a203e collect crate meta info and ext crate names 2011-04-18 15:28:47 +02:00
Brian Anderson
9976bb93d6 Support the space flag in #fmt 2011-04-17 19:50:58 -04:00
Brian Anderson
86a43c24d6 Support + flag in #fmt 2011-04-17 18:19:26 -04:00
Brian Anderson
c7edcb3a72 Support #fmt precision for string types 2011-04-17 13:10:02 -04:00
Brian Anderson
96e3e29e88 Support left-justification in #fmt conversions 2011-04-16 19:43:29 -04:00
Brian Anderson
dcfdb02fab Make #fmt support explicit conversion widths 2011-04-16 18:01:17 -04:00
Graydon Hoare
232c450957 Work on destructors, not entirely functional yet (no tydesc integration). 2011-04-14 16:50:59 -07:00
Brian Anderson
99a697b56a Add support for upper-case hex and binary output to #fmt.
Only works for uints at present. Necessitated the addition of _str.to_upper.
2011-04-13 22:14:54 -04:00
Brian Anderson
5c0f4c1939 Add more commentary about ExtFmt 2011-04-13 22:14:40 -04:00
Brian Anderson
4844e1c08a Add support for printing uints as lower-case hex to ExtFmt.
Begin passing an ExtFmt.RT.conv parsed format description to each of the
ExtFmt.RT.conv* functions.
2011-04-13 22:14:24 -04:00
Brian Anderson
aebdef0cd6 Move #fmt conversion model into ExtFmt.CT namespace 2011-04-13 22:13:21 -04:00
Graydon Hoare
8e0ecb4d1a Lex numeric escapes, needed for lib-str.rs (which now passes). 2011-04-13 11:25:11 -07:00
Tim Chevalier
63e87c102d typestate_check can now handle expr_block, expr_if, and expr_binary
(caveat for the latter: it assumes that binary operations are strict;
a TODO is to detect or and and and correctly reflect that they're lazy
in the second argument). I had to add an ann field to ast.block,
resulting in the usual boilerplate changes.

Test cases that currently work (if you uncomment the typestate pass
in the driver) (all these are under test/compile-fail):

fru-typestate
ret-uninit
use-uninit
use-uninit-2
use-uninit-3
2011-04-12 19:03:52 -07:00
Patrick Walton
de0175abed rustc: Switch to indices for type parameters 2011-04-12 15:10:40 -07:00
Tim Chevalier
d7e8818414 Further work on typestate. Handles expr_rec and expr_assign now.
Also changed the ts_ann field on statements to be an ann instead,
which explains most of the changes.

As well, got rid of the "warning: no type for expression" error
by filling in annotations for local decls in typeck (not sure whether
this was my fault or not).

Finally, in bitv, added a clone() function to copy a bit vector,
and fixed is_true, is_false, and to_str to not be nonsense.
2011-04-12 14:31:46 -07:00
Brian Anderson
73eecbd0ca Factor out creation of calls into ExtFmt.RT 2011-04-11 21:55:03 -04:00
Brian Anderson
bba245f3e6 Add support for bool, char to extfmt.
XFAIL syntax-extension-fmt in rustboot.
2011-04-11 21:54:03 -04:00
Brian Anderson
37f87161cc Move ExtFmt compile-time functions into their own module 2011-04-11 21:51:23 -04:00
Brian Anderson
ce85b9eb7b Make ExtFmt call its own functions instead of others defined in std 2011-04-11 21:51:23 -04:00
Brian Anderson
d4d0144bcf Move extfmt parsing into standard library 2011-04-11 21:51:23 -04:00
Brian Anderson
5a36786634 Move the extfmt data model into the standard library. 2011-04-11 21:51:23 -04:00
Marijn Haverbeke
c0d0b717ee Fix codemap.lookup_pos
Previously, it would place every single location in the first
file of the crate that was parsed.
2011-04-09 01:57:48 +02:00
Marijn Haverbeke
1af3174fe3 Move to single-uint file-position representation.
This makes passing them around cheaper. There is now a table (see
front/codemap.rs) that is needed to transform such an uint into an
actual filename/line/col location.

Also cleans up the span building in the parser a bit.
2011-04-09 01:05:18 +02:00
Marijn Haverbeke
094d31f5e4 Make lexer buffer the whole file
This way, it won't have to go through a bunch of calls for each
byte fetched.
2011-04-09 01:05:18 +02:00
Lindsey Kuper
1092bbfff0 Support for self-calls that take arguments.
Nicer parsing of self-calls (expr_self_method nodes inside expr_call
nodes, rather than a separate expr_call_self) makes typechecking
tractable.  We can now write self-calls that take arguments and return
values (see: test/run-pass/obj-self-*.rs).
2011-04-07 14:26:34 -07:00
Marijn Haverbeke
39774e88b4 Add a very basic crate-dump utility
'rustc -ls [cratelib]' will now dump out a list of symbols defined by
the crate, as well as a short description of what they are.
2011-04-07 14:19:19 -07:00
Marijn Haverbeke
ac3026412b Revise EBML reader API
New one is less stateful, easier to work with.
2011-04-07 14:19:16 -07:00
Tim Chevalier
2e90bd94de Continued sketching out code for checking states against preconditions.
It's still sketchy. I added a typestate annotation field to statements
tagged stmt_decl or stmt_expr, because a stmt_decl statement has a typestate
that's different from that of its child node. This necessitated trivial
changes to a bunch of other files all over to the compiler. I also added a
few small standard library functions, some of which I didn't actually end
up using but which I thought might be useful anyway.
2011-04-06 17:58:18 -07:00
Lindsey Kuper
4fc8de1969 Last pieces of self-call support.
The last few pieces of the hack that lets us use trans.trans_call() to
translate self-calls, plus a fix for the parser buy that was
preventing self-call expressions from getting past parsing.
test/run-pass/obj-self.rs works now (as in it actually prints "hi!"
twice!).
2011-04-05 16:26:31 -07:00
Lindsey Kuper
b8bb2e118e Further on the path toward self-awareness.
Mostly:

  * Merciless refactoring of trans.rs so that trans_call can work for
    self-calls as well as other kinds of calls

Also:

  * Various changes to go with having idents, rather than exprs, in
    expr_call_self AST nodes
  * Added missing case for SELF token to token.to_str()
2011-04-05 14:54:48 -07:00
Graydon Hoare
70e5457d7c Make box prefix operator and box type carry mutability flag. 2011-04-04 15:44:15 -07:00
Graydon Hoare
0397c05f42 Support for passing native types through metadata/creader. 2011-04-01 17:04:51 -07:00
Patrick Walton
6dc452335a rustc: Get tag variants from the crate metadata 2011-04-01 13:02:44 -07:00
Tim Chevalier
3130348ee1 Started adding support for typestate checking.
I added a new field to the ast "ann" type for typestate information.
Currently, the field contains a record of a precondition bit vector and
postcondition vector, but I tried to structure things so as to make
it easy to change the representation of the typestate annotation type.
I also had to add annotations to some syntactic forms that didn't have
them before (fail, ret, be...), with all the boilerplate changes
that that would imply.

The main call to the typestate_check entry point is commented out and
the actual pre-postcondition algorithm only has a few cases
implemented, though the overall AST traversal is there. The rest of
the typestate algorithm isn't implemented yet.
2011-04-01 11:27:32 -07:00
Patrick Walton
c66edca83d rustc: Add a type annotation to tag items 2011-03-31 19:12:40 -07:00
Patrick Walton
bdea343879 rustc: Use the path index. Speeds up compilation a lot. 2011-03-31 18:28:59 -07:00
Patrick Walton
fffc5d3b3d rustc: Write out a path index as well 2011-03-31 18:28:59 -07:00
Graydon Hoare
1b65a61cad Couple minor bug fixes in creader, lib-bitv, int, rand, sort, sha1, uint and vec all work. 2011-03-31 15:57:36 -07:00
Patrick Walton
3c1de96cda rustc: Use the crate index to look up defs 2011-03-31 14:37:44 -07:00
Patrick Walton
3945ace520 rustc: Write out an index of definition info in crate metadata 2011-03-31 11:56:02 -07:00
Brian Anderson
50e354611f Remove redundant parser logic.
These cases are all dealt with in parse_expr_inner.
2011-03-31 14:52:29 +00:00
Marijn Haverbeke
6a75740e96 handle unterminated block comments and line comment at eof 2011-03-31 14:41:40 +00:00
Marijn Haverbeke
39f0656b4f Improve line comment positioning
This involved making ast.variant spanned.
2011-03-31 14:41:40 +00:00
Marijn Haverbeke
8a7ea941bb Support break and cont in pretty-printer 2011-03-31 14:41:40 +00:00
Marijn Haverbeke
f8393cc572 Add effect field to ast.ty_fn.
Still not used, except by the pretty-printer.
2011-03-31 14:41:40 +00:00
Marijn Haverbeke
e7e6f396d8 Preserve comments when pretty-printing.
The patch also includes a number of smaller fixes to the
pretty-printer that were encountered on the way.
2011-03-31 14:41:39 +00:00
Patrick Walton
ab8d200fb0 rustc: Read 'y' tags from external crates 2011-03-30 18:28:33 -07:00
Patrick Walton
cc59cea8b0 rustc: Thread an item-to-type mapping throughout the typechecking and translation phases 2011-03-30 17:28:06 -07:00
Patrick Walton
626bdaaa1f rustc: Parse parameter IDs in external crate metadata. Un-XFAIL lib-bitv.rs. 2011-03-29 17:25:55 -07:00
Patrick Walton
c67eb1a575 rustc: Partially resolve external module imports 2011-03-29 17:01:27 -07:00
Patrick Walton
6a5feffd6c rustc: Tolerate def id tags inside module tags. Fixes metadata reading. 2011-03-29 16:43:27 -07:00
Lindsey Kuper
55fbed3d8d Beginnings of support for magical self prefix; nothing profound happening yet. 2011-03-29 15:59:15 -07:00
Graydon Hoare
f6490a6f03 Ignore 'mutable foo' in plain field contexts. 2011-03-29 15:40:21 -07:00
Patrick Walton
94c061729b rustc: Resolve external modules and native modules to definition IDs as well 2011-03-29 14:46:42 -07:00
Graydon Hoare
734abe593d Teach trans to emit undefined references to 'use'd symbols. Can compile and run a simple 'use std;' example now. 2011-03-29 13:23:51 -07:00
Brian Anderson
2b27d12ce1 Add expr_spawn, spawn parsing, folding, typechecking, ty_task 2011-03-28 21:13:53 -07:00
Patrick Walton
2809e30d1d rustc: Parse types in external metadata 2011-03-28 16:49:26 -07:00
Patrick Walton
ace2c92a96 rustc: Populate the item types table with types of items from external crates; remove the redundant typeck.ty_and_params type on the way 2011-03-28 14:42:01 -07:00
Patrick Walton
62f4709953 rustc: Resolve def ids in external crates 2011-03-28 13:29:59 -07:00
Patrick Walton
81695a19f8 rustc: Add support for calling LLVM intrinsics as native functions 2011-03-28 08:24:58 -07:00
Marijn Haverbeke
6ecdc04788 Add support for break and cont to rustc
Testing proper cleanup is hampered by
https://github.com/graydon/rust/issues/293
2011-03-27 14:11:23 +02:00
Graydon Hoare
ac6e1131e9 Teach creader and metadata writer how to do ty.ty_type. 2011-03-26 17:35:51 -07:00
Patrick Walton
bea41aa7d8 rustc: Add a function to look up external item info in the item info table 2011-03-25 19:02:19 -07:00
Graydon Hoare
027368b885 Janitorial: move llvmext back to llvm module, as they're the same thing now. 2011-03-25 18:45:00 -07:00
Patrick Walton
24a75eeccc rustc: Parse definition IDs from crates; add a function to parse unsigned ints to the standard library 2011-03-25 18:35:30 -07:00
Patrick Walton
94c19a18ae rustc: Look up names in "use"d crates 2011-03-25 17:54:48 -07:00
Graydon Hoare
b2427509e2 Another go at changing compile-command, this time using RBUILD env var. 2011-03-25 15:07:27 -07:00
Graydon Hoare
3712ee68ad Sketch of wiring typeck up to creader. 2011-03-25 14:34:32 -07:00
Graydon Hoare
91c2b82b09 Revert "Bulk-edit compile commands in emacs chatter to point to assumed build/ dir off src root."
This reverts commit 846f2e2ba9.
2011-03-25 14:05:38 -07:00
Graydon Hoare
846f2e2ba9 Bulk-edit compile commands in emacs chatter to point to assumed build/ dir off src root. 2011-03-25 13:48:37 -07:00
Tim Chevalier
a47cd50dfb Parse FP literals without coercing to int. This allows parsing 64-bit
floats. However, if someone writes a literal that can't be represented
precisely in 64 bits, the front-end will accept it while the back-end
will (presumably) complain.
2011-03-25 11:20:30 -07:00
Patrick Walton
e2d6475308 rustc: Store cached crate metadata in the session 2011-03-25 11:11:21 -07:00
Brian Anderson
9ca7acb1f3 Update pretty printer for ports, channels, send and receive 2011-03-25 11:01:52 -07:00
Brian Anderson
ebc4df3c7a Implement local declarations with receive. Un-XFAIL decl-with-recv.rs. 2011-03-25 11:01:52 -07:00
Brian Anderson
71f058499a Refactor ast.local to make room for initialization via recv 2011-03-25 11:01:52 -07:00
Marijn Haverbeke
d4c3059e1e make lexer unicode-aware for strings and char literals 2011-03-25 08:23:00 -07:00
Marijn Haverbeke
a045514477 Start making the standard-lib utf-8 aware
Finally implements _str.is_utf8, adds from_chars, from_char, to_chars,
char_at, char_len, (push|pop|shift|unshift)_char. Also, proper
character I/O for streams.
2011-03-25 08:22:52 -07:00
Graydon Hoare
4e49ca8abd Start hooking resolve into creater. 2011-03-24 17:37:32 -07:00
Patrick Walton
af3d0d1848 rustc: Open "use"d crates; add a _vec.vec_from_buf() method along the way; XFAIL use-import-export.rs in rustc 2011-03-24 17:22:07 -07:00
Graydon Hoare
86f1ace55b Teach creader about reading ty_float, and trim trailing whitespace. 2011-03-24 11:50:45 -07:00
Lindsey Kuper
0b63512f4c Support for 'float' in type signatures. 2011-03-23 16:01:29 -07:00
Tim Chevalier
23e23bd762 Further support for floating-point. Literals with exponents work
and literals with the 'f32' or 'f64' suffixes work as well. In
addition, logging things with the f32 or f64 type works. (float is
still assumed to be a synonym for f64).
2011-03-22 17:31:27 -07:00
Tim Chevalier
caa22c9341 Started adding support for floating-point type, floating-point literals, and logging of floats. Other operations on float probably don't work yet. 2011-03-21 18:10:34 -07:00
Patrick Walton
3dec5b5e50 rustc: Remove uses of Unicode in type deserialization and fix vector-push operations 2011-03-21 12:03:34 -07:00
Patrick Walton
84c0d8638e rustc: Update type serialization and deserialization for the "mutable?" change 2011-03-21 11:44:08 -07:00
Marijn Haverbeke
86d05655b4 rustc: Merge in type serialization and deserialization
Signed-off-by: Patrick Walton <pcwalton@mimiga.net>
2011-03-21 11:35:04 -07:00
Graydon Hoare
4b946cea35 Modify native_item_fn to handle trailing linkage names that differ from the item name (used in win32 build of std.dll) 2011-03-20 20:18:19 -07:00
Patrick Walton
8b82a549bf rustc: When encountering "mutable" as a tycon, parse it, drop it on the floor, and emit a warning 2011-03-18 13:44:54 -07:00
Patrick Walton
2ef9c01ffc rustc: Implement "mutable?". Add a test case and XFAIL it in rustboot for now. 2011-03-18 11:49:47 -07:00
Patrick Walton
5eca7129e3 rustc: Switch mutability from being a type constructor to a field annotation 2011-03-17 17:39:47 -07:00
Patrick Walton
ed96688be5 rustc: Typo: mutabliity -> mutability 2011-03-17 16:39:10 -07:00
Graydon Hoare
54587bdccb Switch all vases of vec += elt to vec += vec. Prohibit former in rustboot. Tweak std lib vec fns in process. 2011-03-16 14:58:02 -07:00
Rafael Ávila de Espíndola
e65e1716a7 Revert 6fdb81fa17, it is causing failures in
the bots.
2011-03-16 11:46:51 -04:00
Patrick Walton
1d8b0e8f8a rustc: Remove the memory-managed interface to LLVM memory buffers; passing them around transfers ownership 2011-03-15 18:08:30 -07:00
Patrick Walton
6fdb81fa17 rustc: Open "use"d crates with the LLVM object file reader 2011-03-15 18:05:29 -07:00
Patrick Walton
71b6e602c5 rustc: Add an annotation for the crate definition to view_item_use 2011-03-15 17:33:05 -07:00
Patrick Walton
7d32f3d052 rustc: Add a stub crate reader module for "use" directives 2011-03-15 16:30:43 -07:00
Graydon Hoare
7f5bffc3ea Merge remote branch 'brson/recursive-elseif' 2011-03-14 16:59:04 -07:00
Brian Anderson
a309f74a94 Reorganize evaluation of expr_send/recv to put them closer to expr_assign, to which they are similar 2011-03-14 16:41:46 -07:00
Brian Anderson
f0842030f3 Fix typo in expr_recv parsing 2011-03-14 16:41:46 -07:00
Brian Anderson
7464237256 Add folding and type checking for ports and chans 2011-03-14 16:41:46 -07:00
Brian Anderson
292dac644f Parse receive expressions 2011-03-14 16:41:46 -07:00
Brian Anderson
80e0ebaa86 Parse port and chan types, constructors, send statements 2011-03-14 16:41:46 -07:00
Marijn Haverbeke
441697ab35 Extend stream functionality
Writer and reader streams now come with methods to write and read
little-endian numbers. Whether that is the right place for such
methods is debatable, but for now, that's where they live.
2011-03-14 14:57:13 -07:00
Marijn Haverbeke
c731d625fe Add basic file-system functionality
std.fs.list_dir will list the files in a directory, std.fs.file_is_dir
will, given a pathname, determine whether it is a directory or not.
2011-03-14 14:57:13 -07:00
Brian Anderson
bbb6836da0 Merge branch 'master' into recursive-elseif
Conflicts:

	src/comp/middle/typeck.rs
2011-03-13 19:40:25 -04:00
Graydon Hoare
ec7e84ae0d Preserve crate directives in the parsed crate. 2011-03-11 15:49:56 -08:00
Rafael Ávila de Espíndola
74d891517b reindex the block index. 2011-03-11 17:35:33 -05:00
Rafael Ávila de Espíndola
28d51e3fd2 Add support for indexing tags in blocks. 2011-03-11 17:12:25 -05:00
Rafael Ávila de Espíndola
0117cf2fc2 Handle resolving to native modules. 2011-03-10 21:33:53 -05:00
Patrick Walton
7454b53411 rustc: Build up a list of upvars inside foreach bodies 2011-03-10 16:49:00 -08:00
Rafael Ávila de Espíndola
4ca0259b20 Update the current id when we create sub parsers. 2011-03-10 17:36:41 -05:00
Graydon Hoare
0d3cec71a3 Fix eval typo (caught by Martin Hock). 2011-03-10 10:17:10 -08:00
Patrick Walton
4654faa67c rustc: Add a slot for explicit type parameter instantations to the typechecker's AST annotation 2011-03-08 12:42:56 -08:00
Brian Anderson
fa2525a7bd Remove old pretty-printer from rustc 2011-03-07 22:06:07 -05:00
Brian Anderson
9fc4db6b89 Merge branch 'master' into recursive-elseif
Conflicts:

	src/Makefile
	src/comp/front/ast.rs
	src/comp/front/parser.rs
	src/comp/middle/fold.rs
	src/comp/middle/trans.rs
2011-03-07 21:21:01 -05:00
Graydon Hoare
df3038e68b Parse opacity (and drop on the floor), so std.rc parses now. 2011-03-07 15:38:20 -08:00
Marijn Haverbeke
0624f9db4a Add a pretty-printer
Adds a -pp option to the compiler which will cause it to simply
pretty-print the given file.
2011-03-07 12:58:08 -08:00
Graydon Hoare
90f299e710 Permit view items in native modules. 2011-03-07 11:48:43 -08:00
Graydon Hoare
dfa85968c3 Stage the last compile fix to put out fire. Thanks git. 2011-03-07 10:33:04 -08:00
Graydon Hoare
44bceb84a7 Complain on unexpected native symbol, rather than failing with none-exhaustive match. 2011-03-07 10:02:01 -08:00
Marijn Haverbeke
1ce6cfbe7c use a precedence table for operator parsing 2011-03-07 15:32:11 +01:00
Brian Anderson
d39da6f978 Remove typestate workarounds 2011-03-06 15:13:35 -08:00
Graydon Hoare
d97c800e31 Make ret and fail stmts have 0 out-edges, Closes #250. 2011-03-05 20:05:02 +00:00
Graydon Hoare
596face274 Parse (and generally ignore) constraints and constrained types. 2011-03-04 14:19:48 -08:00
Graydon Hoare
02dff96b52 Parse meta directives in crates. 2011-03-04 11:28:40 -08:00
Brian Anderson
5876da00cf Remove some erroneous FIXMEs from #fmt parser 2011-03-02 22:05:19 -05:00
Graydon Hoare
fc722b17c9 Comment-out some logging chatter in extfmt. 2011-03-02 13:53:08 -08:00
Graydon Hoare
9e4943c922 Parse, add to AST, and otherwise ignore 'export' view items. Need to add support to resolve. 2011-03-02 13:50:42 -08:00
Brian Anderson
012c2d18d0 Finish #fmt string parsing. Completely untested. 2011-03-02 10:28:15 -08:00
Brian Anderson
4bc9052e13 Add debug logging for #fmt conv. Implement peek_num fn 2011-03-02 10:28:15 -08:00
Brian Anderson
77a0dc06a7 Whitespace cleanup 2011-03-02 10:28:15 -08:00
Brian Anderson
dbd90996ee Remove unused is_ext_expr 2011-03-02 10:28:15 -08:00
Brian Anderson
c1e6f5328c Make the expanded expression in expr_ext not optional 2011-03-02 10:28:15 -08:00
Brian Anderson
7cef1b3a0f Add pretty printing for expr_call, expr_path, and more literals 2011-03-02 10:28:14 -08:00
Brian Anderson
41a043303a Remove debug logging from extfmt 2011-03-02 10:28:14 -08:00
Brian Anderson
61edf544a2 Implement #fmt conversion for int and uint 2011-03-02 10:28:14 -08:00
Brian Anderson
f9144d5972 Start generating AST nodes for #fmt 2011-03-02 10:28:14 -08:00
Brian Anderson
1badf9316a Begin an AST pretty-printer 2011-03-02 10:28:14 -08:00
Brian Anderson
5e06ec977f Rewrite expand_syntax_ext to avoid a mysterious memory leak 2011-03-02 10:28:14 -08:00
Brian Anderson
fe5de6bfff Parse parameter types for fmt extension 2011-03-02 10:28:14 -08:00
Brian Anderson
1c60399257 Begin work on #fmt parsing 2011-03-02 10:28:14 -08:00
Brian Anderson
9528c34774 Begin implementing #fmt in rustc 2011-03-02 10:28:14 -08:00
Graydon Hoare
64ab5eaaf0 Parse (and ignore) dtors on objs. 2011-03-01 17:33:17 -08:00
Graydon Hoare
7cae0c8c4d Implement the gross rustboot hack for contextual parser access to the compilation environment. 2011-03-01 16:50:32 -08:00
Graydon Hoare
348c77c31b Populate default compilation environment as in rustboot. 2011-03-01 15:57:55 -08:00
Graydon Hoare
7a6ac1c000 Fix typo in crate directive evaluator. 2011-02-25 15:43:50 -08:00
Rafael Ávila de Espíndola
081c3aa76d Pass the abi of native functions all the way to codegen. 2011-02-25 15:58:08 -05:00
Rafael Ávila de Espíndola
f8f6f078c5 There are no native iterators (or at least they are not going to be supported
soon.).
2011-02-25 12:08:21 -05:00
Graydon Hoare
88f0463c2b Support the awful alt-else form in rustboot's cexp grammar, at least transiently. Remove in the future. 2011-02-24 17:17:39 -08:00
Graydon Hoare
dbf53b4c37 Connect the crate and source parsers together. 2011-02-24 17:00:24 -08:00
Graydon Hoare
9acf4b9127 Handle the mutant 'let'-block directive in rustboot, temporarily. 2011-02-24 16:42:04 -08:00