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))),)
|
$(findstring tidy,$(MAKECMDGOALS))),)
|
||||||
CFG_INFO := $(info cfg: including test rules)
|
CFG_INFO := $(info cfg: including test rules)
|
||||||
include $(CFG_SRC_DIR)mk/tests.mk
|
include $(CFG_SRC_DIR)mk/tests.mk
|
||||||
|
include $(CFG_SRC_DIR)mk/grammar.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Performance and benchmarking
|
# Performance and benchmarking
|
||||||
|
3
configure
vendored
3
configure
vendored
@ -493,6 +493,9 @@ probe CFG_VALGRIND valgrind
|
|||||||
probe CFG_PERF perf
|
probe CFG_PERF perf
|
||||||
probe CFG_ISCC iscc
|
probe CFG_ISCC iscc
|
||||||
probe CFG_LLNEXTGEN LLnextgen
|
probe CFG_LLNEXTGEN LLnextgen
|
||||||
|
probe CFG_JAVAC javac
|
||||||
|
probe CFG_ANTLR4 antlr4
|
||||||
|
probe CFG_GRUN grun
|
||||||
probe CFG_PANDOC pandoc
|
probe CFG_PANDOC pandoc
|
||||||
probe CFG_PDFLATEX pdflatex
|
probe CFG_PDFLATEX pdflatex
|
||||||
probe CFG_XELATEX xelatex
|
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
|
# NOTE: Remove after reprogramming windows bots
|
||||||
check-fast: check-lite
|
check-fast: check-lite
|
||||||
|
|
||||||
|
check-syntax: check-lexer
|
||||||
|
|
||||||
.PHONY: cleantmptestlogs cleantestlibs
|
.PHONY: cleantmptestlogs cleantestlibs
|
||||||
|
|
||||||
cleantmptestlogs:
|
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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Implementation of SipHash 2-4
|
* 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
|
/// a sequence of all possible permutations for an indexed sequence of
|
||||||
/// elements. Each permutation is only a single swap apart.
|
/// 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.
|
/// Generates even and odd permutations alternately.
|
||||||
///
|
///
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! An owned, growable string that enforces that its contents are valid UTF-8.
|
//! 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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! Numeric traits and functions for generic mathematics
|
//! Numeric traits and functions for generic mathematics
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! String manipulation
|
//! String manipulation
|
||||||
//!
|
//!
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
use core::char::{escape_unicode, escape_default};
|
use core::char::{escape_unicode, escape_default};
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15677
|
||||||
|
|
||||||
//! Simple getopt alternative.
|
//! Simple getopt alternative.
|
||||||
//!
|
//!
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// FIXME: this file probably shouldn't exist
|
// FIXME: this file probably shouldn't exist
|
||||||
|
// ignore-lexer-test FIXME #15677
|
||||||
|
|
||||||
#![macro_escape]
|
#![macro_escape]
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
//! Windows specific console TTY implementation
|
//! Windows specific console TTY implementation
|
||||||
//!
|
//!
|
||||||
//! This module contains the implementation of a Windows specific console TTY.
|
//! 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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! The Gamma and derived distributions.
|
//! The Gamma and derived distributions.
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! This crate provides a native implementation of regular expressions that is
|
//! This crate provides a native implementation of regular expressions that is
|
||||||
//! heavily based on RE2 both in syntax and in implementation. Notably,
|
//! heavily based on RE2 both in syntax and in implementation. Notably,
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
use regex::{Regex, NoExpand};
|
use regex::{Regex, NoExpand};
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15677
|
||||||
|
|
||||||
use core::prelude::*;
|
use core::prelude::*;
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! Base64 binary-to-text encoding
|
//! Base64 binary-to-text encoding
|
||||||
use std::str;
|
use std::str;
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! Hex binary-to-text encoding
|
//! Hex binary-to-text encoding
|
||||||
use std::str;
|
use std::str;
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! Operations on ASCII strings and characters
|
//! Operations on ASCII strings and characters
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
//! Unordered containers, implemented as hash-tables (`HashSet` and `HashMap` types)
|
//! Unordered containers, implemented as hash-tables (`HashSet` and `HashMap` types)
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
//! Buffering wrappers for I/O traits
|
//! Buffering wrappers for I/O traits
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
/*! Synchronous File I/O
|
/*! Synchronous File I/O
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! Readers and Writers for in-memory buffers
|
//! Readers and Writers for in-memory buffers
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
// FIXME: cover these topics:
|
// FIXME: cover these topics:
|
||||||
// path, reader, writer, stream, raii (close not needed),
|
// path, reader, writer, stream, raii (close not needed),
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
#![allow(missing_doc)]
|
#![allow(missing_doc)]
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
//! Windows file path handling
|
//! Windows file path handling
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
//! This is an Earley-like parser, without support for in-grammar nonterminals,
|
//! 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
|
//! 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.
|
/// also called a broken-down time value.
|
||||||
#[deriving(Clone, PartialEq, Show)]
|
#[deriving(Clone, PartialEq, Show)]
|
||||||
pub struct Tm {
|
pub struct Tm {
|
||||||
/// Seconds after the minute – [0, 60]
|
/// Seconds after the minute - [0, 60]
|
||||||
pub tm_sec: i32,
|
pub tm_sec: i32,
|
||||||
|
|
||||||
/// Minutes after the hour – [0, 59]
|
/// Minutes after the hour - [0, 59]
|
||||||
pub tm_min: i32,
|
pub tm_min: i32,
|
||||||
|
|
||||||
/// Hours after midnight – [0, 23]
|
/// Hours after midnight - [0, 23]
|
||||||
pub tm_hour: i32,
|
pub tm_hour: i32,
|
||||||
|
|
||||||
/// Day of the month – [1, 31]
|
/// Day of the month - [1, 31]
|
||||||
pub tm_mday: i32,
|
pub tm_mday: i32,
|
||||||
|
|
||||||
/// Months since January – [0, 11]
|
/// Months since January - [0, 11]
|
||||||
pub tm_mon: i32,
|
pub tm_mon: i32,
|
||||||
|
|
||||||
/// Years since 1900
|
/// Years since 1900
|
||||||
pub tm_year: i32,
|
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,
|
pub tm_wday: i32,
|
||||||
|
|
||||||
/// Days since January 1 – [0, 365]
|
/// Days since January 1 - [0, 365]
|
||||||
pub tm_yday: i32,
|
pub tm_yday: i32,
|
||||||
|
|
||||||
/// Daylight Saving Time flag.
|
/// Daylight Saving Time flag.
|
||||||
@ -240,7 +240,7 @@ pub struct Tm {
|
|||||||
/// for U.S. Pacific Daylight Time, the value is -7*60*60 = -25200.
|
/// for U.S. Pacific Daylight Time, the value is -7*60*60 = -25200.
|
||||||
pub tm_gmtoff: i32,
|
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,
|
pub tm_nsec: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Unicode-intensive string manipulations.
|
* Unicode-intensive string manipulations.
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
// Microbenchmarks for various functions in std and extra
|
// Microbenchmarks for various functions in std and extra
|
||||||
|
|
||||||
#![feature(macro_rules)]
|
#![feature(macro_rules)]
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
||||||
|
|
||||||
// no-pretty-expanded FIXME #15189
|
// no-pretty-expanded FIXME #15189
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
extern crate time;
|
extern crate time;
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
// This also serves as a pipes test, because Arcs are implemented with pipes.
|
||||||
|
|
||||||
// no-pretty-expanded FIXME #15189
|
// no-pretty-expanded FIXME #15189
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
extern crate time;
|
extern crate time;
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
// Multi-language Perlin noise benchmark.
|
// Multi-language Perlin noise benchmark.
|
||||||
// See https://github.com/nsf/pnoise for timings and alternative implementations.
|
// See https://github.com/nsf/pnoise for timings and alternative implementations.
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
use std::rand::{Rng, StdRng};
|
use std::rand::{Rng, StdRng};
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
// ignore-tidy-cr
|
// ignore-tidy-cr
|
||||||
// ignore-tidy-tab
|
// ignore-tidy-tab
|
||||||
// pp-exact:block-comment-wchar.pp
|
// pp-exact:block-comment-wchar.pp
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
fn f() {
|
fn f() {
|
||||||
fn nested() {
|
fn nested() {
|
||||||
/*
|
/*
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
// ignore-tidy-cr
|
// ignore-tidy-cr
|
||||||
// ignore-tidy-tab
|
// ignore-tidy-tab
|
||||||
// pp-exact:block-comment-wchar.pp
|
// pp-exact:block-comment-wchar.pp
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
fn f() {
|
fn f() {
|
||||||
fn nested() {
|
fn nested() {
|
||||||
/*
|
/*
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
|
|
||||||
static FOO: u8 = b'\xF0';
|
static FOO: u8 = b'\xF0';
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
|
|
||||||
// Tests that we can call a function bounded over a supertrait from
|
// Tests that we can call a function bounded over a supertrait from
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// no-pretty-expanded unnecessary unsafe block generated
|
// no-pretty-expanded unnecessary unsafe block generated
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
#![feature(macro_rules, managed_boxes)]
|
#![feature(macro_rules, managed_boxes)]
|
||||||
#![deny(warnings)]
|
#![deny(warnings)]
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let x = 1i;
|
let x = 1i;
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
// Tests that match expression handles overlapped literal and range
|
// Tests that match expression handles overlapped literal and range
|
||||||
// properly in the presence of guard function.
|
// properly in the presence of guard function.
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-test
|
// ignore-test
|
||||||
|
// ignore-lexer-test FIXME #15881
|
||||||
|
|
||||||
// notes on this test case:
|
// notes on this test case:
|
||||||
// On Thu, Apr 18, 2013-2014 at 6:30 PM, John Clements <clements@brinckerhoff.org> wrote:
|
// 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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
#![feature(unsafe_destructor)]
|
#![feature(unsafe_destructor)]
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
trait U { fn f(self); }
|
trait U { fn f(self); }
|
||||||
impl U for int { fn f(self) {} }
|
impl U for int { fn f(self) {} }
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
type FontTableTag = u32;
|
type FontTableTag = u32;
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
trait Fooable {
|
trait Fooable {
|
||||||
fn yes(self);
|
fn yes(self);
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
// this directory should enforce it.
|
// this directory should enforce it.
|
||||||
|
|
||||||
// ignore-pretty
|
// ignore-pretty
|
||||||
|
// ignore-lexer-test FIXME #15882
|
||||||
|
|
||||||
/// Doc comment that ends in CRLF
|
/// Doc comment that ends in CRLF
|
||||||
pub fn foo() {}
|
pub fn foo() {}
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
|
|
||||||
#![forbid(non_camel_case_types)]
|
#![forbid(non_camel_case_types)]
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
match 5u {
|
match 5u {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
// Test that multibyte characters don't crash the compiler
|
// Test that multibyte characters don't crash the compiler
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
|
Binary file not shown.
@ -10,5 +10,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-pretty: `expand` addes some preludes before shebang
|
// ignore-pretty: `expand` addes some preludes before shebang
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15878
|
||||||
|
|
||||||
pub fn main() { println!("Hello World"); }
|
pub fn main() { println!("Hello World"); }
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
|
pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
|
||||||
pub struct Floats { a: f64, b: u8, c: f64 }
|
pub struct Floats { a: f64, b: u8, c: f64 }
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15883
|
||||||
|
|
||||||
|
|
||||||
trait to_str {
|
trait to_str {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
pub trait Clone2 {
|
pub trait Clone2 {
|
||||||
/// Returns a copy of the value. The contents of owned pointers
|
/// 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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
|
|
||||||
trait Cat {
|
trait Cat {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15877
|
||||||
|
|
||||||
|
|
||||||
trait Cat {
|
trait Cat {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15879
|
||||||
|
|
||||||
// Test syntax checks for `Sized?` syntax.
|
// Test syntax checks for `Sized?` syntax.
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15879
|
||||||
#![feature(struct_variant)]
|
#![feature(struct_variant)]
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
// This file has utf-8 BOM, it should be compiled normally without error.
|
// 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
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
// no-pretty-expanded FIXME #15189
|
// no-pretty-expanded FIXME #15189
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
//
|
||||||
|
// ignore-lexer-test FIXME #15679
|
||||||
|
|
||||||
|
|
||||||
#![feature(non_ascii_idents)]
|
#![feature(non_ascii_idents)]
|
||||||
|
Loading…
Reference in New Issue
Block a user