auto merge of #15867 : cmr/rust/rewrite-lexer4, r=alexcrichton
This commit is contained in:
commit
8d43e4474a
@ -216,6 +216,7 @@ ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
|
||||
$(findstring tidy,$(MAKECMDGOALS))),)
|
||||
CFG_INFO := $(info cfg: including test rules)
|
||||
include $(CFG_SRC_DIR)mk/tests.mk
|
||||
include $(CFG_SRC_DIR)mk/grammar.mk
|
||||
endif
|
||||
|
||||
# Performance and benchmarking
|
||||
|
3
configure
vendored
3
configure
vendored
@ -493,6 +493,9 @@ probe CFG_VALGRIND valgrind
|
||||
probe CFG_PERF perf
|
||||
probe CFG_ISCC iscc
|
||||
probe CFG_LLNEXTGEN LLnextgen
|
||||
probe CFG_JAVAC javac
|
||||
probe CFG_ANTLR4 antlr4
|
||||
probe CFG_GRUN grun
|
||||
probe CFG_PANDOC pandoc
|
||||
probe CFG_PDFLATEX pdflatex
|
||||
probe CFG_XELATEX xelatex
|
||||
|
55
mk/grammar.mk
Normal file
55
mk/grammar.mk
Normal file
@ -0,0 +1,55 @@
|
||||
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
# file at the top-level directory of this distribution and at
|
||||
# http://rust-lang.org/COPYRIGHT.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
# option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
BG = $(CFG_BUILD_DIR)/grammar/
|
||||
SG = $(S)src/grammar/
|
||||
B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
|
||||
L = $(B)lib/rustlib/$(CFG_BUILD)/lib
|
||||
LD = $(CFG_BUILD)/stage2/lib/rustlib/$(CFG_BUILD)/lib/
|
||||
RUSTC = $(B)bin/rustc
|
||||
|
||||
# Run the reference lexer against libsyntax and compare the tokens and spans.
|
||||
# If "// ignore-lexer-test" is present in the file, it will be ignored.
|
||||
#
|
||||
# $(1) is the file to test.
|
||||
define LEXER_TEST
|
||||
grep "// ignore-lexer-test" $(1) ; \
|
||||
if [ $$? -eq 1 ]; then \
|
||||
CLASSPATH=$(B)grammar $(CFG_GRUN) RustLexer tokens -tokens < $(1) \
|
||||
| $(B)grammar/verify $(1) ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
$(BG):
|
||||
$(Q)mkdir -p $(BG)
|
||||
|
||||
$(BG)RustLexer.class: $(SG)RustLexer.g4
|
||||
$(Q)$(CFG_ANTLR4) -o $(B)grammar $(SG)RustLexer.g4
|
||||
$(Q)$(CFG_JAVAC) -d $(BG) $(BG)RustLexer.java
|
||||
|
||||
$(BG)verify: $(SG)verify.rs rustc-stage2-H-$(CFG_BUILD) $(LD)stamp.regex_macros $(LD)stamp.rustc
|
||||
$(Q)$(RUSTC) -O --out-dir $(BG) -L $(L) $(SG)verify.rs
|
||||
|
||||
check-lexer: $(BG) $(BG)RustLexer.class $(BG)verify
|
||||
ifdef CFG_JAVAC
|
||||
ifdef CFG_ANTLR4
|
||||
ifdef CFG_GRUN
|
||||
$(info Verifying libsyntax against the reference lexer ...)
|
||||
$(Q)$(SG)check.sh $(S) "$(BG)" \
|
||||
"$(CFG_GRUN)" "$(BG)verify" "$(BG)RustLexer.tokens"
|
||||
else
|
||||
$(info grun not available, skipping lexer test...)
|
||||
endif
|
||||
else
|
||||
$(info antlr4 not available, skipping lexer test...)
|
||||
endif
|
||||
else
|
||||
$(info javac not available, skipping lexer test...)
|
||||
endif
|
@ -192,6 +192,8 @@ check-docs: cleantestlibs cleantmptestlogs check-stage2-docs
|
||||
# NOTE: Remove after reprogramming windows bots
|
||||
check-fast: check-lite
|
||||
|
||||
check-syntax: check-lexer
|
||||
|
||||
.PHONY: cleantmptestlogs cleantestlibs
|
||||
|
||||
cleantmptestlogs:
|
||||
|
4
src/grammar/.gitignore
vendored
Normal file
4
src/grammar/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
verify
|
||||
*.class
|
||||
*.java
|
||||
*.tokens
|
20
src/grammar/README.md
Normal file
20
src/grammar/README.md
Normal file
@ -0,0 +1,20 @@
|
||||
Reference grammar.
|
||||
|
||||
Uses [antlr4](http://www.antlr.org/) and a custom Rust tool to compare
|
||||
ASTs/token streams generated. You can use the `check-syntax` make target to
|
||||
run all of the available tests.
|
||||
|
||||
To use manually:
|
||||
|
||||
```
|
||||
antlr4 RustLexer.g4
|
||||
javac *.java
|
||||
rustc -O verify.rs
|
||||
for file in ../*/**.rs; do
|
||||
echo $file;
|
||||
grun RustLexer tokens -tokens < $file | ./verify $file || break
|
||||
done
|
||||
```
|
||||
|
||||
Note That the `../*/**.rs` glob will match every `*.rs` file in the above
|
||||
directory and all of its recursive children. This is a zsh extension.
|
170
src/grammar/RustLexer.g4
Normal file
170
src/grammar/RustLexer.g4
Normal file
@ -0,0 +1,170 @@
|
||||
lexer grammar RustLexer;
|
||||
|
||||
tokens {
|
||||
EQ, LT, LE, EQEQ, NE, GE, GT, ANDAND, OROR, NOT, TILDE, PLUT,
|
||||
MINUS, STAR, SLASH, PERCENT, CARET, AND, OR, SHL, SHR, BINOP,
|
||||
BINOPEQ, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON,
|
||||
MOD_SEP, RARROW, FAT_ARROW, LPAREN, RPAREN, LBRACKET, RBRACKET,
|
||||
LBRACE, RBRACE, POUND, DOLLAR, UNDERSCORE, LIT_CHAR,
|
||||
LIT_INTEGER, LIT_FLOAT, LIT_STR, LIT_STR_RAW, LIT_BINARY,
|
||||
LIT_BINARY_RAW, IDENT, LIFETIME, WHITESPACE, DOC_COMMENT,
|
||||
COMMENT
|
||||
}
|
||||
|
||||
/* Note: due to antlr limitations, we can't represent XID_start and
|
||||
* XID_continue properly. ASCII-only substitute. */
|
||||
|
||||
fragment XID_start : [_a-zA-Z] ;
|
||||
fragment XID_continue : [_a-zA-Z0-9] ;
|
||||
|
||||
|
||||
/* Expression-operator symbols */
|
||||
|
||||
EQ : '=' ;
|
||||
LT : '<' ;
|
||||
LE : '<=' ;
|
||||
EQEQ : '==' ;
|
||||
NE : '!=' ;
|
||||
GE : '>=' ;
|
||||
GT : '>' ;
|
||||
ANDAND : '&&' ;
|
||||
OROR : '||' ;
|
||||
NOT : '!' ;
|
||||
TILDE : '~' ;
|
||||
PLUS : '+' ;
|
||||
MINUS : '-' ;
|
||||
STAR : '*' ;
|
||||
SLASH : '/' ;
|
||||
PERCENT : '%' ;
|
||||
CARET : '^' ;
|
||||
AND : '&' ;
|
||||
OR : '|' ;
|
||||
SHL : '<<' ;
|
||||
SHR : '>>' ;
|
||||
|
||||
BINOP
|
||||
: PLUS
|
||||
| SLASH
|
||||
| MINUS
|
||||
| STAR
|
||||
| PERCENT
|
||||
| CARET
|
||||
| AND
|
||||
| OR
|
||||
| SHL
|
||||
| SHR
|
||||
;
|
||||
|
||||
BINOPEQ : BINOP EQ ;
|
||||
|
||||
/* "Structural symbols" */
|
||||
|
||||
AT : '@' ;
|
||||
DOT : '.' ;
|
||||
DOTDOT : '..' ;
|
||||
DOTDOTDOT : '...' ;
|
||||
COMMA : ',' ;
|
||||
SEMI : ';' ;
|
||||
COLON : ':' ;
|
||||
MOD_SEP : '::' ;
|
||||
RARROW : '->' ;
|
||||
FAT_ARROW : '=>' ;
|
||||
LPAREN : '(' ;
|
||||
RPAREN : ')' ;
|
||||
LBRACKET : '[' ;
|
||||
RBRACKET : ']' ;
|
||||
LBRACE : '{' ;
|
||||
RBRACE : '}' ;
|
||||
POUND : '#';
|
||||
DOLLAR : '$' ;
|
||||
UNDERSCORE : '_' ;
|
||||
|
||||
// Literals
|
||||
|
||||
fragment HEXIT
|
||||
: [0-9a-fA-F]
|
||||
;
|
||||
|
||||
fragment CHAR_ESCAPE
|
||||
: [nrt\\'"0]
|
||||
| [xX] HEXIT HEXIT
|
||||
| 'u' HEXIT HEXIT HEXIT HEXIT
|
||||
| 'U' HEXIT HEXIT HEXIT HEXIT HEXIT HEXIT HEXIT HEXIT
|
||||
;
|
||||
|
||||
LIT_CHAR
|
||||
: '\'' ( '\\' CHAR_ESCAPE | ~[\\'\n\t\r] ) '\''
|
||||
;
|
||||
|
||||
LIT_BYTE
|
||||
: 'b\'' ( '\\' ( [xX] HEXIT HEXIT | [nrt\\'"0] ) | ~[\\'\n\t\r] ) '\''
|
||||
;
|
||||
|
||||
fragment INT_SUFFIX
|
||||
: 'i'
|
||||
| 'i8'
|
||||
| 'i16'
|
||||
| 'i32'
|
||||
| 'i64'
|
||||
| 'u'
|
||||
| 'u8'
|
||||
| 'u16'
|
||||
| 'u32'
|
||||
| 'u64'
|
||||
;
|
||||
|
||||
LIT_INTEGER
|
||||
: [0-9][0-9_]* INT_SUFFIX?
|
||||
| '0b' [01][01_]* INT_SUFFIX?
|
||||
| '0o' [0-7][0-7_]* INT_SUFFIX?
|
||||
| '0x' [0-9a-fA-F][0-9a-fA-F_]* INT_SUFFIX?
|
||||
;
|
||||
|
||||
FLOAT_SUFFIX
|
||||
: 'f32'
|
||||
| 'f64'
|
||||
| 'f128'
|
||||
;
|
||||
|
||||
LIT_FLOAT
|
||||
: [0-9][0-9_]* ('.' | ('.' [0-9][0-9_]*)? ([eE] [-+]? [0-9][0-9_]*)? FLOAT_SUFFIX?)
|
||||
;
|
||||
|
||||
LIT_STR
|
||||
: '"' ('\\\n' | '\\\r\n' | '\\' CHAR_ESCAPE | .)*? '"'
|
||||
;
|
||||
|
||||
LIT_BINARY : 'b' LIT_STR ;
|
||||
LIT_BINARY_RAW : 'rb' LIT_STR_RAW ;
|
||||
|
||||
/* this is a bit messy */
|
||||
|
||||
fragment LIT_STR_RAW_INNER
|
||||
: '"' .*? '"'
|
||||
| LIT_STR_RAW_INNER2
|
||||
;
|
||||
|
||||
fragment LIT_STR_RAW_INNER2
|
||||
: POUND LIT_STR_RAW_INNER POUND
|
||||
;
|
||||
|
||||
LIT_STR_RAW
|
||||
: 'r' LIT_STR_RAW_INNER
|
||||
;
|
||||
|
||||
IDENT : XID_start XID_continue* ;
|
||||
|
||||
LIFETIME : '\'' IDENT ;
|
||||
|
||||
WHITESPACE : [ \r\n\t]+ ;
|
||||
|
||||
UNDOC_COMMENT : '////' ~[\r\n]* -> type(COMMENT) ;
|
||||
YESDOC_COMMENT : '///' ~[\r\n]* -> type(DOC_COMMENT) ;
|
||||
OUTER_DOC_COMMENT : '//!' ~[\r\n]* -> type(DOC_COMMENT) ;
|
||||
LINE_COMMENT : '//' ~[\r\n]* -> type(COMMENT) ;
|
||||
|
||||
DOC_BLOCK_COMMENT
|
||||
: ('/**' ~[*] | '/*!') (DOC_BLOCK_COMMENT | .)*? '*/' -> type(DOC_COMMENT)
|
||||
;
|
||||
|
||||
BLOCK_COMMENT : '/*' (BLOCK_COMMENT | .)*? '*/' -> type(COMMENT) ;
|
34
src/grammar/check.sh
Executable file
34
src/grammar/check.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Run the reference lexer against libsyntax and compare the tokens and spans.
|
||||
# If "// ignore-lexer-test" is present in the file, it will be ignored.
|
||||
|
||||
|
||||
# Argument $1 is the file to check, $2 is the classpath to use, $3 is the path
|
||||
# to the grun binary, $4 is the path to the verify binary, $5 is the path to
|
||||
# RustLexer.tokens
|
||||
if [ "${VERBOSE}" == "1" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
check() {
|
||||
grep --silent "// ignore-lexer-test" $1;
|
||||
|
||||
# if it's *not* found...
|
||||
if [ $? -eq 1 ]; then
|
||||
cd $2 # This `cd` is so java will pick up RustLexer.class. I couldn't
|
||||
# figure out how to wrangle the CLASSPATH, just adding build/grammr didn't
|
||||
# seem to have anny effect.
|
||||
if $3 RustLexer tokens -tokens < $1 | $4 $1 $5; then
|
||||
echo "pass: $1"
|
||||
else
|
||||
echo "fail: $1"
|
||||
fi
|
||||
else
|
||||
echo "skip: $1"
|
||||
fi
|
||||
}
|
||||
|
||||
for file in $(find $1 -iname '*.rs' ! -path '*/test/compile-fail*'); do
|
||||
check $file $2 $3 $4 $5
|
||||
done
|
29
src/grammar/raw-string-literal-ambiguity.md
Normal file
29
src/grammar/raw-string-literal-ambiguity.md
Normal file
@ -0,0 +1,29 @@
|
||||
Rust's lexical grammar is not context-free. Raw string literals are the source
|
||||
of the problem. Informally, a raw string literal is an `r`, followed by `N`
|
||||
hashes (where N can be zero), a quote, any characters, then a quote followed
|
||||
by `N` hashes. This grammar describes this as best possible:
|
||||
|
||||
R -> 'r' S
|
||||
S -> '"' B '"'
|
||||
S -> '#' S '#'
|
||||
B -> . B
|
||||
B -> ε
|
||||
|
||||
Where `.` represents any character, and `ε` the empty string. Consider the
|
||||
string `r#""#"#`. This string is not a valid raw string literal, but can be
|
||||
accepted as one by the above grammar, using the derivation:
|
||||
|
||||
R : #""#"#
|
||||
S : ""#"
|
||||
S : "#
|
||||
B : #
|
||||
B : ε
|
||||
|
||||
(Where `T : U` means the rule `T` is applied, and `U` is the remainder of the
|
||||
string.) The difficulty arises from the fact that it is fundamentally
|
||||
context-sensitive. In particular, the context needed is the number of hashes.
|
||||
I know of no way to resolve this, but also have not come up with a proof that
|
||||
it is not context sensitive. Such a proof would probably use the pumping lemma
|
||||
for context-free languages, but I (cmr) could not come up with a proof after
|
||||
spending a few hours on it, and decided my time best spent elsewhere. Pull
|
||||
request welcome!
|
299
src/grammar/verify.rs
Normal file
299
src/grammar/verify.rs
Normal file
@ -0,0 +1,299 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(globs, phase, macro_rules)]
|
||||
|
||||
extern crate syntax;
|
||||
extern crate rustc;
|
||||
|
||||
#[phase(link)]
|
||||
extern crate regex;
|
||||
|
||||
#[phase(link, plugin)]
|
||||
extern crate log;
|
||||
|
||||
#[phase(plugin)] extern crate regex_macros;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::io::File;
|
||||
|
||||
use syntax::parse;
|
||||
use syntax::parse::lexer;
|
||||
use rustc::driver::{session, config};
|
||||
|
||||
use syntax::ast;
|
||||
use syntax::ast::Name;
|
||||
use syntax::parse::token::*;
|
||||
use syntax::parse::lexer::TokenAndSpan;
|
||||
|
||||
fn parse_token_list(file: &str) -> HashMap<String, Token> {
|
||||
fn id() -> Token {
|
||||
IDENT(ast::Ident { name: Name(0), ctxt: 0, }, false)
|
||||
}
|
||||
|
||||
let mut res = HashMap::new();
|
||||
|
||||
res.insert("-1".to_string(), EOF);
|
||||
|
||||
for line in file.split('\n') {
|
||||
let eq = match line.trim().rfind('=') {
|
||||
Some(val) => val,
|
||||
None => continue
|
||||
};
|
||||
|
||||
let val = line.slice_to(eq);
|
||||
let num = line.slice_from(eq + 1);
|
||||
|
||||
let tok = match val {
|
||||
"SHR" => BINOP(SHR),
|
||||
"DOLLAR" => DOLLAR,
|
||||
"LT" => LT,
|
||||
"STAR" => BINOP(STAR),
|
||||
"FLOAT_SUFFIX" => id(),
|
||||
"INT_SUFFIX" => id(),
|
||||
"SHL" => BINOP(SHL),
|
||||
"LBRACE" => LBRACE,
|
||||
"RARROW" => RARROW,
|
||||
"LIT_STR" => LIT_STR(Name(0)),
|
||||
"DOTDOT" => DOTDOT,
|
||||
"MOD_SEP" => MOD_SEP,
|
||||
"DOTDOTDOT" => DOTDOTDOT,
|
||||
"NOT" => NOT,
|
||||
"AND" => BINOP(AND),
|
||||
"LPAREN" => LPAREN,
|
||||
"ANDAND" => ANDAND,
|
||||
"AT" => AT,
|
||||
"LBRACKET" => LBRACKET,
|
||||
"LIT_STR_RAW" => LIT_STR_RAW(Name(0), 0),
|
||||
"RPAREN" => RPAREN,
|
||||
"SLASH" => BINOP(SLASH),
|
||||
"COMMA" => COMMA,
|
||||
"LIFETIME" => LIFETIME(ast::Ident { name: Name(0), ctxt: 0 }),
|
||||
"CARET" => BINOP(CARET),
|
||||
"TILDE" => TILDE,
|
||||
"IDENT" => id(),
|
||||
"PLUS" => BINOP(PLUS),
|
||||
"LIT_CHAR" => LIT_CHAR(Name(0)),
|
||||
"LIT_BYTE" => LIT_BYTE(Name(0)),
|
||||
"EQ" => EQ,
|
||||
"RBRACKET" => RBRACKET,
|
||||
"COMMENT" => COMMENT,
|
||||
"DOC_COMMENT" => DOC_COMMENT(Name(0)),
|
||||
"DOT" => DOT,
|
||||
"EQEQ" => EQEQ,
|
||||
"NE" => NE,
|
||||
"GE" => GE,
|
||||
"PERCENT" => BINOP(PERCENT),
|
||||
"RBRACE" => RBRACE,
|
||||
"BINOP" => BINOP(PLUS),
|
||||
"POUND" => POUND,
|
||||
"OROR" => OROR,
|
||||
"LIT_INTEGER" => LIT_INTEGER(Name(0)),
|
||||
"BINOPEQ" => BINOPEQ(PLUS),
|
||||
"LIT_FLOAT" => LIT_FLOAT(Name(0)),
|
||||
"WHITESPACE" => WS,
|
||||
"UNDERSCORE" => UNDERSCORE,
|
||||
"MINUS" => BINOP(MINUS),
|
||||
"SEMI" => SEMI,
|
||||
"COLON" => COLON,
|
||||
"FAT_ARROW" => FAT_ARROW,
|
||||
"OR" => BINOP(OR),
|
||||
"GT" => GT,
|
||||
"LE" => LE,
|
||||
"LIT_BINARY" => LIT_BINARY(Name(0)),
|
||||
"LIT_BINARY_RAW" => LIT_BINARY_RAW(Name(0), 0),
|
||||
_ => continue
|
||||
};
|
||||
|
||||
res.insert(num.to_string(), tok);
|
||||
}
|
||||
|
||||
debug!("Token map: {}", res);
|
||||
res
|
||||
}
|
||||
|
||||
fn str_to_binop(s: &str) -> BinOp {
|
||||
match s {
|
||||
"+" => PLUS,
|
||||
"/" => SLASH,
|
||||
"-" => MINUS,
|
||||
"*" => STAR,
|
||||
"%" => PERCENT,
|
||||
"^" => CARET,
|
||||
"&" => AND,
|
||||
"|" => OR,
|
||||
"<<" => SHL,
|
||||
">>" => SHR,
|
||||
_ => fail!("Bad binop str `{}`", s)
|
||||
}
|
||||
}
|
||||
|
||||
/// Assuming a string/binary literal, strip out the leading/trailing
|
||||
/// hashes and surrounding quotes/raw/binary prefix.
|
||||
fn fix(mut lit: &str) -> ast::Name {
|
||||
if lit.char_at(0) == 'r' {
|
||||
if lit.char_at(1) == 'b' {
|
||||
lit = lit.slice_from(2)
|
||||
} else {
|
||||
lit = lit.slice_from(1);
|
||||
}
|
||||
} else if lit.char_at(0) == 'b' {
|
||||
lit = lit.slice_from(1);
|
||||
}
|
||||
|
||||
let leading_hashes = count(lit);
|
||||
|
||||
// +1/-1 to adjust for single quotes
|
||||
parse::token::intern(lit.slice(leading_hashes + 1, lit.len() - leading_hashes - 1))
|
||||
}
|
||||
|
||||
/// Assuming a char/byte literal, strip the 'b' prefix and the single quotes.
|
||||
fn fixchar(mut lit: &str) -> ast::Name {
|
||||
if lit.char_at(0) == 'b' {
|
||||
lit = lit.slice_from(1);
|
||||
}
|
||||
|
||||
parse::token::intern(lit.slice(1, lit.len() - 1))
|
||||
}
|
||||
|
||||
fn count(lit: &str) -> uint {
|
||||
lit.chars().take_while(|c| *c == '#').count()
|
||||
}
|
||||
|
||||
fn parse_antlr_token(s: &str, tokens: &HashMap<String, Token>) -> TokenAndSpan {
|
||||
let re = regex!(
|
||||
r"\[@(?P<seq>\d+),(?P<start>\d+):(?P<end>\d+)='(?P<content>.+?)',<(?P<toknum>-?\d+)>,\d+:\d+]"
|
||||
);
|
||||
|
||||
let m = re.captures(s).expect(format!("The regex didn't match {}", s).as_slice());
|
||||
let start = m.name("start");
|
||||
let end = m.name("end");
|
||||
let toknum = m.name("toknum");
|
||||
let content = m.name("content");
|
||||
|
||||
let proto_tok = tokens.find_equiv(&toknum).expect(format!("didn't find token {} in the map",
|
||||
toknum).as_slice());
|
||||
|
||||
let nm = parse::token::intern(content);
|
||||
|
||||
debug!("What we got: content (`{}`), proto: {}", content, proto_tok);
|
||||
|
||||
let real_tok = match *proto_tok {
|
||||
BINOP(..) => BINOP(str_to_binop(content)),
|
||||
BINOPEQ(..) => BINOPEQ(str_to_binop(content.slice_to(content.len() - 1))),
|
||||
LIT_STR(..) => LIT_STR(fix(content)),
|
||||
LIT_STR_RAW(..) => LIT_STR_RAW(fix(content), count(content)),
|
||||
LIT_CHAR(..) => LIT_CHAR(fixchar(content)),
|
||||
LIT_BYTE(..) => LIT_BYTE(fixchar(content)),
|
||||
DOC_COMMENT(..) => DOC_COMMENT(nm),
|
||||
LIT_INTEGER(..) => LIT_INTEGER(nm),
|
||||
LIT_FLOAT(..) => LIT_FLOAT(nm),
|
||||
LIT_BINARY(..) => LIT_BINARY(nm),
|
||||
LIT_BINARY_RAW(..) => LIT_BINARY_RAW(fix(content), count(content)),
|
||||
IDENT(..) => IDENT(ast::Ident { name: nm, ctxt: 0 }, true),
|
||||
LIFETIME(..) => LIFETIME(ast::Ident { name: nm, ctxt: 0 }),
|
||||
ref t => t.clone()
|
||||
};
|
||||
|
||||
let offset = if real_tok == EOF {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
let sp = syntax::codemap::Span {
|
||||
lo: syntax::codemap::BytePos(from_str::<u32>(start).unwrap() - offset),
|
||||
hi: syntax::codemap::BytePos(from_str::<u32>(end).unwrap() + 1),
|
||||
expn_info: None
|
||||
};
|
||||
|
||||
TokenAndSpan {
|
||||
tok: real_tok,
|
||||
sp: sp
|
||||
}
|
||||
}
|
||||
|
||||
fn tok_cmp(a: &Token, b: &Token) -> bool {
|
||||
match a {
|
||||
&IDENT(id, _) => match b {
|
||||
&IDENT(id2, _) => id == id2,
|
||||
_ => false
|
||||
},
|
||||
_ => a == b
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn next(r: &mut lexer::StringReader) -> TokenAndSpan {
|
||||
use syntax::parse::lexer::Reader;
|
||||
r.next_token()
|
||||
}
|
||||
|
||||
let args = std::os::args();
|
||||
|
||||
let mut token_file = File::open(&Path::new(args.get(2).as_slice()));
|
||||
let token_map = parse_token_list(token_file.read_to_string().unwrap().as_slice());
|
||||
|
||||
let mut stdin = std::io::stdin();
|
||||
let mut antlr_tokens = stdin.lines().map(|l| parse_antlr_token(l.unwrap().as_slice().trim(),
|
||||
&token_map));
|
||||
|
||||
let code = File::open(&Path::new(args.get(1).as_slice())).unwrap().read_to_string().unwrap();
|
||||
let options = config::basic_options();
|
||||
let session = session::build_session(options, None,
|
||||
syntax::diagnostics::registry::Registry::new([]));
|
||||
let filemap = parse::string_to_filemap(&session.parse_sess,
|
||||
code,
|
||||
String::from_str("<n/a>"));
|
||||
let mut lexer = lexer::StringReader::new(session.diagnostic(), filemap);
|
||||
|
||||
for antlr_tok in antlr_tokens {
|
||||
let rustc_tok = next(&mut lexer);
|
||||
if rustc_tok.tok == EOF && antlr_tok.tok == EOF {
|
||||
continue
|
||||
}
|
||||
|
||||
assert!(rustc_tok.sp == antlr_tok.sp, "{} and {} have different spans", rustc_tok,
|
||||
antlr_tok);
|
||||
|
||||
macro_rules! matches (
|
||||
( $($x:pat),+ ) => (
|
||||
match rustc_tok.tok {
|
||||
$($x => match antlr_tok.tok {
|
||||
$x => {
|
||||
if !tok_cmp(&rustc_tok.tok, &antlr_tok.tok) {
|
||||
// FIXME #15677: needs more robust escaping in
|
||||
// antlr
|
||||
warn!("Different names for {} and {}", rustc_tok, antlr_tok);
|
||||
}
|
||||
}
|
||||
_ => fail!("{} is not {}", antlr_tok, rustc_tok)
|
||||
},)*
|
||||
ref c => assert!(c == &antlr_tok.tok, "{} is not {}", rustc_tok, antlr_tok)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
matches!(LIT_BYTE(..),
|
||||
LIT_CHAR(..),
|
||||
LIT_INTEGER(..),
|
||||
LIT_FLOAT(..),
|
||||
LIT_STR(..),
|
||||
LIT_STR_RAW(..),
|
||||
LIT_BINARY(..),
|
||||
LIT_BINARY_RAW(..),
|
||||
IDENT(..),
|
||||
LIFETIME(..),
|
||||
INTERPOLATED(..),
|
||||
DOC_COMMENT(..),
|
||||
SHEBANG(..)
|
||||
);
|
||||
}
|
||||
}
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
/*!
|
||||
* Implementation of SipHash 2-4
|
||||
|
@ -155,7 +155,7 @@ fn connect_vec(&self, sep: &T) -> Vec<T> {
|
||||
/// a sequence of all possible permutations for an indexed sequence of
|
||||
/// elements. Each permutation is only a single swap apart.
|
||||
///
|
||||
/// The Steinhaus–Johnson–Trotter algorithm is used.
|
||||
/// The Steinhaus-Johnson-Trotter algorithm is used.
|
||||
///
|
||||
/// Generates even and odd permutations alternately.
|
||||
///
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
/*!
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! An owned, growable string that enforces that its contents are valid UTF-8.
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! Numeric traits and functions for generic mathematics
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! String manipulation
|
||||
//!
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
use core::char::{escape_unicode, escape_default};
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15677
|
||||
|
||||
//! Simple getopt alternative.
|
||||
//!
|
||||
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// FIXME: this file probably shouldn't exist
|
||||
// ignore-lexer-test FIXME #15677
|
||||
|
||||
#![macro_escape]
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
//! Windows specific console TTY implementation
|
||||
//!
|
||||
//! This module contains the implementation of a Windows specific console TTY.
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! The Gamma and derived distributions.
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! This crate provides a native implementation of regular expressions that is
|
||||
//! heavily based on RE2 both in syntax and in implementation. Notably,
|
||||
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
use regex::{Regex, NoExpand};
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15677
|
||||
|
||||
use core::prelude::*;
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! Base64 binary-to-text encoding
|
||||
use std::str;
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! Hex binary-to-text encoding
|
||||
use std::str;
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! Operations on ASCII strings and characters
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
//! Unordered containers, implemented as hash-tables (`HashSet` and `HashMap` types)
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
/*!
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
//! Buffering wrappers for I/O traits
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
/*! Synchronous File I/O
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! Readers and Writers for in-memory buffers
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
// FIXME: cover these topics:
|
||||
// path, reader, writer, stream, raii (close not needed),
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
#![allow(missing_doc)]
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
//! Windows file path handling
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
/*!
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
//! This is an Earley-like parser, without support for in-grammar nonterminals,
|
||||
//! only by calling out to the main rust parser for named nonterminals (which it
|
||||
|
@ -205,28 +205,28 @@ pub fn tzset() {
|
||||
/// also called a broken-down time value.
|
||||
#[deriving(Clone, PartialEq, Show)]
|
||||
pub struct Tm {
|
||||
/// Seconds after the minute – [0, 60]
|
||||
/// Seconds after the minute - [0, 60]
|
||||
pub tm_sec: i32,
|
||||
|
||||
/// Minutes after the hour – [0, 59]
|
||||
/// Minutes after the hour - [0, 59]
|
||||
pub tm_min: i32,
|
||||
|
||||
/// Hours after midnight – [0, 23]
|
||||
/// Hours after midnight - [0, 23]
|
||||
pub tm_hour: i32,
|
||||
|
||||
/// Day of the month – [1, 31]
|
||||
/// Day of the month - [1, 31]
|
||||
pub tm_mday: i32,
|
||||
|
||||
/// Months since January – [0, 11]
|
||||
/// Months since January - [0, 11]
|
||||
pub tm_mon: i32,
|
||||
|
||||
/// Years since 1900
|
||||
pub tm_year: i32,
|
||||
|
||||
/// Days since Sunday – [0, 6]. 0 = Sunday, 1 = Monday, …, 6 = Saturday.
|
||||
/// Days since Sunday - [0, 6]. 0 = Sunday, 1 = Monday, ..., 6 = Saturday.
|
||||
pub tm_wday: i32,
|
||||
|
||||
/// Days since January 1 – [0, 365]
|
||||
/// Days since January 1 - [0, 365]
|
||||
pub tm_yday: i32,
|
||||
|
||||
/// Daylight Saving Time flag.
|
||||
@ -240,7 +240,7 @@ pub struct Tm {
|
||||
/// for U.S. Pacific Daylight Time, the value is -7*60*60 = -25200.
|
||||
pub tm_gmtoff: i32,
|
||||
|
||||
/// Nanoseconds after the second – [0, 10<sup>9</sup> - 1]
|
||||
/// Nanoseconds after the second - [0, 10<sup>9</sup> - 1]
|
||||
pub tm_nsec: i32,
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
/*!
|
||||
* Unicode-intensive string manipulations.
|
||||
|
@ -8,6 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-lexer-test FIXME #15679
|
||||
// Microbenchmarks for various functions in std and extra
|
||||
|
||||
#![feature(macro_rules)]
|
||||
|
@ -16,6 +16,7 @@
|
||||
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
||||
|
||||
// no-pretty-expanded FIXME #15189
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
extern crate time;
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
||||
|
||||
// no-pretty-expanded FIXME #15189
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
extern crate time;
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// Multi-language Perlin noise benchmark.
|
||||
// See https://github.com/nsf/pnoise for timings and alternative implementations.
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
use std::f32::consts::PI;
|
||||
use std::rand::{Rng, StdRng};
|
||||
|
@ -14,6 +14,7 @@
|
||||
// ignore-tidy-cr
|
||||
// ignore-tidy-tab
|
||||
// pp-exact:block-comment-wchar.pp
|
||||
// ignore-lexer-test FIXME #15679
|
||||
fn f() {
|
||||
fn nested() {
|
||||
/*
|
||||
|
@ -14,6 +14,7 @@
|
||||
// ignore-tidy-cr
|
||||
// ignore-tidy-tab
|
||||
// pp-exact:block-comment-wchar.pp
|
||||
// ignore-lexer-test FIXME #15679
|
||||
fn f() {
|
||||
fn nested() {
|
||||
/*
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
|
||||
static FOO: u8 = b'\xF0';
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
|
||||
// Tests that we can call a function bounded over a supertrait from
|
||||
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// no-pretty-expanded unnecessary unsafe block generated
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
#![feature(macro_rules, managed_boxes)]
|
||||
#![deny(warnings)]
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
pub fn main() {
|
||||
let x = 1i;
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
// Tests that match expression handles overlapped literal and range
|
||||
// properly in the presence of guard function.
|
||||
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-test
|
||||
// ignore-lexer-test FIXME #15881
|
||||
|
||||
// notes on this test case:
|
||||
// On Thu, Apr 18, 2013-2014 at 6:30 PM, John Clements <clements@brinckerhoff.org> wrote:
|
||||
|
@ -8,6 +8,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
#![feature(unsafe_destructor)]
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
|
||||
trait Foo {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
trait U { fn f(self); }
|
||||
impl U for int { fn f(self) {} }
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
type FontTableTag = u32;
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
trait Fooable {
|
||||
fn yes(self);
|
||||
|
@ -16,6 +16,7 @@
|
||||
// this directory should enforce it.
|
||||
|
||||
// ignore-pretty
|
||||
// ignore-lexer-test FIXME #15882
|
||||
|
||||
/// Doc comment that ends in CRLF
|
||||
pub fn foo() {}
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
|
||||
#![forbid(non_camel_case_types)]
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
pub fn main() {
|
||||
match 5u {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
// Test that multibyte characters don't crash the compiler
|
||||
pub fn main() {
|
||||
|
Binary file not shown.
@ -10,5 +10,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-pretty: `expand` addes some preludes before shebang
|
||||
//
|
||||
// ignore-lexer-test FIXME #15878
|
||||
|
||||
pub fn main() { println!("Hello World"); }
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
|
||||
pub struct Floats { a: f64, b: u8, c: f64 }
|
||||
|
@ -7,7 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//
|
||||
// ignore-lexer-test FIXME #15883
|
||||
|
||||
|
||||
trait to_str {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
pub trait Clone2 {
|
||||
/// Returns a copy of the value. The contents of owned pointers
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
|
||||
trait Cat {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15877
|
||||
|
||||
|
||||
trait Cat {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15879
|
||||
|
||||
// Test syntax checks for `Sized?` syntax.
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15879
|
||||
#![feature(struct_variant)]
|
||||
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
// This file has utf-8 BOM, it should be compiled normally without error.
|
||||
|
||||
|
@ -7,7 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
// no-pretty-expanded FIXME #15189
|
||||
|
||||
pub fn main() {
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
use std::str;
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// ignore-lexer-test FIXME #15679
|
||||
|
||||
|
||||
#![feature(non_ascii_idents)]
|
||||
|
Loading…
Reference in New Issue
Block a user