Commit Graph

586 Commits

Author SHA1 Message Date
Marijn Haverbeke
b3f06c7d54 Stop passing spans to middle::trans functions that don't need them
Removes a bunch of (eventually) unused arguments. Makes span passing to debuginfo
explicit, instead of relying on the (usually incorrect) spans held in the contexts.

Closes #1439
2012-01-27 13:20:36 +01:00
Marijn Haverbeke
b80f0a3c9f Use the method name 'unary-' for overloading negation
It's less likely to clash with something than 'neg'.

Issue #1520
2012-01-27 10:06:53 +01:00
Brian Anderson
9f80a17c0e rustc: Add pprust::res_to_str 2012-01-26 20:54:36 -08:00
Marijn Haverbeke
c590bdeea4 Make re-exporting of impls work
Closes #1438
2012-01-26 18:58:35 +01:00
Marijn Haverbeke
6bead0e4cc Use operator names for operator methods
The methods used to implement operators now simply use
the name of the operator itself, except for unary -, which is called
min to not clash with binary -. Index is called [].

Closes #1520
2012-01-26 15:52:28 +01:00
Marijn Haverbeke
888262b337 Allow operator overloading of the indexing operator
The method `op_index` (which takes a single argument) is used for
this.

Issue #1520
2012-01-26 15:23:11 +01:00
Marijn Haverbeke
87b064b249 First stab at operator overloading
When no built-in interpretation is found for one of the operators
mentioned below, the typechecker will try to turn it into a method
call with the name written next to it. For binary operators, the
method will be called on the LHS with the RHS as only parameter.

Binary:

    +   op_add
    -   op_sub
    *   op_mul
    /   op_div
    %   op_rem
    &   op_and
    |   op_or
    ^   op_xor
    <<  op_shift_left
    >>  op_shift_right
    >>> op_ashift_right

Unary:

    -   op_neg
    !   op_not

Overloading of the indexing ([]) operator isn't finished yet.

Issue #1520
2012-01-26 14:25:06 +01:00
Marijn Haverbeke
1792d9ec96 Use string stored in codemap for pretty-printing comments and literals
Closes #1665
2012-01-26 10:52:08 +01:00
Marijn Haverbeke
ec4d05de3b Remove ty_native_fn
It was being used as a clumsy synonym of ty_fn.
2012-01-26 10:37:50 +01:00
Brian Anderson
b7b8455e54 rustc: Add pprust::variant_to_str 2012-01-25 17:22:08 -08:00
Brian Anderson
2999479a2d rustc: Allow attributes on enum variants. Closes #1663 2012-01-25 16:24:06 -08:00
Kevin Atkinson
60a146bf0f Correctly increment sess.byte_pos. 2012-01-25 16:01:58 -07:00
Kevin Atkinson
c5e03e0e59 Keep source file around after parsing.
Specifically box the string (to avoid unnecessary copies) and store it
in codemap::filemap.

Remove the hack in driver::diagnostic that rereads the source from the
file and instead just get the source from the filemap.

(This commit is also a prerequisite for issue #1612)
2012-01-25 16:00:47 -07:00
Marijn Haverbeke
2d4d8e8bdb Implement implicit self type parameters for ifaces
Closes #1661
2012-01-25 20:47:11 +01:00
Marijn Haverbeke
76aabbe99d Rename tag to enum throughout the compiler
This should reduce confusion of people trying to read the code.
2012-01-25 14:34:31 +01:00
Marijn Haverbeke
8420f8c52e Repair zero-variant tags
The parser no longer parsed them.
2012-01-25 14:10:33 +01:00
Marijn Haverbeke
2f0f6c782a Add bit-shifting ops to ast_util::eval_const_expr
Closes #1659
2012-01-25 13:19:32 +01:00
Patrick Walton
9ecd5ee81d rustc: Split diagnostics into "span diagnostics" and "diagnostics".
The former contain a codemap (which is per-crate), and the latter don't. This
will be useful in order to allow more than one crate to be compiled in one run
of the compiler.
2012-01-24 21:42:54 -08:00
Brian Anderson
19cd9686e7 comp: Fix syntax error in parser 2012-01-24 14:03:25 -08:00
Joshua Clark
ceae107e14 Added to bad_expr_word_table reserved words 2012-01-23 23:19:00 -06:00
Niko Matsakis
5e13d19cc0 s/block()/fn()/g 2012-01-23 19:06:33 -08:00
Kevin Atkinson
4795e19d6d When replacing a pattern variable in macro expansion use the span of
the replacement and not the span of the pattern variable.

Fixes issue #1448, and #1387.
2012-01-23 17:37:15 -08:00
Kevin Atkinson
20ab47fe49 Allow ast_fold_precursor to change the span.
This involved changing the prototype for the callbacks to thread the
span though.  A wrapper function, fold::wrap, can be used to wrap the
old style callbacks.
2012-01-23 17:37:15 -08:00
Kevin Atkinson
ad21d9c64a Don't reset the chpos/byte_pos to 0 in new_parser_from_source_str.
This correctly fixes issue #1362.

chpos/byte_pos are now the offsets within a particular file, but
rather the offsets within a virtual file with is formed by combing all
of the modules within a crate.  Thus, resetting them to 0 causes an
overlap and hence, bogus source locations.

Fix #1362 by moving chpos/byte_pos to parse_sess so that
new_parser_from_source_str has access to them and hence can chose an
initial value that is not already been used in the crate.

Note that the trigger for bug 1361 was that syntax/ext/expand.rs calls
parse_expr_from_source_str (which calls new_parser_from_source_str)
using the same codemap as the current crate (and hence causing overlap
with files in the crate as new_parser_from_source_str resets the
chpos/byte_pos to 0).
2012-01-23 17:37:15 -08:00
Kevin Atkinson
355edf13e7 Change "file" of injected string from "-" to "<anon>", less confusing
that way.
2012-01-23 17:37:14 -08:00
Kevin Atkinson
1625a4320d Revert "rustc: Exclude stdin from codemap files when lookup_pos".
Need a better fix, right now it is just causing even more confusion,
for example in issue #1448 and #1387.

This reverts commit 1e4de33374.
2012-01-23 17:37:14 -08:00
Tim Chevalier
9dc59e1506 Export all enum variants by default; new syntax for selectively exporting variants
See issue 1426 for details. Now, the semantics of "export t;" where t is a tag are
to export all of t's variants as well. "export t{};" exports t but not its
variants, while "export t{a, b, c};" exports only variants a, b, c of t.

To do:
- documentation
- there's currently no checking that a, b, c are actually variants of t in the
 above example
- there's also no checking that t is an enum type, in the second two examples above
- change the modules listed in issue 1426 that should have the old export
semantics to use the t{} syntax

I deleted the test export-no-tag-variants since we're doing the opposite now,
and other tests cover the same behavior.
2012-01-23 15:48:08 -08:00
Graham Fawcett
7763b40c71 issue #1352: change param order on vec::init_elt, putting block in final position.
To match the init_fn() and init_fn_mut() changes.
2012-01-21 13:33:16 -08:00
Tim Chevalier
ba5cc236f7 WIP on issue 1426 (exporting all tags)
Support Lenny222's proposed syntax for exporting a tag without
its variants, or selected tags from a variant, in the AST and parser.
No support further down the line yet. Tests are xfailed.
2012-01-20 19:48:33 -08:00
Graydon Hoare
7b1a8f0a91 Additional ; to , changes, disable "tag" and ";" in parser. Close #1430. Close #1428. 2012-01-19 19:29:21 -08:00
Patrick Walton
a23f188bdb rustc: Stop parsing "tag" 2012-01-19 19:23:47 -08:00
Patrick Walton
59ebe6af18 rustc: Make the pretty printer output commas after enum variants. Update all tests accordingly. 2012-01-19 18:41:06 -08:00
Brian Anderson
991db34b5b rustc: Fix fun_to_str 2012-01-19 18:14:17 -08:00
Patrick Walton
c267821742 rustc: ";" to "," in enums 2012-01-19 18:04:25 -08:00
Patrick Walton
daaeac56b1 rustc: Fix long lines 2012-01-19 14:34:23 -08:00
Patrick Walton
bdb8f6cf52 rustc: "tag" -> "enum" 2012-01-19 14:24:03 -08:00
Niko Matsakis
882bea5b6d Rename fn*() to fn() as originally planned. 2012-01-19 07:11:50 -08:00
Niko Matsakis
1f0b3d2247 treat fn*() as fn&()
This is not my ideal way of going about things.  I'd prefer not
to have expressions typed as fn*(), for example, but I couldn't
get that to work together with inferring the modes of arguments
and other corner cases.
2012-01-19 07:10:59 -08:00
Tim Chevalier
5b028f527f Remove support for the '.' after a nullary tag in a pattern
(Commit also includes lots of changes to remove '.'s that a git
merge messed up, or else it was monkeys.)
2012-01-19 01:04:59 -08:00
Tim Chevalier
04a2887f87 Remove '.' after nullary tags in patterns
Does what it says on the tin.

The next commit will remove support for this syntax.
2012-01-18 23:17:34 -08:00
Tim Chevalier
8c97854c7d Allow any alternative (not just a block) to follow a nullary tag pattern 2012-01-18 21:29:02 -08:00
Tim Chevalier
209d8c854f allow dotless nullary patterns inside or-patterns 2012-01-18 21:29:02 -08:00
Tim Chevalier
a453197734 Another minor parser fix for nullary-tag patterns 2012-01-18 21:29:02 -08:00
Tim Chevalier
bf83fd3091 Allow nullary tag names to be qualified 2012-01-18 21:29:02 -08:00
Brian Anderson
3ebf7b42bd rustc: Assert that the parser doesn't assign node id 0
It is reserved for indicating the crate, but doesn't exist in the AST
2012-01-18 19:59:24 -08:00
Patrick Walton
1aaee20737 rustc: Accept commas to separate tag variants 2012-01-18 12:27:12 -08:00
Tim Chevalier
c3bc8fada8 Allow omission of the '.' after nullary tag patterns
This commit allows patterns like:

alt x { some(_) { ... } none { } }

without the '.' after none. The parser suspends judgment about
whether a bare ident is a tag or a new bound variable; instead,
the resolver disambiguates.

This means that any code after resolution that pattern-matches on
patterns needs to call pat_util::normalize_pat, which consults
an environment to do this disambiguation.

In addition, local variables are no longer allowed to shadow
tag names, so this required changing some code (e.g. renaming
variables named "mut", and renaming ast::sub to subtract).

The parser currently accepts patterns with and without the '.'.
Once the compiler and libraries are changed, it will no longer
accept the '.'.
2012-01-17 10:08:16 -08:00
Kevin Atkinson
e1c50c4410 Don't evaluate discriminator value constants when parsing.
Remove disr_val from ast::variant_ and always use ty::variant_info
when the value is needed.  Move what was done during parsing into
other passes, primary typeck.rs.  This move also correctly type checks
the disr. value expression; thus, fixing rustc --pretty=typed when
disr. values are used.
2012-01-16 11:19:33 +01:00
Marijn Haverbeke
96f1eda6d0 Be more careful about pretty-printing literals
Before, literal printing would basically get derailed completely when
a literal was encountered that did not end up being printed. This
caused the strangeness seen in #1532.

Also cleans up pretty-printing of discriminants a little.

Closes #1510
Closes #1532
2012-01-16 11:19:32 +01:00
Kevin Atkinson
2d36a71aee Update pretty printer to print out disr. values.
Partly fixes issue #1510.  "rustc --pretty=typed" fails.
2012-01-16 11:19:32 +01:00