Skip to content

Commit 8ea3a76

Browse files
author
Keegan McAllister
committed
---
yaml --- r: 180170 b: refs/heads/tmp c: d428871 h: refs/heads/master v: v3
1 parent ad55ddf commit 8ea3a76

File tree

140 files changed

+657
-2460
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

140 files changed

+657
-2460
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ refs/heads/building: 126db549b038c84269a1e4fe46f051b2c15d6970
3434
refs/heads/beta: 44a287e6eb22ec3c2a687fc156813577464017f7
3535
refs/heads/windistfix: 7608dbad651f02e837ed05eef3d74a6662a6e928
3636
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
37-
refs/heads/tmp: 48767165070ceabb8615b03e396dc093e843ce46
37+
refs/heads/tmp: d4288717c48c61e13d9bed39717101a1782b8cdf

branches/tmp/mk/docs.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ endif
8787

8888
# Check for xelatex
8989

90-
ifneq ($(CFG_XELATEX),)
90+
ifeq ($(CFG_XELATEX),)
9191
CFG_LATEX := $(CFG_XELATEX)
9292
XELATEX = 1
9393
else

branches/tmp/src/doc/reference.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3196,7 +3196,6 @@ stands for a *single* data field, whereas a wildcard `..` stands for *all* the
31963196
fields of a particular variant. For example:
31973197

31983198
```
3199-
#![feature(box_patterns)]
32003199
#![feature(box_syntax)]
32013200
enum List<X> { Nil, Cons(X, Box<List<X>>) }
32023201
@@ -3260,7 +3259,6 @@ the inside of the match.
32603259
An example of a `match` expression:
32613260

32623261
```
3263-
#![feature(box_patterns)]
32643262
#![feature(box_syntax)]
32653263
# fn process_pair(a: i32, b: i32) { }
32663264
# fn process_ten() { }
@@ -3296,7 +3294,6 @@ Subpatterns can also be bound to variables by the use of the syntax `variable @
32963294
subpattern`. For example:
32973295

32983296
```
3299-
#![feature(box_patterns)]
33003297
#![feature(box_syntax)]
33013298
33023299
enum List { Nil, Cons(uint, Box<List>) }

branches/tmp/src/grammar/parser-lalr.y

Lines changed: 83 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,6 @@ extern char *yytext;
177177

178178
%precedence '{' '[' '(' '.'
179179

180-
%precedence RANGE
181-
182180
%start crate
183181

184182
%%
@@ -260,7 +258,11 @@ mod_item
260258

261259
// items that can appear outside of a fn block
262260
item
263-
: stmt_item
261+
: item_static
262+
| item_const
263+
| item_type
264+
| block_item
265+
| view_item
264266
| item_macro
265267
;
266268

@@ -270,7 +272,8 @@ stmt_item
270272
| item_const
271273
| item_type
272274
| block_item
273-
| view_item
275+
| use_item
276+
| extern_fn_item
274277
;
275278

276279
item_static
@@ -292,6 +295,7 @@ view_item
292295
: use_item
293296
| extern_fn_item
294297
| EXTERN CRATE ident ';' { $$ = mk_node("ViewItemExternCrate", 1, $3); }
298+
| EXTERN CRATE ident '=' str ';' { $$ = mk_node("ViewItemExternCrate", 2, $3, $5); }
295299
| EXTERN CRATE str AS ident ';' { $$ = mk_node("ViewItemExternCrate", 2, $3, $5); }
296300
;
297301

@@ -1189,10 +1193,12 @@ maybe_stmts
11891193
//
11901194
// In non-stmts contexts, expr can relax this trichotomy.
11911195
//
1192-
// There is also one other expr subtype: nonparen_expr disallows exprs
1193-
// surrounded by parens (including tuple expressions), this is
1194-
// necessary for BOX (place) expressions, so a parens expr following
1195-
// the BOX is always parsed as the place.
1196+
// There are also two other expr subtypes: first, nonparen_expr
1197+
// disallows exprs surrounded by parens (including tuple expressions),
1198+
// this is necessary for BOX (place) expressions, so a parens expr
1199+
// following the BOX is always parsed as the place. There is also
1200+
// expr_norange used in index_expr, which disallows '..' in
1201+
// expressions as that has special meaning inside of brackets.
11961202

11971203
stmts
11981204
: stmt { $$ = mk_node("stmts", 1, $1); }
@@ -1259,7 +1265,7 @@ nonblock_expr
12591265
| path_expr '{' struct_expr_fields '}' { $$ = mk_node("ExprStruct", 2, $1, $3); }
12601266
| nonblock_expr '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
12611267
| nonblock_expr '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1262-
| nonblock_expr '[' maybe_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
1268+
| nonblock_expr '[' index_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
12631269
| nonblock_expr '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 2, $1, $3); }
12641270
| '[' vec_expr ']' { $$ = mk_node("ExprVec", 1, $2); }
12651271
| '(' maybe_exprs ')' { $$ = mk_node("ExprParen", 1, $2); }
@@ -1301,11 +1307,9 @@ nonblock_expr
13011307
| nonblock_expr DOTDOT { $$ = mk_node("ExprRange", 2, $1, mk_none()); }
13021308
| nonblock_expr DOTDOT expr { $$ = mk_node("ExprRange", 2, $1, $3); }
13031309
| DOTDOT expr { $$ = mk_node("ExprRange", 2, mk_none(), $2); }
1304-
| DOTDOT { $$ = mk_node("ExprRange", 2, mk_none(), mk_none()); }
13051310
| nonblock_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
13061311
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
13071312
| %prec BOXPLACE BOX '(' maybe_expr ')' nonblock_expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1308-
| expr_qualified_path
13091313
| nonblock_prefix_expr
13101314
;
13111315

@@ -1318,7 +1322,7 @@ expr
13181322
| path_expr '{' struct_expr_fields '}' { $$ = mk_node("ExprStruct", 2, $1, $3); }
13191323
| expr '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
13201324
| expr '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1321-
| expr '[' maybe_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
1325+
| expr '[' index_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
13221326
| expr '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 2, $1, $3); }
13231327
| '(' maybe_exprs ')' { $$ = mk_node("ExprParen", 1, $2); }
13241328
| '[' vec_expr ']' { $$ = mk_node("ExprVec", 1, $2); }
@@ -1360,11 +1364,9 @@ expr
13601364
| expr DOTDOT { $$ = mk_node("ExprRange", 2, $1, mk_none()); }
13611365
| expr DOTDOT expr { $$ = mk_node("ExprRange", 2, $1, $3); }
13621366
| DOTDOT expr { $$ = mk_node("ExprRange", 2, mk_none(), $2); }
1363-
| DOTDOT { $$ = mk_node("ExprRange", 2, mk_none(), mk_none()); }
13641367
| expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
13651368
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
13661369
| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 2, $3, $5); }
1367-
| expr_qualified_path
13681370
| block_expr
13691371
| block
13701372
| nonblock_prefix_expr
@@ -1379,7 +1381,7 @@ nonparen_expr
13791381
| path_expr '{' struct_expr_fields '}' { $$ = mk_node("ExprStruct", 2, $1, $3); }
13801382
| nonparen_expr '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
13811383
| nonparen_expr '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1382-
| nonparen_expr '[' maybe_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
1384+
| nonparen_expr '[' index_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
13831385
| nonparen_expr '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 2, $1, $3); }
13841386
| '[' vec_expr ']' { $$ = mk_node("ExprVec", 1, $2); }
13851387
| CONTINUE { $$ = mk_node("ExprAgain", 0); }
@@ -1420,11 +1422,65 @@ nonparen_expr
14201422
| nonparen_expr DOTDOT { $$ = mk_node("ExprRange", 2, $1, mk_none()); }
14211423
| nonparen_expr DOTDOT nonparen_expr { $$ = mk_node("ExprRange", 2, $1, $3); }
14221424
| DOTDOT nonparen_expr { $$ = mk_node("ExprRange", 2, mk_none(), $2); }
1423-
| DOTDOT { $$ = mk_node("ExprRange", 2, mk_none(), mk_none()); }
14241425
| nonparen_expr AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
14251426
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
14261427
| %prec BOXPLACE BOX '(' maybe_expr ')' expr { $$ = mk_node("ExprBox", 1, $3, $5); }
1427-
| expr_qualified_path
1428+
| block_expr
1429+
| block
1430+
| nonblock_prefix_expr
1431+
;
1432+
1433+
expr_norange
1434+
: lit { $$ = mk_node("ExprLit", 1, $1); }
1435+
| %prec IDENT
1436+
path_expr { $$ = mk_node("ExprPath", 1, $1); }
1437+
| SELF { $$ = mk_node("ExprPath", 1, mk_node("ident", 1, mk_atom("self"))); }
1438+
| macro_expr { $$ = mk_node("ExprMac", 1, $1); }
1439+
| path_expr '{' struct_expr_fields '}' { $$ = mk_node("ExprStruct", 2, $1, $3); }
1440+
| expr_norange '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
1441+
| expr_norange '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1442+
| expr_norange '[' index_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
1443+
| expr_norange '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 2, $1, $3); }
1444+
| '(' maybe_exprs ')' { $$ = mk_node("ExprParen", 1, $2); }
1445+
| '[' vec_expr ']' { $$ = mk_node("ExprVec", 1, $2); }
1446+
| CONTINUE { $$ = mk_node("ExprAgain", 0); }
1447+
| CONTINUE ident { $$ = mk_node("ExprAgain", 1, $2); }
1448+
| RETURN { $$ = mk_node("ExprRet", 0); }
1449+
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
1450+
| BREAK { $$ = mk_node("ExprBreak", 0); }
1451+
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1452+
| expr_norange '=' expr_norange { $$ = mk_node("ExprAssign", 2, $1, $3); }
1453+
| expr_norange SHLEQ expr_norange { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
1454+
| expr_norange SHREQ expr_norange { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
1455+
| expr_norange MINUSEQ expr_norange { $$ = mk_node("ExprAssignSub", 2, $1, $3); }
1456+
| expr_norange ANDEQ expr_norange { $$ = mk_node("ExprAssignBitAnd", 2, $1, $3); }
1457+
| expr_norange OREQ expr_norange { $$ = mk_node("ExprAssignBitOr", 2, $1, $3); }
1458+
| expr_norange PLUSEQ expr_norange { $$ = mk_node("ExprAssignAdd", 2, $1, $3); }
1459+
| expr_norange STAREQ expr_norange { $$ = mk_node("ExprAssignMul", 2, $1, $3); }
1460+
| expr_norange SLASHEQ expr_norange { $$ = mk_node("ExprAssignDiv", 2, $1, $3); }
1461+
| expr_norange CARETEQ expr_norange { $$ = mk_node("ExprAssignBitXor", 2, $1, $3); }
1462+
| expr_norange PERCENTEQ expr_norange { $$ = mk_node("ExprAssignRem", 2, $1, $3); }
1463+
| expr_norange OROR expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiOr"), $1, $3); }
1464+
| expr_norange ANDAND expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiAnd"), $1, $3); }
1465+
| expr_norange EQEQ expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiEq"), $1, $3); }
1466+
| expr_norange NE expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiNe"), $1, $3); }
1467+
| expr_norange '<' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiLt"), $1, $3); }
1468+
| expr_norange '>' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiGt"), $1, $3); }
1469+
| expr_norange LE expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiLe"), $1, $3); }
1470+
| expr_norange GE expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiGe"), $1, $3); }
1471+
| expr_norange '|' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiBitOr"), $1, $3); }
1472+
| expr_norange '^' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiBitXor"), $1, $3); }
1473+
| expr_norange '&' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiBitAnd"), $1, $3); }
1474+
| expr_norange SHL expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiShl"), $1, $3); }
1475+
| expr_norange SHR expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiShr"), $1, $3); }
1476+
| expr_norange '+' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiAdd"), $1, $3); }
1477+
| expr_norange '-' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiSub"), $1, $3); }
1478+
| expr_norange '*' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiMul"), $1, $3); }
1479+
| expr_norange '/' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiDiv"), $1, $3); }
1480+
| expr_norange '%' expr_norange { $$ = mk_node("ExprBinary", 3, mk_atom("BiRem"), $1, $3); }
1481+
| expr_norange AS ty { $$ = mk_node("Expr_NorangeCast", 2, $1, $3); }
1482+
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
1483+
| %prec BOXPLACE BOX '(' maybe_expr ')' expr_norange { $$ = mk_node("ExprBox", 2, $3, $5); }
14281484
| block_expr
14291485
| block
14301486
| nonblock_prefix_expr
@@ -1438,7 +1494,7 @@ expr_nostruct
14381494
| macro_expr { $$ = mk_node("ExprMac", 1, $1); }
14391495
| expr_nostruct '.' path_generic_args_with_colons { $$ = mk_node("ExprField", 2, $1, $3); }
14401496
| expr_nostruct '.' LIT_INTEGER { $$ = mk_node("ExprTupleIndex", 1, $1); }
1441-
| expr_nostruct '[' maybe_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
1497+
| expr_nostruct '[' index_expr ']' { $$ = mk_node("ExprIndex", 2, $1, $3); }
14421498
| expr_nostruct '(' maybe_exprs ')' { $$ = mk_node("ExprCall", 2, $1, $3); }
14431499
| '[' vec_expr ']' { $$ = mk_node("ExprVec", 1, $2); }
14441500
| '(' maybe_exprs ')' { $$ = mk_node("ExprParen", 1, $2); }
@@ -1477,14 +1533,12 @@ expr_nostruct
14771533
| expr_nostruct '*' expr_nostruct { $$ = mk_node("ExprBinary", 3, mk_atom("BiMul"), $1, $3); }
14781534
| expr_nostruct '/' expr_nostruct { $$ = mk_node("ExprBinary", 3, mk_atom("BiDiv"), $1, $3); }
14791535
| expr_nostruct '%' expr_nostruct { $$ = mk_node("ExprBinary", 3, mk_atom("BiRem"), $1, $3); }
1480-
| expr_nostruct DOTDOT %prec RANGE { $$ = mk_node("ExprRange", 2, $1, mk_none()); }
1536+
| expr_nostruct DOTDOT { $$ = mk_node("ExprRange", 2, $1, mk_none()); }
14811537
| expr_nostruct DOTDOT expr_nostruct { $$ = mk_node("ExprRange", 2, $1, $3); }
14821538
| DOTDOT expr_nostruct { $$ = mk_node("ExprRange", 2, mk_none(), $2); }
1483-
| DOTDOT { $$ = mk_node("ExprRange", 2, mk_none(), mk_none()); }
14841539
| expr_nostruct AS ty { $$ = mk_node("ExprCast", 2, $1, $3); }
14851540
| BOX nonparen_expr { $$ = mk_node("ExprBox", 1, $2); }
14861541
| %prec BOXPLACE BOX '(' maybe_expr ')' expr_nostruct { $$ = mk_node("ExprBox", 1, $3, $5); }
1487-
| expr_qualified_path
14881542
| block_expr
14891543
| block
14901544
| nonblock_prefix_expr_nostruct
@@ -1512,33 +1566,6 @@ nonblock_prefix_expr
15121566
| proc_expr
15131567
;
15141568

1515-
expr_qualified_path
1516-
: '<' ty_sum AS trait_ref '>' MOD_SEP ident
1517-
{
1518-
$$ = mk_node("ExprQualifiedPath", 3, $2, $4, $7);
1519-
}
1520-
| '<' ty_sum AS trait_ref '>' MOD_SEP ident generic_args
1521-
{
1522-
$$ = mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8);
1523-
}
1524-
| SHL ty_sum AS trait_ref '>' MOD_SEP ident AS trait_ref '>' MOD_SEP ident
1525-
{
1526-
$$ = mk_node("ExprQualifiedPath", 3, mk_node("ExprQualifiedPath", 3, $2, $4, $7), $9, $12);
1527-
}
1528-
| SHL ty_sum AS trait_ref '>' MOD_SEP ident generic_args AS trait_ref '>' MOD_SEP ident
1529-
{
1530-
$$ = mk_node("ExprQualifiedPath", 3, mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8), $10, $13);
1531-
}
1532-
| SHL ty_sum AS trait_ref '>' MOD_SEP ident AS trait_ref '>' MOD_SEP ident generic_args
1533-
{
1534-
$$ = mk_node("ExprQualifiedPath", 4, mk_node("ExprQualifiedPath", 3, $2, $4, $7), $9, $12, $13);
1535-
}
1536-
| SHL ty_sum AS trait_ref '>' MOD_SEP ident generic_args AS trait_ref '>' MOD_SEP ident generic_args
1537-
{
1538-
$$ = mk_node("ExprQualifiedPath", 4, mk_node("ExprQualifiedPath", 4, $2, $4, $7, $8), $10, $13, $14);
1539-
}
1540-
1541-
15421569
lambda_expr
15431570
: %prec LAMBDA
15441571
OROR ret_ty expr { $$ = mk_node("ExprFnBlock", 3, mk_none(), $2, $3); }
@@ -1585,6 +1612,14 @@ vec_expr
15851612
| exprs ';' expr { $$ = mk_node("VecRepeat", 2, $1, $3); }
15861613
;
15871614

1615+
index_expr
1616+
: expr_norange { $$ = mk_node("Index", 1, $1); }
1617+
| expr_norange DOTDOT { $$ = mk_node("SliceToEnd", 1, $1); }
1618+
| DOTDOT expr_norange { $$ = mk_node("SliceFromBeginning", 1, $2); }
1619+
| expr_norange DOTDOT expr_norange { $$ = mk_node("Slice", 2, $1, $3); }
1620+
| %empty { $$ = mk_none(); }
1621+
;
1622+
15881623
struct_expr_fields
15891624
: field_inits
15901625
| field_inits ','

0 commit comments

Comments
 (0)