mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-19 15:31:28 +00:00
Merge branch 'devel' of github.com:nim-lang/Nim into devel
This commit is contained in:
@@ -658,7 +658,7 @@ proc pragmaGuard(c: PContext; it: PNode; kind: TSymKind): PSym =
|
||||
|
||||
proc semCustomPragma(c: PContext, n: PNode): PNode =
|
||||
assert(n.kind in nkPragmaCallKinds + {nkIdent})
|
||||
|
||||
|
||||
if n.kind == nkIdent:
|
||||
result = newTree(nkCall, n)
|
||||
elif n.kind == nkExprColonExpr:
|
||||
@@ -667,14 +667,15 @@ proc semCustomPragma(c: PContext, n: PNode): PNode =
|
||||
else:
|
||||
result = n
|
||||
|
||||
result = c.semOverloadedCall(c, result, n, {skTemplate}, {})
|
||||
if sfCustomPragma notin result[0].sym.flags:
|
||||
let r = c.semOverloadedCall(c, result, n, {skTemplate}, {})
|
||||
if r.isNil or sfCustomPragma notin r[0].sym.flags:
|
||||
invalidPragma(n)
|
||||
|
||||
if n.kind == nkIdent:
|
||||
result = result[0]
|
||||
elif n.kind == nkExprColonExpr:
|
||||
result.kind = n.kind # pragma(arg) -> pragma: arg
|
||||
else:
|
||||
result = r
|
||||
if n.kind == nkIdent:
|
||||
result = result[0]
|
||||
elif n.kind == nkExprColonExpr:
|
||||
result.kind = n.kind # pragma(arg) -> pragma: arg
|
||||
|
||||
proc singlePragma(c: PContext, sym: PSym, n: PNode, i: int,
|
||||
validPragmas: TSpecialWords): bool =
|
||||
@@ -1016,7 +1017,7 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: int,
|
||||
else: sym.flags.incl sfUsed
|
||||
of wLiftLocals: discard
|
||||
else: invalidPragma(it)
|
||||
else:
|
||||
else:
|
||||
n.sons[i] = semCustomPragma(c, it)
|
||||
|
||||
|
||||
|
||||
@@ -716,7 +716,7 @@ proc transformExceptBranch(c: PTransf, n: PNode): PTransNode =
|
||||
result = transformSons(c, n)
|
||||
if n[0].isInfixAs():
|
||||
let excTypeNode = n[0][1]
|
||||
let actions = newTransNode(nkStmtList, n[1].info, 2)
|
||||
let actions = newTransNode(nkStmtListExpr, n[1], 2)
|
||||
# Generating `let exc = (excType)(getCurrentException())`
|
||||
# -> getCurrentException()
|
||||
let excCall = PTransNode(callCodegenProc("getCurrentException", ast.emptyNode))
|
||||
|
||||
@@ -21,5 +21,13 @@ proc test2() =
|
||||
testTemplate(Exception)
|
||||
doAssert(not declared(foobar))
|
||||
|
||||
|
||||
proc testTryAsExpr(i: int) =
|
||||
let x = try: i
|
||||
except ValueError as ex:
|
||||
echo(ex.msg)
|
||||
-1
|
||||
|
||||
test[Exception]()
|
||||
test2()
|
||||
test2()
|
||||
testTryAsExpr(5)
|
||||
|
||||
Reference in New Issue
Block a user