Commit Graph

1905 Commits

Author SHA1 Message Date
bors 248765a746 auto merge of #9135 : jbclements/rust/let-var-hygiene, r=erickt
Fixes issue #9110, changes field_ty element to Name, adds test case, improves fail error message
2013-09-12 09:51:02 -07:00
Alex Crichton 9a5f95a82c Implement a format_args!() macro
The purpose of this macro is to further reduce the number of allocations which
occur when dealing with formatting strings. This macro will perform all of the
static analysis necessary to validate that a format string is safe, and then it
will wrap up the "format string" into an opaque struct which can then be passed
around.

Two safe functions are added (write/format) which take this opaque argument
structure, unwrap it, and then call the unsafe version of write/format (in an
unsafe block). Other than these two functions, it is not intended for anyone to
ever look inside this opaque struct.

The macro looks a bit odd, but mostly because of rvalue lifetimes this is the
only way for it to be safe that I know of.

Example use-cases of this are:

* third-party libraries can use the default formatting syntax without any
  forced allocations
* the fail!() macro can avoid allocating the format string
* the logging macros can avoid allocation any strings
2013-09-12 00:36:54 -07:00
John Clements b9a8b3700b more helpful error message for ident comparison failure 2013-09-11 22:18:45 -07:00
bors 62166611e7 auto merge of #9061 : jakub-/rust/pretty-print-empty-impl, r=huonw 2013-09-11 19:16:00 -07:00
SiegeLord 8c5402fd36 Properly encode/decode structural variants. 2013-09-11 14:49:09 -04:00
bors f8cbf41064 auto merge of #9093 : pnkfelix/rust/fsk-remove-oldvisit, r=alexcrichton 2013-09-11 01:46:07 -07:00
Alex Crichton 11e9c48353 Flag unsafe blocks from format! as compiler-generated 2013-09-11 00:13:41 -07:00
Alex Crichton 19a6fabad8 Implement the notion of a "generated unsafe block"
This way syntax extensions can generate unsafe blocks without worrying about
them generating unnecessary unsafe warnings. Perhaps a special keyword could be
added to be used in macros, but I don't think that's the best solution.
2013-09-11 00:13:22 -07:00
John Clements 422cf1adc5 change type of ExprLoop and ExprBreak elts from ident->name.
Lots of downstream changes in librustc, should be infinitesimally faster.
2013-09-10 14:12:54 -07:00
bors 753d8c226c auto merge of #9088 : nikomatsakis/rust/issue-6304-AST-tree-not-DAG, r=catamorphism
Ensures that each AST node has a unique id. Fixes numerous bugs in macro expansion and deriving. Add two
representative tests.

Fixes #7971
Fixes #6304
Fixes #8367
Fixes #8754
Fixes #8852
Fixes #2543
Fixes #7654
2013-09-10 03:10:59 -07:00
Niko Matsakis a5ad4c3794 Delay assignment of node ids until after expansion. Ensures that each AST node
has a unique id. Fixes numerous bugs in macro expansion and deriving. Add two
representative tests.

Fixes #7971
Fixes #6304
Fixes #8367
Fixes #8754
Fixes #8852
Fixes #2543
Fixes #7654
2013-09-10 05:45:12 -04:00
bors 96da35611f auto merge of #9090 : jbclements/rust/let-var-hygiene, r=luqmana
This appears to fix issue #9049. It also re-enables the ICE check on comparing idents for equality; it appears that ICEs are better than seg faults.
2013-09-10 01:06:00 -07:00
Felix S. Klock II 8b00004871 Remove oldvisit.rs (yay!); part of #7081 refactoring. 2013-09-10 09:00:53 +02:00
bors 7820fb5ca9 auto merge of #9062 : blake2-ppc/rust/vec-iterator, r=alexcrichton
Visit the free functions of std::vec and reimplement or remove some. Most prominently, remove `each_permutation` and replace with two iterators, ElementSwaps and Permutations.

Replace unzip, unzip_slice with an updated `unzip` that works with an iterator argument.

Replace each_permutation with a Permutation iterator. The new permutation iterator is more efficient since it uses an algorithm that produces permutations in an order where each is only one element swap apart, including swapping back to the original state with one swap at the end.

Unify the seldomly used functions `build`, `build_sized`, `build_sized_opt` into just one function `build`.

Remove `equal_sizes`
2013-09-09 21:31:03 -07:00
John Clements 57f7abaf19 undo cowardly hiding of eq-check
I've reversed my thinking on this restrictive definition of eq after
two separate bugs were hidden by commenting it out; it's better to
get ICEs than SIGSEGV's, any day.

RE-ENABLING ICE MACHINE!
2013-09-09 20:50:41 -07:00
blake2-ppc c11ee0fb67 std::at_vec and vec: Unify build_sized, build_sized_opt into build
These functions have very few users since they are mostly replaced by
iterator-based constructions.

Convert a few remaining users in-tree, and reduce the number of
functions by basically renaming build_sized_opt to build, and removing
the other two. This for both the vec and the at_vec versions.
2013-09-10 05:50:11 +02:00
bors 8c7c0b41d7 auto merge of #9034 : catamorphism/rust/rustpkg-workcache, r=metajack
r? @metajack or @brson - This pull request makes rustpkg use the workcache library to avoid recompilation.
2013-09-09 20:16:02 -07:00
bors 059cbaadfa auto merge of #9005 : alexcrichton/rust/rusty-log, r=brson
Also redefine all of the standard logging macros to use more rust code instead
of custom LLVM translation code. This makes them a bit easier to understand, but
also more flexibile for future types of logging.

Additionally, this commit removes the LogType language item in preparation for
changing how logging is performed.
2013-09-09 10:41:05 -07:00
Tim Chevalier 02a0fb94ee rustpkg: Use workcache
rustpkg now uses the workcache library to avoid recompilation.
Hooray!
2013-09-08 20:05:12 -07:00
Jakub 7173b9d1b8 Fix pretty-printing of empty impl items 2013-09-08 22:44:24 +00:00
Huon Wilson 14183114e1 syntax: aesthetic improvements to the for desugaring. 2013-09-08 23:00:05 +10:00
Huon Wilson 07351b44c6 syntax: implement labelled breaks for for.
`for` desugars to `loop` so it is trivial to just desugar to `loop` while
retaining any label.
2013-09-08 22:08:01 +10:00
bors b609d022c4 auto merge of #9035 : alexcrichton/rust/fewer-clownshoes, r=huonw
This removes another large chunk of this odd 'clownshoes' identifier showing up
in symbol names. These all originated from external crates because the encoded
items were encoded independently of the paths calculated in ast_map. The
encoding of these paths now uses the helper function in ast_map to calculate the
"pretty name" for an impl block.

Unfortunately there is still no information about generics in the symbol name,
but it's certainly vastly better than before

    hash::__extensions__::write::_version::v0.8

becomes

    hash::Writer$SipState::write::hversion::v0.8

This also fixes bugs in which lots of methods would show up as `meth_XXX`, they
now only show up as `meth` and throw some extra characters onto the version
string.
2013-09-08 01:05:59 -07:00
Alex Crichton 13d33064a6 Remove even more usage of clownshoes in symbols
This removes another large chunk of this odd 'clownshoes' identifier showing up
in symbol names. These all originated from external crates because the encoded
items were encoded independently of the paths calculated in ast_map. The
encoding of these paths now uses the helper function in ast_map to calculate the
"pretty name" for an impl block.

Unfortunately there is still no information about generics in the symbol name,
but it's certainly vastly better than before

    hash::__extensions__::write::_version::v0.8

becomes

    hash::Writer$SipState::write::hversion::v0.8

This also fixes bugs in which lots of methods would show up as `meth_XXX`, they
now only show up as `meth` and throw some extra characters onto the version
string.
2013-09-06 23:56:17 -07:00
John Clements eabeba3ef3 added index to test cases, more debugging output 2013-09-06 13:35:14 -07:00
John Clements 1ecc1e51c0 quote_* macros no longer need to be capturing
This is actually almost a problem, because those were my poster-child
macros for "here's how to implement a capturing macro." Following this
change, there will be no macros that use capturing; this will probably
make life unpleasant for the first person that wants to implement a
capturing macro. I should probably create a dummy_capturing macro,
just to show how it works.
2013-09-06 13:35:14 -07:00
John Clements 4664d3320d comment fix 2013-09-06 13:35:14 -07:00
John Clements 6c294ba538 add test case, cleanup 2013-09-06 13:35:13 -07:00
John Clements fe1d21caec add display_sctable fn to ast_util 2013-09-06 13:35:13 -07:00
John Clements 8330411688 fixed a bug that caused double-expand-traversal of macros that expand into modules. 2013-09-06 13:35:13 -07:00
John Clements fddc815ada WIP: adding mark-cancelling for macro_rules 2013-09-06 13:35:13 -07:00
John Clements e681e7843e added string_to_tts 2013-09-06 13:35:13 -07:00
John Clements 985a92ec12 comments 2013-09-06 13:35:13 -07:00
John Clements 1a06584117 comment on hygienic context extension train fns 2013-09-06 13:35:13 -07:00
John Clements dc7f3df27f awesome new bug! added test case 2013-09-06 13:35:12 -07:00
John Clements 7b548e7180 expose mtwt_marksof for testing 2013-09-06 13:35:12 -07:00
John Clements 7dca301cf4 ident->name 2013-09-06 13:35:12 -07:00
John Clements dbf4e19ea5 remove unneeded imports, clean up unused var warnings 2013-09-06 13:35:12 -07:00
John Clements 60562ac9f8 whitespace, reindentation, and comments only 2013-09-06 13:35:12 -07:00
John Clements ec0a64def5 memoization for resolve 2013-09-06 13:35:12 -07:00
John Clements 0954e66442 uncomment mtwt_resolve calls 2013-09-06 13:35:11 -07:00
John Clements 9ab2cfdae6 added utility function 2013-09-06 13:35:11 -07:00
John Clements bc2a44daf1 fix one remaining token comparison, refactor token comparison to avoid == check 2013-09-06 13:35:11 -07:00
John Clements e29d25338d remove dead code 2013-09-06 13:35:11 -07:00
John Clements b9bb4abcb6 capturing macros now implemented 2013-09-06 13:35:11 -07:00
John Clements 2c51e262f3 add fold_mac clause to fun_to_ctxt_folder 2013-09-06 13:35:11 -07:00
John Clements dfa04cecca add fold_mac field to fold.rs 2013-09-06 13:35:10 -07:00
John Clements 3261b6eece WIP: adding context to macros 2013-09-06 13:35:10 -07:00
John Clements 34f31e2961 rework fold so that fold_tts takes an ast_fold rather than a thunk, stop using closures in ident traversal 2013-09-06 13:35:10 -07:00
John Clements 09e6dda4f2 add temporarily unused ctxt field to mac_invoc_tt 2013-09-06 13:35:10 -07:00