mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-06 04:57:49 +00:00
revert parser stmtListExpr (#11007)
* Revert "Support for stmtListExpr in parser after major keywords. Scaled down version. (#10852)" This reverts commit862897dc0f. * redo fix for #4035 * render stmtlistExpr using semicolon * Revert "render stmtlistExpr using semicolon" This reverts commitcafb78b8d5. * revert test
This commit is contained in:
10
changelog.md
10
changelog.md
@@ -31,16 +31,6 @@
|
||||
|
||||
- `getImpl` on a `var` or `let` symbol will now return the full `IdentDefs`
|
||||
tree from the symbol declaration instead of just the initializer portion.
|
||||
- it is now possible to use statement list expressions after keywords with
|
||||
indentation: raise, return, discard, yield. This helps parsing code produced
|
||||
by Nim template expansion where stmtListExpr can appear in place of any expression.
|
||||
Example:
|
||||
```nim
|
||||
raise
|
||||
var e = new(Exception)
|
||||
e.msg = "My Exception msg"
|
||||
e
|
||||
```
|
||||
|
||||
- To use multi-methods, explicit `--multimethods:on` is now needed.
|
||||
|
||||
|
||||
@@ -238,7 +238,6 @@ proc newIdentNodeP(ident: PIdent, p: TParser): PNode =
|
||||
|
||||
proc parseExpr(p: var TParser): PNode
|
||||
proc parseStmt(p: var TParser): PNode
|
||||
proc parseStmtListExpr(p: var TParser): PNode
|
||||
proc parseTypeDesc(p: var TParser): PNode
|
||||
proc parseParamList(p: var TParser, retColon = true): PNode
|
||||
|
||||
@@ -1482,12 +1481,12 @@ proc parseFromStmt(p: var TParser): PNode =
|
||||
#expectNl(p)
|
||||
|
||||
proc parseReturnOrRaise(p: var TParser, kind: TNodeKind): PNode =
|
||||
#| returnStmt = 'return' stmtListExpr?
|
||||
#| raiseStmt = 'raise' stmtListExpr?
|
||||
#| yieldStmt = 'yield' stmtListExpr?
|
||||
#| discardStmt = 'discard' stmtListExpr?
|
||||
#| breakStmt = 'break' stmtListExpr?
|
||||
#| continueStmt = 'break' stmtListExpr?
|
||||
#| returnStmt = 'return' optInd expr?
|
||||
#| raiseStmt = 'raise' optInd expr?
|
||||
#| yieldStmt = 'yield' optInd expr?
|
||||
#| discardStmt = 'discard' optInd expr?
|
||||
#| breakStmt = 'break' optInd expr?
|
||||
#| continueStmt = 'break' optInd expr?
|
||||
result = newNodeP(kind, p)
|
||||
getTok(p)
|
||||
if p.tok.tokType == tkComment:
|
||||
@@ -1497,7 +1496,9 @@ proc parseReturnOrRaise(p: var TParser, kind: TNodeKind): PNode =
|
||||
# NL terminates:
|
||||
addSon(result, p.emptyNode)
|
||||
else:
|
||||
addSon(result, parseStmtListExpr(p))
|
||||
var e = parseExpr(p)
|
||||
e = postExprBlocks(p, e)
|
||||
addSon(result, e)
|
||||
|
||||
proc parseIfOrWhen(p: var TParser, kind: TNodeKind): PNode =
|
||||
#| condStmt = expr colcom stmt COMMENT?
|
||||
@@ -2252,17 +2253,6 @@ proc parseStmt(p: var TParser): PNode =
|
||||
getTok(p)
|
||||
if err and p.tok.tokType == tkEof: break
|
||||
|
||||
proc parseStmtListExpr(p: var TParser): PNode =
|
||||
#| stmtListExpr = (IND{>} stmt) / expr
|
||||
if p.tok.indent > p.currInd:
|
||||
result = parseStmt(p)
|
||||
result.kind = nkStmtListExpr
|
||||
if result.len == 1:
|
||||
result = result[0]
|
||||
else:
|
||||
result = parseExpr(p)
|
||||
result = postExprBlocks(p, result)
|
||||
|
||||
proc parseAll(p: var TParser): PNode =
|
||||
## Parses the rest of the input stream held by the parser into a PNode.
|
||||
result = newNodeP(nkStmtList, p)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
outputsub: '''Error: expression expected, but found '[EOF]' -- 45'''
|
||||
outputsub: '''Error: expression expected, but found '[EOF]' 45'''
|
||||
"""
|
||||
|
||||
# feature request #1473
|
||||
@@ -9,7 +9,6 @@ macro test(text: string): untyped =
|
||||
try:
|
||||
result = parseExpr(text.strVal)
|
||||
except ValueError:
|
||||
echo text
|
||||
result = newLit getCurrentExceptionMsg()
|
||||
|
||||
const
|
||||
@@ -18,4 +17,4 @@ const
|
||||
b = test("valid")
|
||||
c = test("\"") # bug #2504
|
||||
|
||||
echo a, " -- ", b
|
||||
echo a, " ", b
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
discard """
|
||||
output: '''10'''
|
||||
"""
|
||||
|
||||
proc xx(a: int): int =
|
||||
let y = 0
|
||||
return
|
||||
var x = 0
|
||||
x + y
|
||||
|
||||
proc b(x: int): int =
|
||||
raise
|
||||
var e: ref Exception
|
||||
new(e)
|
||||
e.msg = "My Exception msg"
|
||||
e
|
||||
|
||||
##issue 4035
|
||||
echo(5 +
|
||||
5)
|
||||
Reference in New Issue
Block a user