From ffd05510bd8e0f8ca294497eb6b8062a3d80b7a1 Mon Sep 17 00:00:00 2001 From: dom96 Date: Mon, 4 Apr 2011 23:12:24 +0100 Subject: [PATCH] fixes #27 --- rod/pnimsyn.nim | 4 ++-- tests/accept/compile/tmacrostmt.nim | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 tests/accept/compile/tmacrostmt.nim diff --git a/rod/pnimsyn.nim b/rod/pnimsyn.nim index 869d968b6b..a894f2723e 100755 --- a/rod/pnimsyn.nim +++ b/rod/pnimsyn.nim @@ -765,8 +765,8 @@ proc parseExprStmt(p: var TParser): PNode = addSon(result, a) getTok(p) skipComment(p, result) - if (p.tok.tokType == tkInd) or - not (p.tok.TokType in {tkOf, tkElif, tkElse, tkExcept}): + if p.tok.tokType == tkSad: getTok(p) + if not (p.tok.TokType in {tkOf, tkElif, tkElse, tkExcept}): addSon(result, parseStmt(p)) while true: if p.tok.tokType == tkSad: getTok(p) diff --git a/tests/accept/compile/tmacrostmt.nim b/tests/accept/compile/tmacrostmt.nim new file mode 100644 index 0000000000..5d1403dacb --- /dev/null +++ b/tests/accept/compile/tmacrostmt.nim @@ -0,0 +1,17 @@ +import macros +macro case_token(n: stmt): stmt = + # creates a lexical analyzer from regular expressions + # ... (implementation is an exercise for the reader :-) + nil + +case_token: # this colon tells the parser it is a macro statement +of r"[A-Za-z_]+[A-Za-z_0-9]*": + return tkIdentifier +of r"0-9+": + return tkInteger +of r"[\+\-\*\?]+": + return tkOperator +else: + return tkUnknown + +case_token: inc i