From 594809e35b9e768f1a50926cf5e7a9df41ba7d16 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 17 Aug 2021 22:04:18 +0200 Subject: Library functions behave more imperatively - Templates scope state changes - State-modifying function operate in place instead of returning a template - Internal template representation contains actual owned nodes instead of a pointer to a syntax tree + an expression map - No more wide calls --- src/parse/mod.rs | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) (limited to 'src/parse') diff --git a/src/parse/mod.rs b/src/parse/mod.rs index c29b9c1c..37b65c04 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -57,23 +57,8 @@ where // or template to know whether things like headings are allowed. let mut tree = vec![]; while !p.eof() && f(p) { - if let Some(mut node) = node(p, &mut at_start) { + if let Some(node) = node(p, &mut at_start) { at_start &= matches!(node, SyntaxNode::Space | SyntaxNode::Parbreak(_)); - - // Look for wide call. - if let SyntaxNode::Expr(Expr::Call(call)) = &mut node { - if call.wide { - let start = p.next_start(); - let tree = tree_while(p, true, f); - call.args.items.push(CallArg::Pos(Expr::Template(Box::new( - TemplateExpr { - span: p.span_from(start), - tree: Rc::new(tree), - }, - )))); - } - } - tree.push(node); } } @@ -538,7 +523,7 @@ fn idents(p: &mut Parser, items: Vec) -> Vec { // Parse a template value: `[...]`. fn template(p: &mut Parser) -> Expr { p.start_group(Group::Bracket, TokenMode::Markup); - let tree = Rc::new(tree(p)); + let tree = tree(p); let span = p.end_group(); Expr::Template(Box::new(TemplateExpr { span, tree })) } @@ -566,13 +551,6 @@ fn block(p: &mut Parser, scoping: bool) -> Expr { /// Parse a function call. fn call(p: &mut Parser, callee: Expr) -> Option { - let mut wide = p.eat_if(Token::Excl); - if wide && p.outer_mode() == TokenMode::Code { - let span = p.span_from(callee.span().start); - p.error(span, "wide calls are only allowed directly in templates"); - wide = false; - } - let mut args = match p.peek_direct() { Some(Token::LeftParen) => args(p), Some(Token::LeftBracket) => CallArgs { @@ -593,7 +571,6 @@ fn call(p: &mut Parser, callee: Expr) -> Option { Some(Expr::Call(Box::new(CallExpr { span: p.span_from(callee.span().start), callee, - wide, args, }))) } -- cgit v1.2.3