about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
AgeCommit message (Collapse)AuthorLines
2018-06-28Use `Ident`s in a number of structures in HIRVadim Petrochenkov-1/+1
Namely: labels, type parameters, bindings in patterns, parameter names in functions without body. All of these do not need hygiene after lowering to HIR, only span locations.
2018-06-26inclusive range syntax lint (`...` → `..=`)Zack M. Davis-12/+21
Our implementation ends up changing the `PatKind::Range` variant in the AST to take a `Spanned<RangeEnd>` instead of just a `RangeEnd`, because the alternative would be to try to infer the span of the range operator from the spans of the start and end subexpressions, which is both hideous and nontrivial to get right (whereas getting the change to the AST right was a simple game of type tennis). This is concerning #51043.
2018-06-23structured suggestion and rewording for `...` expression syntax errorZack M. Davis-6/+8
Now that `..=` inclusive ranges are stabilized, people probably shouldn't be using `...` even in patterns, even if it's still legal there (see #51043). To avoid drawing attention to `...` being a real thing, let's reword this message to just say "unexpected token" rather "cannot be used in expressions".
2018-06-23Auto merge of #51580 - cramertj:async-await, r=eddybbors-18/+117
async/await This PR implements `async`/`await` syntax for `async fn` in Rust 2015 and `async` closures and `async` blocks in Rust 2018 (tracking issue: https://github.com/rust-lang/rust/issues/50547). Limitations: non-`move` async closures with arguments are currently not supported, nor are `async fn` with multiple different input lifetimes. These limitations are not fundamental and will be removed in the future, however I'd like to go ahead and get this PR merged so we can start experimenting with this in combination with futures 0.3. Based on https://github.com/rust-lang/rust/pull/51414. cc @petrochenkov for parsing changes. r? @eddyb
2018-06-22Re-reexport some items that were recently made crate-private.Tim Kuehn-1/+1
2018-06-22Auto merge of #51704 - kennytm:rollup, r=kennytmbors-4/+4
Rollup of 6 pull requests Successful merges: - #51158 (Mention spec and indented blocks in doctest docs) - #51629 (Do not consume semicolon twice while parsing local statement) - #51637 (Update zx_cprng_draw_new on Fuchsia) - #51664 (make more libsyntax methods public) - #51666 (Disable probestack when GCOV profiling is being used) - #51703 (Recognize the extra "LLVM tools versions" argument to build-manifest.) Failed merges: r? @ghost
2018-06-22add an explanatory comment for recovery behaviorNiko Matsakis-0/+3
2018-06-22Issue #50974: Fix compilation error and testLamb-1/+1
2018-06-22Fix when the help message is displayedMaerten-2/+2
Only display the "remove this comma" suggestion when followed by an identifier
2018-06-22Issue #50974: Change text of suggestion to be more directLamb-1/+1
2018-06-22Issue #50974: Suboptimal error in case of duplicate `,` in struct constructorLamb-2/+8
2018-06-22Rollup merge of #51664 - jebrosen:pub_parse_methods2, r=Mark-Simulacrumkennytm-3/+3
make more libsyntax methods public Followup for #51502, which was sufficient only for the latest stable release of Rocket. The `master` branch uses a few more. I plan to reimplement the deleted method `parse_seq` in Rocket (see SergioBenitez/Rocket#666), rather than resurrecting it in libsyntax. r? @Mark-Simulacrum
2018-06-22Rollup merge of #51629 - topecongiro:multiple-semicolon-in-local-span, ↵kennytm-1/+1
r=petrochenkov Do not consume semicolon twice while parsing local statement The span for a `let` statement includes multiple semicolons. For example, ```rust let x = 2;;; // ^^^^^^^^^^^ The span for the above statement. ``` This PR fixes it. cc https://github.com/rust-lang-nursery/rustfmt/issues/2791.
2018-06-21Move async edition check to the current spanTaylor Cramer-2/+2
2018-06-21Async methodsTaylor Cramer-6/+23
2018-06-21Parse `unsafe async fn` instead of `async unsafe fn`Taylor Cramer-4/+10
2018-06-21async await desugaring and testsTaylor Cramer-4/+54
2018-06-21Parse async fn header.Without Boats-12/+38
This is gated on edition 2018 & the `async_await` feature gate. The parser will accept `async fn` and `async unsafe fn` as fn items. Along the same lines as `const fn`, only `async unsafe fn` is permitted, not `unsafe async fn`.The parser will not accept `async` functions as trait methods. To do a little code clean up, four fields of the function type struct have been merged into the new `FnHeader` struct: constness, asyncness, unsafety, and ABI. Also, a small bug in HIR printing is fixed: it previously printed `const unsafe fn` as `unsafe const fn`, which is grammatically incorrect.
2018-06-22Auto merge of #51463 - estebank:error-codes, r=nikomatsakisbors-17/+32
Various changes to existing diagnostics * [Add code to `invalid ABI` error, add span label, move list to help to make message shorter](https://github.com/rust-lang/rust/pull/51463/commits/23ae5af274defa9ff884f593e44a2bbcaf814a02): ``` error[E0697]: invalid ABI: found `路濫狼á́́` --> $DIR/unicode.rs:11:8 | LL | extern "路濫狼á́́" fn foo() {} //~ ERROR invalid ABI | ^^^^^^^^^ invalid ABI | = help: valid ABIs: cdecl, stdcall, fastcall, vectorcall, thiscall, aapcs, win64, sysv64, ptx-kernel, msp430-interrupt, x86-interrupt, Rust, C, system, rust-intrinsic, rust-call, platform-intrinsic, unadjusted ``` * [Add code to incorrect `pub` restriction error](https://github.com/rust-lang/rust/pull/51463/commits/e96fdea8a38f39f99f8b9a4000a689187a457e08) * [Add message to `rustc_on_unimplemented` attributes in core to have them set a custom message _and_ label](https://github.com/rust-lang/rust/pull/51463/commits/2cc7e5ed307aee936c20479cfdc7409d6b52a464): ``` error[E0277]: `W` does not have a constant size known at compile-time --> $DIR/unsized-enum2.rs:33:8 | LL | VA(W), | ^ `W` does not have a constant size known at compile-time | = help: the trait `std::marker::Sized` is not implemented for `W` = help: consider adding a `where W: std::marker::Sized` bound = note: no field of an enum variant may have a dynamically sized type ``` ``` error[E0277]: `Foo` cannot be sent between threads safely --> $DIR/E0277-2.rs:26:5 | LL | is_send::<Foo>(); | ^^^^^^^^^^^^^^ `Foo` cannot be sent between threads safely | = help: the trait `std::marker::Send` is not implemented for `Foo` ``` ``` error[E0277]: can't compare `{integer}` with `std::string::String` --> $DIR/binops.rs:16:7 | LL | 5 < String::new(); | ^ no implementation for `{integer} < std::string::String` and `{integer} > std::string::String` | = help: the trait `std::cmp::PartialOrd<std::string::String>` is not implemented for `{integer}` ``` ``` error[E0277]: can't compare `{integer}` with `std::result::Result<{integer}, _>` --> $DIR/binops.rs:17:7 | LL | 6 == Ok(1); | ^^ no implementation for `{integer} == std::result::Result<{integer}, _>` | = help: the trait `std::cmp::PartialEq<std::result::Result<{integer}, _>>` is not implemented for `{integer}` ``` ``` error[E0277]: a collection of type `i32` cannot be built from an iterator over elements of type `i32` --> $DIR/type-check-defaults.rs:16:19 | LL | struct WellFormed<Z = Foo<i32, i32>>(Z); | ^ a collection of type `i32` cannot be built from `std::iter::Iterator<Item=i32>` | = help: the trait `std::iter::FromIterator<i32>` is not implemented for `i32` note: required by `Foo` --> $DIR/type-check-defaults.rs:15:1 | LL | struct Foo<T, U: FromIterator<T>>(T, U); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` * [Add link to book for `Sized` errors](https://github.com/rust-lang/rust/pull/51463/commits/1244dc7c283323aea1a3457a4458d590a3e160c8): ``` error[E0277]: `std::fmt::Debug + std::marker::Sync + 'static` does not have a constant size known at compile-time --> $DIR/const-unsized.rs:13:29 | LL | const CONST_0: Debug+Sync = *(&0 as &(Debug+Sync)); | ^^^^^^^^^^^^^^^^^^^^^^ `std::fmt::Debug + std::marker::Sync + 'static` does not have a constant size known at compile-time | = help: the trait `std::marker::Sized` is not implemented for `std::fmt::Debug + std::marker::Sync + 'static` = note: to learn more, visit <https://doc.rust-lang.org/book/second-edition/ch19-04-advanced-types.html#dynamically-sized-types--sized> = note: constant expressions must have a statically known size ``` * [Point to previous line for single expected token not found](https://github.com/rust-lang/rust/pull/51463/commits/48165168fb0f059d8536cd4a2276b609d4a7f721) (if the current token is in a different line)
2018-06-20make `parse_seq_to_before_end`, `mk_mac_expr`, and `parse_optional_str` ↵jeb-3/+3
public in libsyntax
2018-06-20Rename ParenthesizedArgData to ParenthesisedArgsvarkor-2/+2
2018-06-20Rename ty_param_bound to generic_boundvarkor-13/+13
2018-06-20Make GenericBound explicitvarkor-5/+5
2018-06-20Rename ParamBound(s) to GenericBound(s)varkor-6/+6
2018-06-20Rename TraitTyParamBound to ParamBound::Traitvarkor-4/+4
2018-06-20Fix HasAttrs support for GenericParamvarkor-1/+1
2018-06-20Remove name from GenericParamKind::Lifetimevarkor-3/+1
2018-06-20Use ParamBounds in WhereRegionPredicatevarkor-6/+4
2018-06-20Lift bounds into GenericParamvarkor-10/+12
2018-06-20Rename structures in astvarkor-14/+14
2018-06-20Refactor ast::GenericParam as a structvarkor-25/+25
2018-06-20Rename ast::GenericParam and ast::GenericArgvarkor-12/+11
It's so confusing to have everything having the same name, at least while refactoring.
2018-06-20Rename "parameter" to "arg"varkor-15/+15
2018-06-20Rename *Parameter to *Paramvarkor-4/+4
2018-06-20Consolidate PathParameters and AngleBracketedParameterDatavarkor-9/+11
2018-06-19Update error code numbersEsteban Küber-2/+2
2018-06-19Fix tidy and remove unused methodEsteban Küber-2/+2
2018-06-19Point to previous line for single expected tokenEsteban Küber-1/+20
2018-06-19Add message to `rustc_on_unimplemented` attributes in coreEsteban Küber-8/+0
2018-06-19Add code to incorrect `pub` restriction errorEsteban Küber-3/+4
2018-06-19Add code to `invalid ABI` errorEsteban Küber-5/+8
2018-06-19Do not consume semicolon twice while parsing local statementSeiichi Uchida-1/+1
2018-06-19Auto merge of #51278 - EPashkin:fix_mod_with_multilevel_paths_on_windows, ↵bors-1/+13
r=nikomatsakis Fix processing mod with multi-level path on Windows Fix error in [rustfmt](https://github.com/rust-lang-nursery/rustfmt/issues/1754) because libsyntax can not handle `mod` with multilevel path on Windows. Alternative is do almost same in https://github.com/rust-lang/rust/blob/master/src/libstd/sys/windows/fs.rs#L717 to allow work on paths with different separators, Ex. "\\\\?\\c:\\windows/temp"
2018-06-17Auto merge of #51549 - PSeitz:patch-1, r=kennytmbors-2/+2
Follow up to #51508, make parse_block public instead parse_block_expr This is an follow up to #51508 I mistakenly made parse_block_expr public instead of parse_block. This fixes this.
2018-06-16Follow up on https://github.com/rust-lang/rust/pull/51508, make parse_block ↵PSeitz-2/+2
public instead parse_block_expr This is an follow up to #51508 I mistakenly made parse_block_expr public instead of parse_block. This fixes this.
2018-06-14create multiple HIR items for a use statementQuietMisdreavus-1/+1
2018-06-12Rollup merge of #51502 - jebrosen:pub_parse_methods, r=Mark-SimulacrumMark Rousskov-2/+2
Make parse_seq_to_end and parse_path public (see SergioBenitez/Rocket#660, rust-lang/rust#51265) Rocket currently uses `parse_seq_to_end` and `parse_path` in its codegen macros. Assuming I tested correctly, this is the minimal set of methods that are currently necessary to build Rocket again. I would be happy to add documentation of this and Rocket's other usages, if desired.
2018-06-12Auto merge of #51508 - PSeitz:master, r=Mark-Simulacrumbors-2/+2
Make span_fatal and parse_block public span_fatal and parse_block were made private in #51265. These methods are used in stainless. Related #51498 #51504
2018-06-11Make span_fatal and parse_block publicPSeitz-2/+2
span_fatal and parse_block were made private in #51265. These methods are used in stainless. Related #51498 #51504
2018-06-11Make parse_seq_to_end and parse_path publicjeb-2/+2