1752: Always wrap blocks into block expressions r=flodiebold a=matklad

This way, things like function bodies are expressions, and we don't have to single them out

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-09-02 19:20:24 +00:00 committed by GitHub
commit 7faec1c300
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
174 changed files with 9432 additions and 9105 deletions

View file

@ -274,7 +274,7 @@ impl AstBuilder<ast::Block> {
impl AstBuilder<ast::Expr> { impl AstBuilder<ast::Expr> {
fn from_text(text: &str) -> ast::Expr { fn from_text(text: &str) -> ast::Expr {
ast_node_from_file_text(&format!("fn f() {{ {}; }}", text)) ast_node_from_file_text(&format!("const C: () = {};", text))
} }
pub fn unit() -> ast::Expr { pub fn unit() -> ast::Expr {

View file

@ -3,7 +3,8 @@ use hir::db::HirDatabase;
use ra_syntax::{ use ra_syntax::{
ast::{self, AstNode}, ast::{self, AstNode},
SyntaxKind::{ SyntaxKind::{
BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR, WHITESPACE, BLOCK_EXPR, BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR,
WHITESPACE,
}, },
SyntaxNode, TextUnit, SyntaxNode, TextUnit,
}; };
@ -80,10 +81,12 @@ pub(crate) fn introduce_variable(mut ctx: AssistCtx<impl HirDatabase>) -> Option
/// In general that's true for any expression, but in some cases that would produce invalid code. /// In general that's true for any expression, but in some cases that would produce invalid code.
fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> { fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> {
match node.kind() { match node.kind() {
PATH_EXPR => None, PATH_EXPR | LOOP_EXPR => None,
BREAK_EXPR => ast::BreakExpr::cast(node).and_then(|e| e.expr()), BREAK_EXPR => ast::BreakExpr::cast(node).and_then(|e| e.expr()),
RETURN_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()), RETURN_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()),
LOOP_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()), BLOCK_EXPR => {
ast::BlockExpr::cast(node).filter(|it| it.is_standalone()).map(ast::Expr::from)
}
_ => ast::Expr::cast(node), _ => ast::Expr::cast(node),
} }
} }

View file

@ -65,9 +65,9 @@ pub(crate) fn move_arm_cond_to_match_guard(mut ctx: AssistCtx<impl HirDatabase>)
"move condition to match guard", "move condition to match guard",
|edit| { |edit| {
edit.target(if_expr.syntax().text_range()); edit.target(if_expr.syntax().text_range());
let then_only_expr = then_block.statements().next().is_none(); let then_only_expr = then_block.block().and_then(|it| it.statements().next()).is_none();
match &then_block.expr() { match &then_block.block().and_then(|it| it.expr()) {
Some(then_expr) if then_only_expr => { Some(then_expr) if then_only_expr => {
edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text()) edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text())
} }

View file

@ -1,3 +1,4 @@
use format_buf::format;
use hir::db::HirDatabase; use hir::db::HirDatabase;
use ra_fmt::extract_trivial_expression; use ra_fmt::extract_trivial_expression;
use ra_syntax::{ast, AstNode}; use ra_syntax::{ast, AstNode};
@ -25,16 +26,21 @@ pub(crate) fn replace_if_let_with_match(mut ctx: AssistCtx<impl HirDatabase>) ->
ctx.build() ctx.build()
} }
fn build_match_expr(expr: ast::Expr, pat1: ast::Pat, arm1: ast::Block, arm2: ast::Block) -> String { fn build_match_expr(
expr: ast::Expr,
pat1: ast::Pat,
arm1: ast::BlockExpr,
arm2: ast::BlockExpr,
) -> String {
let mut buf = String::new(); let mut buf = String::new();
buf.push_str(&format!("match {} {{\n", expr.syntax().text())); format!(buf, "match {} {{\n", expr.syntax().text());
buf.push_str(&format!(" {} => {}\n", pat1.syntax().text(), format_arm(&arm1))); format!(buf, " {} => {}\n", pat1.syntax().text(), format_arm(&arm1));
buf.push_str(&format!(" _ => {}\n", format_arm(&arm2))); format!(buf, " _ => {}\n", format_arm(&arm2));
buf.push_str("}"); buf.push_str("}");
buf buf
} }
fn format_arm(block: &ast::Block) -> String { fn format_arm(block: &ast::BlockExpr) -> String {
match extract_trivial_expression(block) { match extract_trivial_expression(block) {
None => block.syntax().text().to_string(), None => block.syntax().text().to_string(),
Some(e) => format!("{},", e.syntax().text()), Some(e) => format!("{},", e.syntax().text()),

View file

@ -34,7 +34,8 @@ fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
successors(token.prev_token(), |token| token.prev_token()) successors(token.prev_token(), |token| token.prev_token())
} }
pub fn extract_trivial_expression(block: &ast::Block) -> Option<ast::Expr> { pub fn extract_trivial_expression(expr: &ast::BlockExpr) -> Option<ast::Expr> {
let block = expr.block()?;
let expr = block.expr()?; let expr = block.expr()?;
if expr.syntax().text().contains_char('\n') { if expr.syntax().text().contains_char('\n') {
return None; return None;

View file

@ -119,10 +119,10 @@ where
expr_id: crate::expr::ExprId, expr_id: crate::expr::ExprId,
) -> Option<Source<ast::Expr>> { ) -> Option<Source<ast::Expr>> {
let source_map = self.body_source_map(db); let source_map = self.body_source_map(db);
let expr_syntax = source_map.expr_syntax(expr_id)?; let expr_syntax = source_map.expr_syntax(expr_id)?.a()?;
let source = self.source(db); let source = self.source(db);
let node = expr_syntax.to_node(&source.ast.syntax()); let ast = expr_syntax.to_node(&source.ast.syntax());
ast::Expr::cast(node).map(|ast| Source { file_id: source.file_id, ast }) Some(Source { file_id: source.file_id, ast })
} }
} }

View file

@ -9,7 +9,7 @@ use ra_syntax::{
self, ArgListOwner, ArrayExprKind, LiteralKind, LoopBodyOwner, NameOwner, self, ArgListOwner, ArrayExprKind, LiteralKind, LoopBodyOwner, NameOwner,
TypeAscriptionOwner, TypeAscriptionOwner,
}, },
AstNode, AstPtr, SyntaxNodePtr, AstNode, AstPtr,
}; };
use test_utils::tested_by; use test_utils::tested_by;
@ -56,13 +56,14 @@ pub struct Body {
/// file, so that we don't recompute types whenever some whitespace is typed. /// file, so that we don't recompute types whenever some whitespace is typed.
#[derive(Default, Debug, Eq, PartialEq)] #[derive(Default, Debug, Eq, PartialEq)]
pub struct BodySourceMap { pub struct BodySourceMap {
expr_map: FxHashMap<SyntaxNodePtr, ExprId>, expr_map: FxHashMap<ExprPtr, ExprId>,
expr_map_back: ArenaMap<ExprId, SyntaxNodePtr>, expr_map_back: ArenaMap<ExprId, ExprPtr>,
pat_map: FxHashMap<PatPtr, PatId>, pat_map: FxHashMap<PatPtr, PatId>,
pat_map_back: ArenaMap<PatId, PatPtr>, pat_map_back: ArenaMap<PatId, PatPtr>,
field_map: FxHashMap<(ExprId, usize), AstPtr<ast::RecordField>>, field_map: FxHashMap<(ExprId, usize), AstPtr<ast::RecordField>>,
} }
type ExprPtr = Either<AstPtr<ast::Expr>, AstPtr<ast::RecordField>>;
type PatPtr = Either<AstPtr<ast::Pat>, AstPtr<ast::SelfParam>>; type PatPtr = Either<AstPtr<ast::Pat>, AstPtr<ast::SelfParam>>;
impl Body { impl Body {
@ -128,16 +129,12 @@ impl Index<PatId> for Body {
} }
impl BodySourceMap { impl BodySourceMap {
pub(crate) fn expr_syntax(&self, expr: ExprId) -> Option<SyntaxNodePtr> { pub(crate) fn expr_syntax(&self, expr: ExprId) -> Option<ExprPtr> {
self.expr_map_back.get(expr).cloned() self.expr_map_back.get(expr).cloned()
} }
pub(crate) fn syntax_expr(&self, ptr: SyntaxNodePtr) -> Option<ExprId> {
self.expr_map.get(&ptr).cloned()
}
pub(crate) fn node_expr(&self, node: &ast::Expr) -> Option<ExprId> { pub(crate) fn node_expr(&self, node: &ast::Expr) -> Option<ExprId> {
self.expr_map.get(&SyntaxNodePtr::new(node.syntax())).cloned() self.expr_map.get(&Either::A(AstPtr::new(node))).cloned()
} }
pub(crate) fn pat_syntax(&self, pat: PatId) -> Option<PatPtr> { pub(crate) fn pat_syntax(&self, pat: PatId) -> Option<PatPtr> {
@ -575,11 +572,12 @@ where
current_file_id: file_id, current_file_id: file_id,
} }
} }
fn alloc_expr(&mut self, expr: Expr, syntax_ptr: SyntaxNodePtr) -> ExprId { fn alloc_expr(&mut self, expr: Expr, ptr: AstPtr<ast::Expr>) -> ExprId {
let ptr = Either::A(ptr);
let id = self.exprs.alloc(expr); let id = self.exprs.alloc(expr);
if self.current_file_id == self.original_file_id { if self.current_file_id == self.original_file_id {
self.source_map.expr_map.insert(syntax_ptr, id); self.source_map.expr_map.insert(ptr, id);
self.source_map.expr_map_back.insert(id, syntax_ptr); self.source_map.expr_map_back.insert(id, ptr);
} }
id id
} }
@ -601,7 +599,7 @@ where
} }
fn collect_expr(&mut self, expr: ast::Expr) -> ExprId { fn collect_expr(&mut self, expr: ast::Expr) -> ExprId {
let syntax_ptr = SyntaxNodePtr::new(expr.syntax()); let syntax_ptr = AstPtr::new(&expr);
match expr { match expr {
ast::Expr::IfExpr(e) => { ast::Expr::IfExpr(e) => {
let then_branch = self.collect_block_opt(e.then_branch()); let then_branch = self.collect_block_opt(e.then_branch());
@ -640,10 +638,10 @@ where
self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr) self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr)
} }
ast::Expr::TryBlockExpr(e) => { ast::Expr::TryBlockExpr(e) => {
let body = self.collect_block_opt(e.block()); let body = self.collect_block_opt(e.body());
self.alloc_expr(Expr::TryBlock { body }, syntax_ptr) self.alloc_expr(Expr::TryBlock { body }, syntax_ptr)
} }
ast::Expr::BlockExpr(e) => self.collect_block_opt(e.block()), ast::Expr::BlockExpr(e) => self.collect_block(e),
ast::Expr::LoopExpr(e) => { ast::Expr::LoopExpr(e) => {
let body = self.collect_block_opt(e.loop_body()); let body = self.collect_block_opt(e.loop_body());
self.alloc_expr(Expr::Loop { body }, syntax_ptr) self.alloc_expr(Expr::Loop { body }, syntax_ptr)
@ -739,7 +737,7 @@ where
ast::Expr::ParenExpr(e) => { ast::Expr::ParenExpr(e) => {
let inner = self.collect_expr_opt(e.expr()); let inner = self.collect_expr_opt(e.expr());
// make the paren expr point to the inner expression as well // make the paren expr point to the inner expression as well
self.source_map.expr_map.insert(syntax_ptr, inner); self.source_map.expr_map.insert(Either::A(syntax_ptr), inner);
inner inner
} }
ast::Expr::ReturnExpr(e) => { ast::Expr::ReturnExpr(e) => {
@ -763,12 +761,9 @@ where
} else if let Some(nr) = field.name_ref() { } else if let Some(nr) = field.name_ref() {
// field shorthand // field shorthand
let id = self.exprs.alloc(Expr::Path(Path::from_name_ref(&nr))); let id = self.exprs.alloc(Expr::Path(Path::from_name_ref(&nr)));
self.source_map let ptr = Either::B(AstPtr::new(&field));
.expr_map self.source_map.expr_map.insert(ptr, id);
.insert(SyntaxNodePtr::new(nr.syntax()), id); self.source_map.expr_map_back.insert(id, ptr);
self.source_map
.expr_map_back
.insert(id, SyntaxNodePtr::new(nr.syntax()));
id id
} else { } else {
self.exprs.alloc(Expr::Missing) self.exprs.alloc(Expr::Missing)
@ -942,7 +937,12 @@ where
} }
} }
fn collect_block(&mut self, block: ast::Block) -> ExprId { fn collect_block(&mut self, expr: ast::BlockExpr) -> ExprId {
let syntax_node_ptr = AstPtr::new(&expr.clone().into());
let block = match expr.block() {
Some(block) => block,
None => return self.alloc_expr(Expr::Missing, syntax_node_ptr),
};
let statements = block let statements = block
.statements() .statements()
.map(|s| match s { .map(|s| match s {
@ -956,11 +956,11 @@ where
}) })
.collect(); .collect();
let tail = block.expr().map(|e| self.collect_expr(e)); let tail = block.expr().map(|e| self.collect_expr(e));
self.alloc_expr(Expr::Block { statements, tail }, SyntaxNodePtr::new(block.syntax())) self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr)
} }
fn collect_block_opt(&mut self, block: Option<ast::Block>) -> ExprId { fn collect_block_opt(&mut self, expr: Option<ast::BlockExpr>) -> ExprId {
if let Some(block) = block { if let Some(block) = expr {
self.collect_block(block) self.collect_block(block)
} else { } else {
self.exprs.alloc(Expr::Missing) self.exprs.alloc(Expr::Missing)

View file

@ -172,7 +172,7 @@ fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut ExprScopes, scope
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use ra_db::SourceDatabase; use ra_db::SourceDatabase;
use ra_syntax::{algo::find_node_at_offset, ast, AstNode, SyntaxNodePtr}; use ra_syntax::{algo::find_node_at_offset, ast, AstNode};
use test_utils::{assert_eq_text, extract_offset}; use test_utils::{assert_eq_text, extract_offset};
use crate::{mock::MockDatabase, source_binder::SourceAnalyzer}; use crate::{mock::MockDatabase, source_binder::SourceAnalyzer};
@ -194,8 +194,7 @@ mod tests {
let analyzer = SourceAnalyzer::new(&db, file_id, marker.syntax(), None); let analyzer = SourceAnalyzer::new(&db, file_id, marker.syntax(), None);
let scopes = analyzer.scopes(); let scopes = analyzer.scopes();
let expr_id = let expr_id = analyzer.body_source_map().node_expr(&marker.into()).unwrap();
analyzer.body_source_map().syntax_expr(SyntaxNodePtr::new(marker.syntax())).unwrap();
let scope = scopes.scope_for(expr_id); let scope = scopes.scope_for(expr_id);
let actual = scopes let actual = scopes

View file

@ -1,7 +1,7 @@
use rustc_hash::FxHashSet;
use std::sync::Arc; use std::sync::Arc;
use ra_syntax::ast::{AstNode, RecordLit}; use ra_syntax::ast::{self, AstNode};
use rustc_hash::FxHashSet;
use super::{Expr, ExprId, RecordLitField}; use super::{Expr, ExprId, RecordLitField};
use crate::{ use crate::{
@ -13,7 +13,6 @@ use crate::{
ty::{ApplicationTy, InferenceResult, Ty, TypeCtor}, ty::{ApplicationTy, InferenceResult, Ty, TypeCtor},
Function, HasSource, HirDatabase, ModuleDef, Name, Path, PerNs, Resolution, Function, HasSource, HirDatabase, ModuleDef, Name, Path, PerNs, Resolution,
}; };
use ra_syntax::ast;
pub(crate) struct ExprValidator<'a, 'b: 'a> { pub(crate) struct ExprValidator<'a, 'b: 'a> {
func: Function, func: Function,
@ -84,8 +83,12 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
let source_file = parse.tree(); let source_file = parse.tree();
if let Some(field_list_node) = source_map if let Some(field_list_node) = source_map
.expr_syntax(id) .expr_syntax(id)
.and_then(|ptr| ptr.a())
.map(|ptr| ptr.to_node(source_file.syntax())) .map(|ptr| ptr.to_node(source_file.syntax()))
.and_then(RecordLit::cast) .and_then(|expr| match expr {
ast::Expr::RecordLit(it) => Some(it),
_ => None,
})
.and_then(|lit| lit.record_field_list()) .and_then(|lit| lit.record_field_list())
{ {
let field_list_ptr = AstPtr::new(&field_list_node); let field_list_ptr = AstPtr::new(&field_list_node);
@ -135,7 +138,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
let source_map = self.func.body_source_map(db); let source_map = self.func.body_source_map(db);
let file_id = self.func.source(db).file_id; let file_id = self.func.source(db).file_id;
if let Some(expr) = source_map.expr_syntax(id).and_then(|n| n.cast::<ast::Expr>()) { if let Some(expr) = source_map.expr_syntax(id).and_then(|n| n.a()) {
self.sink.push(MissingOkInTailExpr { file: file_id, expr }); self.sink.push(MissingOkInTailExpr { file: file_id, expr });
} }
} }

View file

@ -462,8 +462,8 @@ fn scope_for(
node: &SyntaxNode, node: &SyntaxNode,
) -> Option<ScopeId> { ) -> Option<ScopeId> {
node.ancestors() node.ancestors()
.map(|it| SyntaxNodePtr::new(&it)) .filter_map(ast::Expr::cast)
.filter_map(|ptr| source_map.syntax_expr(ptr)) .filter_map(|it| source_map.node_expr(&it))
.find_map(|it| scopes.scope_for(it)) .find_map(|it| scopes.scope_for(it))
} }
@ -475,7 +475,10 @@ fn scope_for_offset(
scopes scopes
.scope_by_expr() .scope_by_expr()
.iter() .iter()
.filter_map(|(id, scope)| Some((source_map.expr_syntax(*id)?, scope))) .filter_map(|(id, scope)| {
let ast_ptr = source_map.expr_syntax(*id)?.a()?;
Some((ast_ptr.syntax_node_ptr(), scope))
})
// find containing scope // find containing scope
.min_by_key(|(ptr, _scope)| { .min_by_key(|(ptr, _scope)| {
(!(ptr.range().start() <= offset && offset <= ptr.range().end()), ptr.range().len()) (!(ptr.range().start() <= offset && offset <= ptr.range().end()), ptr.range().len())
@ -495,7 +498,10 @@ fn adjust(
let child_scopes = scopes let child_scopes = scopes
.scope_by_expr() .scope_by_expr()
.iter() .iter()
.filter_map(|(id, scope)| Some((source_map.expr_syntax(*id)?, scope))) .filter_map(|(id, scope)| {
let ast_ptr = source_map.expr_syntax(*id)?.a()?;
Some((ast_ptr.syntax_node_ptr(), scope))
})
.map(|(ptr, scope)| (ptr.range(), scope)) .map(|(ptr, scope)| (ptr.range(), scope))
.filter(|(range, _)| range.start() <= offset && range.is_subrange(&r) && *range != r); .filter(|(range, _)| range.start() <= offset && range.is_subrange(&r) && *range != r);

View file

@ -3582,7 +3582,7 @@ fn infer(content: &str) -> String {
for (expr, ty) in inference_result.type_of_expr.iter() { for (expr, ty) in inference_result.type_of_expr.iter() {
let syntax_ptr = match body_source_map.expr_syntax(expr) { let syntax_ptr = match body_source_map.expr_syntax(expr) {
Some(sp) => sp, Some(sp) => sp.either(|it| it.syntax_node_ptr(), |it| it.syntax_node_ptr()),
None => continue, None => continue,
}; };
types.push((syntax_ptr, ty)); types.push((syntax_ptr, ty));

View file

@ -123,7 +123,7 @@ fn has_comma_after(node: &SyntaxNode) -> bool {
fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> { fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> {
let block = ast::Block::cast(token.parent())?; let block = ast::Block::cast(token.parent())?;
let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?; let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?;
let expr = extract_trivial_expression(&block)?; let expr = extract_trivial_expression(&block_expr)?;
let block_range = block_expr.syntax().text_range(); let block_range = block_expr.syntax().text_range();
let mut buf = expr.syntax().text().to_string(); let mut buf = expr.syntax().text().to_string();

View file

@ -116,6 +116,7 @@ SOURCE_FILE@[0; 11)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 11)
BLOCK@[9; 11) BLOCK@[9; 11)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
R_CURLY@[10; 11) "}" R_CURLY@[10; 11) "}"
@ -148,6 +149,7 @@ SOURCE_FILE@[0; 60)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 60)
BLOCK@[10; 60) BLOCK@[10; 60)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "
@ -190,6 +192,7 @@ FN_DEF@[0; 11)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 11)
BLOCK@[9; 11) BLOCK@[9; 11)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
R_CURLY@[10; 11) "}" R_CURLY@[10; 11) "}"
@ -258,6 +261,7 @@ SOURCE_FILE@[0; 12)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 12)
BLOCK@[9; 12) BLOCK@[9; 12)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) "\n" WHITESPACE@[10; 11) "\n"
@ -292,6 +296,7 @@ SOURCE_FILE@[0; 12)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 12)
BLOCK@[9; 12) BLOCK@[9; 12)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) "\n" WHITESPACE@[10; 11) "\n"
@ -325,6 +330,7 @@ SOURCE_FILE@[0; 25)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 12)
BLOCK@[9; 12) BLOCK@[9; 12)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) "\n" WHITESPACE@[10; 11) "\n"
@ -339,6 +345,7 @@ SOURCE_FILE@[0; 25)
L_PAREN@[19; 20) "(" L_PAREN@[19; 20) "("
R_PAREN@[20; 21) ")" R_PAREN@[20; 21) ")"
WHITESPACE@[21; 22) " " WHITESPACE@[21; 22) " "
BLOCK_EXPR@[22; 25)
BLOCK@[22; 25) BLOCK@[22; 25)
L_CURLY@[22; 23) "{" L_CURLY@[22; 23) "{"
WHITESPACE@[23; 24) "\n" WHITESPACE@[23; 24) "\n"

View file

@ -678,6 +678,7 @@ fn test_expr_order() {
PARAM_LIST@[5; 7) PARAM_LIST@[5; 7)
L_PAREN@[5; 6) "(" L_PAREN@[5; 6) "("
R_PAREN@[6; 7) ")" R_PAREN@[6; 7) ")"
BLOCK_EXPR@[7; 15)
BLOCK@[7; 15) BLOCK@[7; 15)
L_CURLY@[7; 8) "{" L_CURLY@[7; 8) "{"
EXPR_STMT@[8; 14) EXPR_STMT@[8; 14)

View file

@ -144,7 +144,7 @@ pub(crate) fn reparser(
parent: Option<SyntaxKind>, parent: Option<SyntaxKind>,
) -> Option<fn(&mut Parser)> { ) -> Option<fn(&mut Parser)> {
let res = match node { let res = match node {
BLOCK => expressions::block, BLOCK => expressions::naked_block,
RECORD_FIELD_DEF_LIST => items::record_field_def_list, RECORD_FIELD_DEF_LIST => items::record_field_def_list,
RECORD_FIELD_LIST => items::record_field_list, RECORD_FIELD_LIST => items::record_field_list,
ENUM_VARIANT_LIST => items::enum_variant_list, ENUM_VARIANT_LIST => items::enum_variant_list,

View file

@ -40,6 +40,11 @@ pub(crate) fn block(p: &mut Parser) {
p.error("expected a block"); p.error("expected a block");
return; return;
} }
atom::block_expr(p, None);
}
pub(crate) fn naked_block(p: &mut Parser) {
assert!(p.at(T!['{']));
let m = p.start(); let m = p.start();
p.bump(); p.bump();
expr_block_contents(p); expr_block_contents(p);

View file

@ -463,10 +463,10 @@ fn match_guard(p: &mut Parser) -> CompletedMarker {
// unsafe {}; // unsafe {};
// 'label: {}; // 'label: {};
// } // }
fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { pub(super) fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
assert!(p.at(T!['{'])); assert!(p.at(T!['{']));
let m = m.unwrap_or_else(|| p.start()); let m = m.unwrap_or_else(|| p.start());
block(p); naked_block(p);
m.complete(p, BLOCK_EXPR) m.complete(p, BLOCK_EXPR)
} }

View file

@ -9,12 +9,12 @@ use crate::{
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub enum ElseBranch { pub enum ElseBranch {
Block(ast::Block), Block(ast::BlockExpr),
IfExpr(ast::IfExpr), IfExpr(ast::IfExpr),
} }
impl ast::IfExpr { impl ast::IfExpr {
pub fn then_branch(&self) -> Option<ast::Block> { pub fn then_branch(&self) -> Option<ast::BlockExpr> {
self.blocks().nth(0) self.blocks().nth(0)
} }
pub fn else_branch(&self) -> Option<ElseBranch> { pub fn else_branch(&self) -> Option<ElseBranch> {
@ -28,7 +28,7 @@ impl ast::IfExpr {
Some(res) Some(res)
} }
fn blocks(&self) -> AstChildren<ast::Block> { fn blocks(&self) -> AstChildren<ast::BlockExpr> {
children(self) children(self)
} }
} }
@ -289,6 +289,26 @@ impl ast::Literal {
} }
} }
impl ast::BlockExpr {
/// false if the block is an intrinsic part of the syntax and can't be
/// replaced with arbitrary expression.
///
/// ```not_rust
/// fn foo() { not_stand_alone }
/// const FOO: () = { stand_alone };
/// ```
pub fn is_standalone(&self) -> bool {
let kind = match self.syntax().parent() {
None => return true,
Some(it) => it.kind(),
};
match kind {
FN_DEF | MATCH_ARM | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false,
_ => true,
}
}
}
#[test] #[test]
fn test_literal_with_attr() { fn test_literal_with_attr() {
let parse = ast::SourceFile::parse(r#"const _: &str = { #[attr] "Hello" };"#); let parse = ast::SourceFile::parse(r#"const _: &str = { #[attr] "Hello" };"#);

View file

@ -1003,7 +1003,7 @@ impl FnDef {
pub fn param_list(&self) -> Option<ParamList> { pub fn param_list(&self) -> Option<ParamList> {
AstChildren::new(&self.syntax).next() AstChildren::new(&self.syntax).next()
} }
pub fn body(&self) -> Option<Block> { pub fn body(&self) -> Option<BlockExpr> {
AstChildren::new(&self.syntax).next() AstChildren::new(&self.syntax).next()
} }
pub fn ret_type(&self) -> Option<RetType> { pub fn ret_type(&self) -> Option<RetType> {
@ -3135,7 +3135,7 @@ impl AstNode for TryBlockExpr {
} }
} }
impl TryBlockExpr { impl TryBlockExpr {
pub fn block(&self) -> Option<Block> { pub fn body(&self) -> Option<BlockExpr> {
AstChildren::new(&self.syntax).next() AstChildren::new(&self.syntax).next()
} }
} }

View file

@ -28,7 +28,7 @@ pub trait VisibilityOwner: AstNode {
} }
pub trait LoopBodyOwner: AstNode { pub trait LoopBodyOwner: AstNode {
fn loop_body(&self) -> Option<ast::Block> { fn loop_body(&self) -> Option<ast::BlockExpr> {
child_opt(self) child_opt(self)
} }
} }

View file

@ -275,7 +275,7 @@ Grammar(
"AttrsOwner", "AttrsOwner",
"DocCommentsOwner" "DocCommentsOwner"
], ],
options: [ "ParamList", ["body", "Block"], "RetType" ], options: [ "ParamList", ["body", "BlockExpr"], "RetType" ],
), ),
"RetType": (options: ["TypeRef"]), "RetType": (options: ["TypeRef"]),
"StructDef": ( "StructDef": (
@ -426,7 +426,7 @@ Grammar(
traits: ["LoopBodyOwner"], traits: ["LoopBodyOwner"],
), ),
"TryBlockExpr": ( "TryBlockExpr": (
options: ["Block"], options: [["body", "BlockExpr"]],
), ),
"ForExpr": ( "ForExpr": (
traits: ["LoopBodyOwner"], traits: ["LoopBodyOwner"],

View file

@ -203,7 +203,8 @@ fn api_walkthrough() {
assert_eq!(name.text(), "foo"); assert_eq!(name.text(), "foo");
// Let's get the `1 + 1` expression! // Let's get the `1 + 1` expression!
let block: ast::Block = func.body().unwrap(); let body: ast::BlockExpr = func.body().unwrap();
let block = body.block().unwrap();
let expr: ast::Expr = block.expr().unwrap(); let expr: ast::Expr = block.expr().unwrap();
// Enums are used to group related ast nodes together, and can be used for // Enums are used to group related ast nodes together, and can be used for

View file

@ -97,7 +97,7 @@ pub(crate) fn validate(root: &SyntaxNode) -> Vec<SyntaxError> {
for node in root.descendants() { for node in root.descendants() {
let _ = visitor_ctx(&mut errors) let _ = visitor_ctx(&mut errors)
.visit::<ast::Literal, _>(validate_literal) .visit::<ast::Literal, _>(validate_literal)
.visit::<ast::Block, _>(block::validate_block_node) .visit::<ast::BlockExpr, _>(block::validate_block_expr)
.visit::<ast::FieldExpr, _>(|it, errors| validate_numeric_name(it.name_ref(), errors)) .visit::<ast::FieldExpr, _>(|it, errors| validate_numeric_name(it.name_ref(), errors))
.visit::<ast::RecordField, _>(|it, errors| validate_numeric_name(it.name_ref(), errors)) .visit::<ast::RecordField, _>(|it, errors| validate_numeric_name(it.name_ref(), errors))
.accept(&node); .accept(&node);

View file

@ -5,18 +5,18 @@ use crate::{
SyntaxKind::*, SyntaxKind::*,
}; };
pub(crate) fn validate_block_node(node: ast::Block, errors: &mut Vec<SyntaxError>) { pub(crate) fn validate_block_expr(expr: ast::BlockExpr, errors: &mut Vec<SyntaxError>) {
if let Some(parent) = node.syntax().parent() { if let Some(parent) = expr.syntax().parent() {
match parent.kind() { match parent.kind() {
FN_DEF => return, FN_DEF | EXPR_STMT | BLOCK => return,
BLOCK_EXPR => match parent.parent().map(|v| v.kind()) {
Some(EXPR_STMT) | Some(BLOCK) => return,
_ => {}
},
_ => {} _ => {}
} }
} }
if let Some(block) = expr.block() {
errors.extend( errors.extend(
node.attrs().map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().text_range())), block
.attrs()
.map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().text_range())),
) )
} }
}

View file

@ -25,6 +25,7 @@ SOURCE_FILE@[0; 54)
L_PAREN@[25; 26) "(" L_PAREN@[25; 26) "("
R_PAREN@[26; 27) ")" R_PAREN@[26; 27) ")"
WHITESPACE@[27; 28) " " WHITESPACE@[27; 28) " "
BLOCK_EXPR@[28; 31)
BLOCK@[28; 31) BLOCK@[28; 31)
L_CURLY@[28; 29) "{" L_CURLY@[28; 29) "{"
WHITESPACE@[29; 30) "\n" WHITESPACE@[29; 30) "\n"

View file

@ -20,6 +20,7 @@ SOURCE_FILE@[0; 31)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) "(" L_PAREN@[23; 24) "("
R_PAREN@[24; 25) ")" R_PAREN@[24; 25) ")"
BLOCK_EXPR@[25; 27)
BLOCK@[25; 27) BLOCK@[25; 27)
L_CURLY@[25; 26) "{" L_CURLY@[25; 26) "{"
R_CURLY@[26; 27) "}" R_CURLY@[26; 27) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 95)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 12)
BLOCK@[9; 12) BLOCK@[9; 12)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) "\n" WHITESPACE@[10; 11) "\n"
@ -32,6 +33,7 @@ SOURCE_FILE@[0; 95)
LITERAL@[29; 33) LITERAL@[29; 33)
TRUE_KW@[29; 33) "true" TRUE_KW@[29; 33) "true"
WHITESPACE@[33; 34) " " WHITESPACE@[33; 34) " "
BLOCK_EXPR@[34; 51)
BLOCK@[34; 51) BLOCK@[34; 51)
L_CURLY@[34; 35) "{" L_CURLY@[34; 35) "{"
WHITESPACE@[35; 44) "\n " WHITESPACE@[35; 44) "\n "
@ -42,6 +44,7 @@ SOURCE_FILE@[0; 95)
WHITESPACE@[51; 52) " " WHITESPACE@[51; 52) " "
ELSE_KW@[52; 56) "else" ELSE_KW@[52; 56) "else"
WHITESPACE@[56; 57) " " WHITESPACE@[56; 57) " "
BLOCK_EXPR@[57; 78)
BLOCK@[57; 78) BLOCK@[57; 78)
L_CURLY@[57; 58) "{" L_CURLY@[57; 58) "{"
WHITESPACE@[58; 67) "\n " WHITESPACE@[58; 67) "\n "
@ -67,6 +70,7 @@ SOURCE_FILE@[0; 95)
L_PAREN@[88; 89) "(" L_PAREN@[88; 89) "("
R_PAREN@[89; 90) ")" R_PAREN@[89; 90) ")"
WHITESPACE@[90; 91) " " WHITESPACE@[90; 91) " "
BLOCK_EXPR@[91; 94)
BLOCK@[91; 94) BLOCK@[91; 94)
L_CURLY@[91; 92) "{" L_CURLY@[91; 92) "{"
WHITESPACE@[92; 93) "\n" WHITESPACE@[92; 93) "\n"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 42)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 41)
BLOCK@[10; 41) BLOCK@[10; 41)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -24,6 +24,7 @@ SOURCE_FILE@[0; 23)
NAME_REF@[18; 19) NAME_REF@[18; 19)
IDENT@[18; 19) "T" IDENT@[18; 19) "T"
WHITESPACE@[19; 20) " " WHITESPACE@[19; 20) " "
BLOCK_EXPR@[20; 22)
BLOCK@[20; 22) BLOCK@[20; 22)
L_CURLY@[20; 21) "{" L_CURLY@[20; 21) "{"
R_CURLY@[21; 22) "}" R_CURLY@[21; 22) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 56)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 55)
BLOCK@[9; 55) BLOCK@[9; 55)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -19,6 +19,7 @@ SOURCE_FILE@[0; 47)
IDENT@[12; 15) "i32" IDENT@[12; 15) "i32"
R_PAREN@[15; 16) ")" R_PAREN@[15; 16) ")"
WHITESPACE@[16; 17) " " WHITESPACE@[16; 17) " "
BLOCK_EXPR@[17; 46)
BLOCK@[17; 46) BLOCK@[17; 46)
L_CURLY@[17; 18) "{" L_CURLY@[17; 18) "{"
WHITESPACE@[18; 23) "\n " WHITESPACE@[18; 23) "\n "

View file

@ -32,6 +32,7 @@ SOURCE_FILE@[0; 183)
NAME_REF@[39; 46) NAME_REF@[39; 46)
IDENT@[39; 46) "ScopeId" IDENT@[39; 46) "ScopeId"
WHITESPACE@[46; 47) " " WHITESPACE@[46; 47) " "
BLOCK_EXPR@[47; 161)
BLOCK@[47; 161) BLOCK@[47; 161)
L_CURLY@[47; 48) "{" L_CURLY@[47; 48) "{"
WHITESPACE@[48; 57) "\n " WHITESPACE@[48; 57) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 139)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 138)
BLOCK@[9; 138) BLOCK@[9; 138)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
@ -60,6 +61,7 @@ SOURCE_FILE@[0; 139)
LITERAL@[83; 87) LITERAL@[83; 87)
TRUE_KW@[83; 87) "true" TRUE_KW@[83; 87) "true"
WHITESPACE@[87; 88) " " WHITESPACE@[87; 88) " "
BLOCK_EXPR@[88; 90)
BLOCK@[88; 90) BLOCK@[88; 90)
L_CURLY@[88; 89) "{" L_CURLY@[88; 89) "{"
R_CURLY@[89; 90) "}" R_CURLY@[89; 90) "}"
@ -75,6 +77,7 @@ SOURCE_FILE@[0; 139)
LITERAL@[109; 113) LITERAL@[109; 113)
TRUE_KW@[109; 113) "true" TRUE_KW@[109; 113) "true"
WHITESPACE@[113; 114) " " WHITESPACE@[113; 114) " "
BLOCK_EXPR@[114; 116)
BLOCK@[114; 116) BLOCK@[114; 116)
L_CURLY@[114; 115) "{" L_CURLY@[114; 115) "{"
R_CURLY@[115; 116) "}" R_CURLY@[115; 116) "}"
@ -85,6 +88,7 @@ SOURCE_FILE@[0; 139)
LOOP_EXPR@[129; 136) LOOP_EXPR@[129; 136)
LOOP_KW@[129; 133) "loop" LOOP_KW@[129; 133) "loop"
WHITESPACE@[133; 134) " " WHITESPACE@[133; 134) " "
BLOCK_EXPR@[134; 136)
BLOCK@[134; 136) BLOCK@[134; 136)
L_CURLY@[134; 135) "{" L_CURLY@[134; 135) "{"
R_CURLY@[135; 136) "}" R_CURLY@[135; 136) "}"

View file

@ -11,6 +11,7 @@ SOURCE_FILE@[0; 16)
L_PAREN@[10; 11) "(" L_PAREN@[10; 11) "("
R_PAREN@[11; 12) ")" R_PAREN@[11; 12) ")"
WHITESPACE@[12; 13) " " WHITESPACE@[12; 13) " "
BLOCK_EXPR@[13; 15)
BLOCK@[13; 15) BLOCK@[13; 15)
L_CURLY@[13; 14) "{" L_CURLY@[13; 14) "{"
R_CURLY@[14; 15) "}" R_CURLY@[14; 15) "}"

View file

@ -25,6 +25,7 @@ SOURCE_FILE@[0; 22)
IDENT@[15; 16) "y" IDENT@[15; 16) "y"
R_PAREN@[16; 17) ")" R_PAREN@[16; 17) ")"
WHITESPACE@[17; 18) " " WHITESPACE@[17; 18) " "
BLOCK_EXPR@[18; 21)
BLOCK@[18; 21) BLOCK@[18; 21)
L_CURLY@[18; 19) "{" L_CURLY@[18; 19) "{"
WHITESPACE@[19; 20) "\n" WHITESPACE@[19; 20) "\n"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
L_PAREN@[4; 5) "(" L_PAREN@[4; 5) "("
R_PAREN@[5; 6) ")" R_PAREN@[5; 6) ")"
WHITESPACE@[6; 7) " " WHITESPACE@[6; 7) " "
BLOCK_EXPR@[7; 33)
BLOCK@[7; 33) BLOCK@[7; 33)
L_CURLY@[7; 8) "{" L_CURLY@[7; 8) "{"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
@ -50,6 +51,7 @@ SOURCE_FILE@[0; 112)
L_PAREN@[38; 39) "(" L_PAREN@[38; 39) "("
R_PAREN@[39; 40) ")" R_PAREN@[39; 40) ")"
WHITESPACE@[40; 41) " " WHITESPACE@[40; 41) " "
BLOCK_EXPR@[41; 68)
BLOCK@[41; 68) BLOCK@[41; 68)
L_CURLY@[41; 42) "{" L_CURLY@[41; 42) "{"
WHITESPACE@[42; 43) " " WHITESPACE@[42; 43) " "
@ -99,6 +101,7 @@ SOURCE_FILE@[0; 112)
L_PAREN@[73; 74) "(" L_PAREN@[73; 74) "("
R_PAREN@[74; 75) ")" R_PAREN@[74; 75) ")"
WHITESPACE@[75; 76) " " WHITESPACE@[75; 76) " "
BLOCK_EXPR@[76; 111)
BLOCK@[76; 111) BLOCK@[76; 111)
L_CURLY@[76; 77) "{" L_CURLY@[76; 77) "{"
WHITESPACE@[77; 78) " " WHITESPACE@[77; 78) " "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 94)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 55)
BLOCK@[10; 55) BLOCK@[10; 55)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -61,6 +61,7 @@ SOURCE_FILE@[0; 240)
L_PAREN@[48; 49) "(" L_PAREN@[48; 49) "("
R_PAREN@[49; 50) ")" R_PAREN@[49; 50) ")"
WHITESPACE@[50; 51) " " WHITESPACE@[50; 51) " "
BLOCK_EXPR@[51; 53)
BLOCK@[51; 53) BLOCK@[51; 53)
L_CURLY@[51; 52) "{" L_CURLY@[51; 52) "{"
R_CURLY@[52; 53) "}" R_CURLY@[52; 53) "}"
@ -74,6 +75,7 @@ SOURCE_FILE@[0; 240)
L_PAREN@[62; 63) "(" L_PAREN@[62; 63) "("
R_PAREN@[63; 64) ")" R_PAREN@[63; 64) ")"
WHITESPACE@[64; 65) " " WHITESPACE@[64; 65) " "
BLOCK_EXPR@[65; 239)
BLOCK@[65; 239) BLOCK@[65; 239)
L_CURLY@[65; 66) "{" L_CURLY@[65; 66) "{"
WHITESPACE@[66; 71) "\n " WHITESPACE@[66; 71) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 575)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 574)
BLOCK@[10; 574) BLOCK@[10; 574)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -20,6 +20,7 @@ SOURCE_FILE@[0; 30)
LIFETIME@[23; 25) "\'a" LIFETIME@[23; 25) "\'a"
R_ANGLE@[25; 26) ">" R_ANGLE@[25; 26) ">"
WHITESPACE@[26; 27) "\n" WHITESPACE@[26; 27) "\n"
BLOCK_EXPR@[27; 29)
BLOCK@[27; 29) BLOCK@[27; 29)
L_CURLY@[27; 28) "{" L_CURLY@[27; 28) "{"
R_CURLY@[28; 29) "}" R_CURLY@[28; 29) "}"

View file

@ -73,6 +73,7 @@ SOURCE_FILE@[0; 349)
L_PAREN@[125; 126) "(" L_PAREN@[125; 126) "("
R_PAREN@[126; 127) ")" R_PAREN@[126; 127) ")"
WHITESPACE@[127; 128) " " WHITESPACE@[127; 128) " "
BLOCK_EXPR@[128; 348)
BLOCK@[128; 348) BLOCK@[128; 348)
L_CURLY@[128; 129) "{" L_CURLY@[128; 129) "{"
WHITESPACE@[129; 134) "\n " WHITESPACE@[129; 134) "\n "

View file

@ -19,6 +19,7 @@ SOURCE_FILE@[0; 24)
IDENT@[10; 11) "A" IDENT@[10; 11) "A"
R_PAREN@[11; 12) ")" R_PAREN@[11; 12) ")"
WHITESPACE@[12; 13) " " WHITESPACE@[12; 13) " "
BLOCK_EXPR@[13; 23)
BLOCK@[13; 23) BLOCK@[13; 23)
L_CURLY@[13; 14) "{" L_CURLY@[13; 14) "{"
WHITESPACE@[14; 19) "\n " WHITESPACE@[14; 19) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 350)
L_PAREN@[8; 9) "(" L_PAREN@[8; 9) "("
R_PAREN@[9; 10) ")" R_PAREN@[9; 10) ")"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "
BLOCK_EXPR@[11; 349)
BLOCK@[11; 349) BLOCK@[11; 349)
L_CURLY@[11; 12) "{" L_CURLY@[11; 12) "{"
WHITESPACE@[12; 17) "\n " WHITESPACE@[12; 17) "\n "
@ -49,6 +50,7 @@ SOURCE_FILE@[0; 350)
LITERAL@[137; 141) LITERAL@[137; 141)
TRUE_KW@[137; 141) "true" TRUE_KW@[137; 141) "true"
WHITESPACE@[141; 142) " " WHITESPACE@[141; 142) " "
BLOCK_EXPR@[142; 257)
BLOCK@[142; 257) BLOCK@[142; 257)
L_CURLY@[142; 143) "{" L_CURLY@[142; 143) "{"
WHITESPACE@[143; 152) "\n " WHITESPACE@[143; 152) "\n "
@ -87,6 +89,7 @@ SOURCE_FILE@[0; 350)
LITERAL@[268; 272) LITERAL@[268; 272)
TRUE_KW@[268; 272) "true" TRUE_KW@[268; 272) "true"
WHITESPACE@[272; 273) " " WHITESPACE@[272; 273) " "
BLOCK_EXPR@[273; 347)
BLOCK@[273; 347) BLOCK@[273; 347)
L_CURLY@[273; 274) "{" L_CURLY@[273; 274) "{"
WHITESPACE@[274; 283) "\n " WHITESPACE@[274; 283) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 293)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 292)
BLOCK@[9; 292) BLOCK@[9; 292)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 89)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 88)
BLOCK@[9; 88) BLOCK@[9; 88)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 91)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 89)
BLOCK@[10; 89) BLOCK@[10; 89)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 30)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 29)
BLOCK@[10; 29) BLOCK@[10; 29)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -7,6 +7,7 @@ SOURCE_FILE@[0; 33)
PARAM_LIST@[6; 8) PARAM_LIST@[6; 8)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
BLOCK_EXPR@[8; 10)
BLOCK@[8; 10) BLOCK@[8; 10)
L_CURLY@[8; 9) "{" L_CURLY@[8; 9) "{"
R_CURLY@[9; 10) "}" R_CURLY@[9; 10) "}"
@ -27,6 +28,7 @@ SOURCE_FILE@[0; 33)
PARAM_LIST@[28; 30) PARAM_LIST@[28; 30)
L_PAREN@[28; 29) "(" L_PAREN@[28; 29) "("
R_PAREN@[29; 30) ")" R_PAREN@[29; 30) ")"
BLOCK_EXPR@[30; 32)
BLOCK@[30; 32) BLOCK@[30; 32)
L_CURLY@[30; 31) "{" L_CURLY@[30; 31) "{"
R_CURLY@[31; 32) "}" R_CURLY@[31; 32) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 30)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 29)
BLOCK@[9; 29) BLOCK@[9; 29)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 20)
BLOCK@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 48)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 47)
BLOCK@[9; 47) BLOCK@[9; 47)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 14) "\n " WHITESPACE@[10; 14) "\n "
@ -44,6 +45,7 @@ SOURCE_FILE@[0; 48)
LITERAL@[37; 41) LITERAL@[37; 41)
TRUE_KW@[37; 41) "true" TRUE_KW@[37; 41) "true"
WHITESPACE@[41; 42) " " WHITESPACE@[41; 42) " "
BLOCK_EXPR@[42; 44)
BLOCK@[42; 44) BLOCK@[42; 44)
L_CURLY@[42; 43) "{" L_CURLY@[42; 43) "{"
R_CURLY@[43; 44) "}" R_CURLY@[43; 44) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 47)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 46)
BLOCK@[9; 46) BLOCK@[9; 46)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -13,6 +13,7 @@ SOURCE_FILE@[0; 50)
L_PAREN@[19; 20) "(" L_PAREN@[19; 20) "("
R_PAREN@[20; 21) ")" R_PAREN@[20; 21) ")"
WHITESPACE@[21; 22) " " WHITESPACE@[21; 22) " "
BLOCK_EXPR@[22; 24)
BLOCK@[22; 24) BLOCK@[22; 24)
L_CURLY@[22; 23) "{" L_CURLY@[22; 23) "{"
R_CURLY@[23; 24) "}" R_CURLY@[23; 24) "}"
@ -31,6 +32,7 @@ SOURCE_FILE@[0; 50)
L_PAREN@[44; 45) "(" L_PAREN@[44; 45) "("
R_PAREN@[45; 46) ")" R_PAREN@[45; 46) ")"
WHITESPACE@[46; 47) " " WHITESPACE@[46; 47) " "
BLOCK_EXPR@[47; 49)
BLOCK@[47; 49) BLOCK@[47; 49)
L_CURLY@[47; 48) "{" L_CURLY@[47; 48) "{"
R_CURLY@[48; 49) "}" R_CURLY@[48; 49) "}"

View file

@ -44,6 +44,7 @@ SOURCE_FILE@[0; 62)
L_PAREN@[54; 55) "(" L_PAREN@[54; 55) "("
R_PAREN@[55; 56) ")" R_PAREN@[55; 56) ")"
WHITESPACE@[56; 57) " " WHITESPACE@[56; 57) " "
BLOCK_EXPR@[57; 59)
BLOCK@[57; 59) BLOCK@[57; 59)
L_CURLY@[57; 58) "{" L_CURLY@[57; 58) "{"
R_CURLY@[58; 59) "}" R_CURLY@[58; 59) "}"

View file

@ -50,6 +50,7 @@ SOURCE_FILE@[0; 83)
L_PAREN@[56; 57) "(" L_PAREN@[56; 57) "("
R_PAREN@[57; 58) ")" R_PAREN@[57; 58) ")"
WHITESPACE@[58; 59) " " WHITESPACE@[58; 59) " "
BLOCK_EXPR@[59; 61)
BLOCK@[59; 61) BLOCK@[59; 61)
L_CURLY@[59; 60) "{" L_CURLY@[59; 60) "{"
R_CURLY@[60; 61) "}" R_CURLY@[60; 61) "}"

View file

@ -54,6 +54,7 @@ SOURCE_FILE@[0; 49)
IDENT@[40; 43) "str" IDENT@[40; 43) "str"
R_PAREN@[43; 44) ")" R_PAREN@[43; 44) ")"
WHITESPACE@[44; 45) "\n" WHITESPACE@[44; 45) "\n"
BLOCK_EXPR@[45; 48)
BLOCK@[45; 48) BLOCK@[45; 48)
L_CURLY@[45; 46) "{" L_CURLY@[45; 46) "{"
WHITESPACE@[46; 47) " " WHITESPACE@[46; 47) " "

View file

@ -31,6 +31,7 @@ SOURCE_FILE@[0; 28)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) "(" L_PAREN@[23; 24) "("
R_PAREN@[24; 25) ")" R_PAREN@[24; 25) ")"
BLOCK_EXPR@[25; 27)
BLOCK@[25; 27) BLOCK@[25; 27)
L_CURLY@[25; 26) "{" L_CURLY@[25; 26) "{"
R_CURLY@[26; 27) "}" R_CURLY@[26; 27) "}"

View file

@ -22,6 +22,7 @@ SOURCE_FILE@[0; 128)
SELF_KW@[18; 22) "self" SELF_KW@[18; 22) "self"
R_PAREN@[22; 23) ")" R_PAREN@[22; 23) ")"
WHITESPACE@[23; 24) " " WHITESPACE@[23; 24) " "
BLOCK_EXPR@[24; 26)
BLOCK@[24; 26) BLOCK@[24; 26)
L_CURLY@[24; 25) "{" L_CURLY@[24; 25) "{"
R_CURLY@[25; 26) "}" R_CURLY@[25; 26) "}"
@ -39,6 +40,7 @@ SOURCE_FILE@[0; 128)
COMMA@[41; 42) "," COMMA@[41; 42) ","
R_PAREN@[42; 43) ")" R_PAREN@[42; 43) ")"
WHITESPACE@[43; 44) " " WHITESPACE@[43; 44) " "
BLOCK_EXPR@[44; 46)
BLOCK@[44; 46) BLOCK@[44; 46)
L_CURLY@[44; 45) "{" L_CURLY@[44; 45) "{"
R_CURLY@[45; 46) "}" R_CURLY@[45; 46) "}"
@ -58,6 +60,7 @@ SOURCE_FILE@[0; 128)
COMMA@[64; 65) "," COMMA@[64; 65) ","
R_PAREN@[65; 66) ")" R_PAREN@[65; 66) ")"
WHITESPACE@[66; 67) " " WHITESPACE@[66; 67) " "
BLOCK_EXPR@[67; 69)
BLOCK@[67; 69) BLOCK@[67; 69)
L_CURLY@[67; 68) "{" L_CURLY@[67; 68) "{"
R_CURLY@[68; 69) "}" R_CURLY@[68; 69) "}"
@ -91,6 +94,7 @@ SOURCE_FILE@[0; 128)
IDENT@[96; 99) "i32" IDENT@[96; 99) "i32"
R_PAREN@[99; 100) ")" R_PAREN@[99; 100) ")"
WHITESPACE@[100; 101) " " WHITESPACE@[100; 101) " "
BLOCK_EXPR@[101; 103)
BLOCK@[101; 103) BLOCK@[101; 103)
L_CURLY@[101; 102) "{" L_CURLY@[101; 102) "{"
R_CURLY@[102; 103) "}" R_CURLY@[102; 103) "}"
@ -108,6 +112,7 @@ SOURCE_FILE@[0; 128)
SELF_KW@[117; 121) "self" SELF_KW@[117; 121) "self"
R_PAREN@[121; 122) ")" R_PAREN@[121; 122) ")"
WHITESPACE@[122; 123) " " WHITESPACE@[122; 123) " "
BLOCK_EXPR@[123; 125)
BLOCK@[123; 125) BLOCK@[123; 125)
L_CURLY@[123; 124) "{" L_CURLY@[123; 124) "{"
R_CURLY@[124; 125) "}" R_CURLY@[124; 125) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 103)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 102)
BLOCK@[9; 102) BLOCK@[9; 102)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 26)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 25)
BLOCK@[9; 25) BLOCK@[9; 25)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
@ -15,6 +16,7 @@ SOURCE_FILE@[0; 26)
LOOP_EXPR@[15; 22) LOOP_EXPR@[15; 22)
LOOP_KW@[15; 19) "loop" LOOP_KW@[15; 19) "loop"
WHITESPACE@[19; 20) " " WHITESPACE@[19; 20) " "
BLOCK_EXPR@[20; 22)
BLOCK@[20; 22) BLOCK@[20; 22)
L_CURLY@[20; 21) "{" L_CURLY@[20; 21) "{"
R_CURLY@[21; 22) "}" R_CURLY@[21; 22) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 48)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 47)
BLOCK@[9; 47) BLOCK@[9; 47)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,12 +8,14 @@ SOURCE_FILE@[0; 69)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 68)
BLOCK@[9; 68) BLOCK@[9; 68)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
LOOP_EXPR@[15; 66) LOOP_EXPR@[15; 66)
LOOP_KW@[15; 19) "loop" LOOP_KW@[15; 19) "loop"
WHITESPACE@[19; 20) " " WHITESPACE@[19; 20) " "
BLOCK_EXPR@[20; 66)
BLOCK@[20; 66) BLOCK@[20; 66)
L_CURLY@[20; 21) "{" L_CURLY@[20; 21) "{"
WHITESPACE@[21; 30) "\n " WHITESPACE@[21; 30) "\n "

View file

@ -31,6 +31,7 @@ SOURCE_FILE@[0; 69)
IDENT@[25; 29) "Self" IDENT@[25; 29) "Self"
R_PAREN@[29; 30) ")" R_PAREN@[29; 30) ")"
WHITESPACE@[30; 31) " " WHITESPACE@[30; 31) " "
BLOCK_EXPR@[31; 33)
BLOCK@[31; 33) BLOCK@[31; 33)
L_CURLY@[31; 32) "{" L_CURLY@[31; 32) "{"
R_CURLY@[32; 33) "}" R_CURLY@[32; 33) "}"
@ -64,6 +65,7 @@ SOURCE_FILE@[0; 69)
R_ANGLE@[61; 62) ">" R_ANGLE@[61; 62) ">"
R_PAREN@[62; 63) ")" R_PAREN@[62; 63) ")"
WHITESPACE@[63; 64) " " WHITESPACE@[63; 64) " "
BLOCK_EXPR@[64; 66)
BLOCK@[64; 66) BLOCK@[64; 66)
L_CURLY@[64; 65) "{" L_CURLY@[64; 65) "{"
R_CURLY@[65; 66) "}" R_CURLY@[65; 66) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 44)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 43)
BLOCK@[9; 43) BLOCK@[9; 43)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -54,6 +54,7 @@ SOURCE_FILE@[0; 89)
L_PAREN@[60; 61) "(" L_PAREN@[60; 61) "("
R_PAREN@[61; 62) ")" R_PAREN@[61; 62) ")"
WHITESPACE@[62; 63) " " WHITESPACE@[62; 63) " "
BLOCK_EXPR@[63; 65)
BLOCK@[63; 65) BLOCK@[63; 65)
L_CURLY@[63; 64) "{" L_CURLY@[63; 64) "{"
R_CURLY@[64; 65) "}" R_CURLY@[64; 65) "}"
@ -70,6 +71,7 @@ SOURCE_FILE@[0; 89)
SELF_KW@[78; 82) "self" SELF_KW@[78; 82) "self"
R_PAREN@[82; 83) ")" R_PAREN@[82; 83) ")"
WHITESPACE@[83; 84) " " WHITESPACE@[83; 84) " "
BLOCK_EXPR@[84; 86)
BLOCK@[84; 86) BLOCK@[84; 86)
L_CURLY@[84; 85) "{" L_CURLY@[84; 85) "{"
R_CURLY@[85; 86) "}" R_CURLY@[85; 86) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 39)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 38)
BLOCK@[10; 38) BLOCK@[10; 38)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 97)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 96)
BLOCK@[9; 96) BLOCK@[9; 96)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 52)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 51)
BLOCK@[10; 51) BLOCK@[10; 51)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 89)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 88)
BLOCK@[9; 88) BLOCK@[9; 88)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 197)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 37)
BLOCK@[9; 37) BLOCK@[9; 37)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "
@ -35,6 +36,7 @@ SOURCE_FILE@[0; 197)
NAME_REF@[28; 32) NAME_REF@[28; 32)
IDENT@[28; 32) "None" IDENT@[28; 32) "None"
WHITESPACE@[32; 33) " " WHITESPACE@[32; 33) " "
BLOCK_EXPR@[33; 35)
BLOCK@[33; 35) BLOCK@[33; 35)
L_CURLY@[33; 34) "{" L_CURLY@[33; 34) "{"
R_CURLY@[34; 35) "}" R_CURLY@[34; 35) "}"
@ -50,6 +52,7 @@ SOURCE_FILE@[0; 197)
L_PAREN@[44; 45) "(" L_PAREN@[44; 45) "("
R_PAREN@[45; 46) ")" R_PAREN@[45; 46) ")"
WHITESPACE@[46; 47) " " WHITESPACE@[46; 47) " "
BLOCK_EXPR@[47; 196)
BLOCK@[47; 196) BLOCK@[47; 196)
L_CURLY@[47; 48) "{" L_CURLY@[47; 48) "{"
WHITESPACE@[48; 53) "\n " WHITESPACE@[48; 53) "\n "
@ -90,6 +93,7 @@ SOURCE_FILE@[0; 197)
NAME_REF@[80; 84) NAME_REF@[80; 84)
IDENT@[80; 84) "None" IDENT@[80; 84) "None"
WHITESPACE@[84; 85) " " WHITESPACE@[84; 85) " "
BLOCK_EXPR@[85; 87)
BLOCK@[85; 87) BLOCK@[85; 87)
L_CURLY@[85; 86) "{" L_CURLY@[85; 86) "{"
R_CURLY@[86; 87) "}" R_CURLY@[86; 87) "}"
@ -121,6 +125,7 @@ SOURCE_FILE@[0; 197)
NAME_REF@[111; 115) NAME_REF@[111; 115)
IDENT@[111; 115) "None" IDENT@[111; 115) "None"
WHITESPACE@[115; 116) " " WHITESPACE@[115; 116) " "
BLOCK_EXPR@[116; 118)
BLOCK@[116; 118) BLOCK@[116; 118)
L_CURLY@[116; 117) "{" L_CURLY@[116; 117) "{"
R_CURLY@[117; 118) "}" R_CURLY@[117; 118) "}"
@ -162,6 +167,7 @@ SOURCE_FILE@[0; 197)
NAME_REF@[153; 157) NAME_REF@[153; 157)
IDENT@[153; 157) "None" IDENT@[153; 157) "None"
WHITESPACE@[157; 158) " " WHITESPACE@[157; 158) " "
BLOCK_EXPR@[158; 160)
BLOCK@[158; 160) BLOCK@[158; 160)
L_CURLY@[158; 159) "{" L_CURLY@[158; 159) "{"
R_CURLY@[159; 160) "}" R_CURLY@[159; 160) "}"
@ -192,6 +198,7 @@ SOURCE_FILE@[0; 197)
NAME_REF@[187; 191) NAME_REF@[187; 191)
IDENT@[187; 191) "None" IDENT@[187; 191) "None"
WHITESPACE@[191; 192) " " WHITESPACE@[191; 192) " "
BLOCK_EXPR@[192; 194)
BLOCK@[192; 194) BLOCK@[192; 194)
L_CURLY@[192; 193) "{" L_CURLY@[192; 193) "{"
R_CURLY@[193; 194) "}" R_CURLY@[193; 194) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 70)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 69)
BLOCK@[9; 69) BLOCK@[9; 69)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
@ -19,6 +20,7 @@ SOURCE_FILE@[0; 70)
LITERAL@[21; 25) LITERAL@[21; 25)
TRUE_KW@[21; 25) "true" TRUE_KW@[21; 25) "true"
WHITESPACE@[25; 26) " " WHITESPACE@[25; 26) " "
BLOCK_EXPR@[26; 28)
BLOCK@[26; 28) BLOCK@[26; 28)
L_CURLY@[26; 27) "{" L_CURLY@[26; 27) "{"
R_CURLY@[27; 28) "}" R_CURLY@[27; 28) "}"
@ -57,6 +59,7 @@ SOURCE_FILE@[0; 70)
L_PAREN@[61; 62) "(" L_PAREN@[61; 62) "("
R_PAREN@[62; 63) ")" R_PAREN@[62; 63) ")"
WHITESPACE@[63; 64) " " WHITESPACE@[63; 64) " "
BLOCK_EXPR@[64; 66)
BLOCK@[64; 66) BLOCK@[64; 66)
L_CURLY@[64; 65) "{" L_CURLY@[64; 65) "{"
R_CURLY@[65; 66) "}" R_CURLY@[65; 66) "}"

View file

@ -8,12 +8,14 @@ SOURCE_FILE@[0; 102)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 101)
BLOCK@[9; 101) BLOCK@[9; 101)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
LOOP_EXPR@[15; 99) LOOP_EXPR@[15; 99)
LOOP_KW@[15; 19) "loop" LOOP_KW@[15; 19) "loop"
WHITESPACE@[19; 20) " " WHITESPACE@[19; 20) " "
BLOCK_EXPR@[20; 99)
BLOCK@[20; 99) BLOCK@[20; 99)
L_CURLY@[20; 21) "{" L_CURLY@[20; 21) "{"
WHITESPACE@[21; 30) "\n " WHITESPACE@[21; 30) "\n "

View file

@ -15,6 +15,7 @@ SOURCE_FILE@[0; 30)
L_PAREN@[24; 25) "(" L_PAREN@[24; 25) "("
R_PAREN@[25; 26) ")" R_PAREN@[25; 26) ")"
WHITESPACE@[26; 27) " " WHITESPACE@[26; 27) " "
BLOCK_EXPR@[27; 29)
BLOCK@[27; 29) BLOCK@[27; 29)
L_CURLY@[27; 28) "{" L_CURLY@[27; 28) "{"
R_CURLY@[28; 29) "}" R_CURLY@[28; 29) "}"

View file

@ -41,6 +41,7 @@ SOURCE_FILE@[0; 71)
L_PAREN@[33; 34) "(" L_PAREN@[33; 34) "("
R_PAREN@[34; 35) ")" R_PAREN@[34; 35) ")"
WHITESPACE@[35; 36) " " WHITESPACE@[35; 36) " "
BLOCK_EXPR@[36; 70)
BLOCK@[36; 70) BLOCK@[36; 70)
L_CURLY@[36; 37) "{" L_CURLY@[36; 37) "{"
WHITESPACE@[37; 38) " " WHITESPACE@[37; 38) " "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 20)
BLOCK@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "

View file

@ -11,6 +11,7 @@ SOURCE_FILE@[0; 71)
L_PAREN@[13; 14) "(" L_PAREN@[13; 14) "("
R_PAREN@[14; 15) ")" R_PAREN@[14; 15) ")"
WHITESPACE@[15; 16) " " WHITESPACE@[15; 16) " "
BLOCK_EXPR@[16; 19)
BLOCK@[16; 19) BLOCK@[16; 19)
L_CURLY@[16; 17) "{" L_CURLY@[16; 17) "{"
WHITESPACE@[17; 18) " " WHITESPACE@[17; 18) " "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 118)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 117)
BLOCK@[9; 117) BLOCK@[9; 117)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
L_PAREN@[4; 5) "(" L_PAREN@[4; 5) "("
R_PAREN@[5; 6) ")" R_PAREN@[5; 6) ")"
WHITESPACE@[6; 7) " " WHITESPACE@[6; 7) " "
BLOCK_EXPR@[7; 20)
BLOCK@[7; 20) BLOCK@[7; 20)
L_CURLY@[7; 8) "{" L_CURLY@[7; 8) "{"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
@ -20,6 +21,7 @@ SOURCE_FILE@[0; 21)
L_PAREN@[13; 14) "(" L_PAREN@[13; 14) "("
R_PAREN@[14; 15) ")" R_PAREN@[14; 15) ")"
WHITESPACE@[15; 16) " " WHITESPACE@[15; 16) " "
BLOCK_EXPR@[16; 18)
BLOCK@[16; 18) BLOCK@[16; 18)
L_CURLY@[16; 17) "{" L_CURLY@[16; 17) "{"
R_CURLY@[17; 18) "}" R_CURLY@[17; 18) "}"

View file

@ -40,6 +40,7 @@ SOURCE_FILE@[0; 35)
PARAM_LIST@[30; 32) PARAM_LIST@[30; 32)
L_PAREN@[30; 31) "(" L_PAREN@[30; 31) "("
R_PAREN@[31; 32) ")" R_PAREN@[31; 32) ")"
BLOCK_EXPR@[32; 34)
BLOCK@[32; 34) BLOCK@[32; 34)
L_CURLY@[32; 33) "{" L_CURLY@[32; 33) "{"
R_CURLY@[33; 34) "}" R_CURLY@[33; 34) "}"

View file

@ -34,6 +34,7 @@ SOURCE_FILE@[0; 58)
LIFETIME@[20; 22) "\'f" LIFETIME@[20; 22) "\'f"
R_ANGLE@[22; 23) ">" R_ANGLE@[22; 23) ">"
WHITESPACE@[23; 24) " " WHITESPACE@[23; 24) " "
BLOCK_EXPR@[24; 26)
BLOCK@[24; 26) BLOCK@[24; 26)
L_CURLY@[24; 25) "{" L_CURLY@[24; 25) "{"
R_CURLY@[25; 26) "}" R_CURLY@[25; 26) "}"
@ -75,6 +76,7 @@ SOURCE_FILE@[0; 58)
LIFETIME@[51; 53) "\'f" LIFETIME@[51; 53) "\'f"
R_ANGLE@[53; 54) ">" R_ANGLE@[53; 54) ">"
WHITESPACE@[54; 55) " " WHITESPACE@[54; 55) " "
BLOCK_EXPR@[55; 57)
BLOCK@[55; 57) BLOCK@[55; 57)
L_CURLY@[55; 56) "{" L_CURLY@[55; 56) "{"
R_CURLY@[56; 57) "}" R_CURLY@[56; 57) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 91)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 90)
BLOCK@[9; 90) BLOCK@[9; 90)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 113)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 112)
BLOCK@[10; 112) BLOCK@[10; 112)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -104,6 +104,7 @@ SOURCE_FILE@[0; 116)
TYPE_BOUND@[110; 112) TYPE_BOUND@[110; 112)
LIFETIME@[110; 112) "\'a" LIFETIME@[110; 112) "\'a"
WHITESPACE@[112; 113) "\n" WHITESPACE@[112; 113) "\n"
BLOCK_EXPR@[113; 115)
BLOCK@[113; 115) BLOCK@[113; 115)
L_CURLY@[113; 114) "{" L_CURLY@[113; 114) "{"
R_CURLY@[114; 115) "}" R_CURLY@[114; 115) "}"

View file

@ -10,6 +10,7 @@ SOURCE_FILE@[0; 18)
L_PAREN@[12; 13) "(" L_PAREN@[12; 13) "("
R_PAREN@[13; 14) ")" R_PAREN@[13; 14) ")"
WHITESPACE@[14; 15) " " WHITESPACE@[14; 15) " "
BLOCK_EXPR@[15; 17)
BLOCK@[15; 17) BLOCK@[15; 17)
L_CURLY@[15; 16) "{" L_CURLY@[15; 16) "{"
R_CURLY@[16; 17) "}" R_CURLY@[16; 17) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
L_PAREN@[7; 8) "(" L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")" R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " " WHITESPACE@[9; 10) " "
BLOCK_EXPR@[10; 111)
BLOCK@[10; 111) BLOCK@[10; 111)
L_CURLY@[10; 11) "{" L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n " WHITESPACE@[11; 16) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 83)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 82)
BLOCK@[9; 82) BLOCK@[9; 82)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 111)
BLOCK@[9; 111) BLOCK@[9; 111)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 70)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 11)
BLOCK@[9; 11) BLOCK@[9; 11)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
R_CURLY@[10; 11) "}" R_CURLY@[10; 11) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 107)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 106)
BLOCK@[9; 106) BLOCK@[9; 106)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "
@ -19,6 +20,7 @@ SOURCE_FILE@[0; 107)
LITERAL@[18; 22) LITERAL@[18; 22)
TRUE_KW@[18; 22) "true" TRUE_KW@[18; 22) "true"
WHITESPACE@[22; 23) " " WHITESPACE@[22; 23) " "
BLOCK_EXPR@[23; 25)
BLOCK@[23; 25) BLOCK@[23; 25)
L_CURLY@[23; 24) "{" L_CURLY@[23; 24) "{"
R_CURLY@[24; 25) "}" R_CURLY@[24; 25) "}"
@ -32,12 +34,14 @@ SOURCE_FILE@[0; 107)
LITERAL@[34; 38) LITERAL@[34; 38)
TRUE_KW@[34; 38) "true" TRUE_KW@[34; 38) "true"
WHITESPACE@[38; 39) " " WHITESPACE@[38; 39) " "
BLOCK_EXPR@[39; 41)
BLOCK@[39; 41) BLOCK@[39; 41)
L_CURLY@[39; 40) "{" L_CURLY@[39; 40) "{"
R_CURLY@[40; 41) "}" R_CURLY@[40; 41) "}"
WHITESPACE@[41; 42) " " WHITESPACE@[41; 42) " "
ELSE_KW@[42; 46) "else" ELSE_KW@[42; 46) "else"
WHITESPACE@[46; 47) " " WHITESPACE@[46; 47) " "
BLOCK_EXPR@[47; 49)
BLOCK@[47; 49) BLOCK@[47; 49)
L_CURLY@[47; 48) "{" L_CURLY@[47; 48) "{"
R_CURLY@[48; 49) "}" R_CURLY@[48; 49) "}"
@ -51,6 +55,7 @@ SOURCE_FILE@[0; 107)
LITERAL@[58; 62) LITERAL@[58; 62)
TRUE_KW@[58; 62) "true" TRUE_KW@[58; 62) "true"
WHITESPACE@[62; 63) " " WHITESPACE@[62; 63) " "
BLOCK_EXPR@[63; 65)
BLOCK@[63; 65) BLOCK@[63; 65)
L_CURLY@[63; 64) "{" L_CURLY@[63; 64) "{"
R_CURLY@[64; 65) "}" R_CURLY@[64; 65) "}"
@ -64,12 +69,14 @@ SOURCE_FILE@[0; 107)
LITERAL@[74; 79) LITERAL@[74; 79)
FALSE_KW@[74; 79) "false" FALSE_KW@[74; 79) "false"
WHITESPACE@[79; 80) " " WHITESPACE@[79; 80) " "
BLOCK_EXPR@[80; 82)
BLOCK@[80; 82) BLOCK@[80; 82)
L_CURLY@[80; 81) "{" L_CURLY@[80; 81) "{"
R_CURLY@[81; 82) "}" R_CURLY@[81; 82) "}"
WHITESPACE@[82; 83) " " WHITESPACE@[82; 83) " "
ELSE_KW@[83; 87) "else" ELSE_KW@[83; 87) "else"
WHITESPACE@[87; 88) " " WHITESPACE@[87; 88) " "
BLOCK_EXPR@[88; 90)
BLOCK@[88; 90) BLOCK@[88; 90)
L_CURLY@[88; 89) "{" L_CURLY@[88; 89) "{"
R_CURLY@[89; 90) "}" R_CURLY@[89; 90) "}"
@ -86,6 +93,7 @@ SOURCE_FILE@[0; 107)
NAME_REF@[99; 100) NAME_REF@[99; 100)
IDENT@[99; 100) "S" IDENT@[99; 100) "S"
WHITESPACE@[100; 101) " " WHITESPACE@[100; 101) " "
BLOCK_EXPR@[101; 103)
BLOCK@[101; 103) BLOCK@[101; 103)
L_CURLY@[101; 102) "{" L_CURLY@[101; 102) "{"
R_CURLY@[102; 103) "}" R_CURLY@[102; 103) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 167)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 166)
BLOCK@[9; 166) BLOCK@[9; 166)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 46)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 45)
BLOCK@[9; 45) BLOCK@[9; 45)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 47)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 46)
BLOCK@[9; 46) BLOCK@[9; 46)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 40)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 39)
BLOCK@[9; 39) BLOCK@[9; 39)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 84)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 83)
BLOCK@[9; 83) BLOCK@[9; 83)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 65)
L_PAREN@[4; 5) "(" L_PAREN@[4; 5) "("
R_PAREN@[5; 6) ")" R_PAREN@[5; 6) ")"
WHITESPACE@[6; 7) " " WHITESPACE@[6; 7) " "
BLOCK_EXPR@[7; 9)
BLOCK@[7; 9) BLOCK@[7; 9)
L_CURLY@[7; 8) "{" L_CURLY@[7; 8) "{"
R_CURLY@[8; 9) "}" R_CURLY@[8; 9) "}"
@ -21,6 +22,7 @@ SOURCE_FILE@[0; 65)
L_PAREN@[14; 15) "(" L_PAREN@[14; 15) "("
R_PAREN@[15; 16) ")" R_PAREN@[15; 16) ")"
WHITESPACE@[16; 17) " " WHITESPACE@[16; 17) " "
BLOCK_EXPR@[17; 31)
BLOCK@[17; 31) BLOCK@[17; 31)
L_CURLY@[17; 18) "{" L_CURLY@[17; 18) "{"
WHITESPACE@[18; 19) " " WHITESPACE@[18; 19) " "
@ -47,6 +49,7 @@ SOURCE_FILE@[0; 65)
L_PAREN@[36; 37) "(" L_PAREN@[36; 37) "("
R_PAREN@[37; 38) ")" R_PAREN@[37; 38) ")"
WHITESPACE@[38; 39) " " WHITESPACE@[38; 39) " "
BLOCK_EXPR@[39; 48)
BLOCK@[39; 48) BLOCK@[39; 48)
L_CURLY@[39; 40) "{" L_CURLY@[39; 40) "{"
WHITESPACE@[40; 41) " " WHITESPACE@[40; 41) " "
@ -71,6 +74,7 @@ SOURCE_FILE@[0; 65)
L_PAREN@[53; 54) "(" L_PAREN@[53; 54) "("
R_PAREN@[54; 55) ")" R_PAREN@[54; 55) ")"
WHITESPACE@[55; 56) " " WHITESPACE@[55; 56) " "
BLOCK_EXPR@[56; 64)
BLOCK@[56; 64) BLOCK@[56; 64)
L_CURLY@[56; 57) "{" L_CURLY@[56; 57) "{"
WHITESPACE@[57; 58) " " WHITESPACE@[57; 58) " "

View file

@ -33,6 +33,7 @@ SOURCE_FILE@[0; 29)
NAME_REF@[21; 25) NAME_REF@[21; 25)
IDENT@[21; 25) "Copy" IDENT@[21; 25) "Copy"
WHITESPACE@[25; 26) " " WHITESPACE@[25; 26) " "
BLOCK_EXPR@[26; 28)
BLOCK@[26; 28) BLOCK@[26; 28)
L_CURLY@[26; 27) "{" L_CURLY@[26; 27) "{"
R_CURLY@[27; 28) "}" R_CURLY@[27; 28) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 20)
BLOCK@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 26)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 25)
BLOCK@[9; 25) BLOCK@[9; 25)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 11) " " WHITESPACE@[10; 11) " "

View file

@ -88,6 +88,7 @@ SOURCE_FILE@[0; 200)
NAME_REF@[68; 76) NAME_REF@[68; 76)
IDENT@[68; 76) "Iterator" IDENT@[68; 76) "Iterator"
WHITESPACE@[76; 77) " " WHITESPACE@[76; 77) " "
BLOCK_EXPR@[77; 79)
BLOCK@[77; 79) BLOCK@[77; 79)
L_CURLY@[77; 78) "{" L_CURLY@[77; 78) "{"
R_CURLY@[78; 79) "}" R_CURLY@[78; 79) "}"
@ -153,6 +154,7 @@ SOURCE_FILE@[0; 200)
NAME_REF@[123; 131) NAME_REF@[123; 131)
IDENT@[123; 131) "Iterator" IDENT@[123; 131) "Iterator"
WHITESPACE@[131; 132) " " WHITESPACE@[131; 132) " "
BLOCK_EXPR@[132; 134)
BLOCK@[132; 134) BLOCK@[132; 134)
L_CURLY@[132; 133) "{" L_CURLY@[132; 133) "{"
R_CURLY@[133; 134) "}" R_CURLY@[133; 134) "}"
@ -234,6 +236,7 @@ SOURCE_FILE@[0; 200)
NAME_REF@[188; 196) NAME_REF@[188; 196)
IDENT@[188; 196) "Iterator" IDENT@[188; 196) "Iterator"
WHITESPACE@[196; 197) " " WHITESPACE@[196; 197) " "
BLOCK_EXPR@[197; 199)
BLOCK@[197; 199) BLOCK@[197; 199)
L_CURLY@[197; 198) "{" L_CURLY@[197; 198) "{"
R_CURLY@[198; 199) "}" R_CURLY@[198; 199) "}"

View file

@ -8,6 +8,7 @@ SOURCE_FILE@[0; 52)
L_PAREN@[6; 7) "(" L_PAREN@[6; 7) "("
R_PAREN@[7; 8) ")" R_PAREN@[7; 8) ")"
WHITESPACE@[8; 9) " " WHITESPACE@[8; 9) " "
BLOCK_EXPR@[9; 51)
BLOCK@[9; 51) BLOCK@[9; 51)
L_CURLY@[9; 10) "{" L_CURLY@[9; 10) "{"
WHITESPACE@[10; 15) "\n " WHITESPACE@[10; 15) "\n "

Some files were not shown because too many files have changed in this diff Show more