From 0e06a72c64e09af1367f9e0adb4b5ff91a3e0251 Mon Sep 17 00:00:00 2001 From: apense Date: Fri, 26 Jun 2015 01:11:27 -0400 Subject: Updated nnkRange docs Addresses #2929 --- doc/astspec.txt | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/astspec.txt b/doc/astspec.txt index 9bedb00fc..72cd22cc6 100644 --- a/doc/astspec.txt +++ b/doc/astspec.txt @@ -397,6 +397,8 @@ Ranges ------ Ranges occur in set constructors, case statement branches, or array slices. +Internally, the node kind ``nnkRange`` is used, but when constructing the +AST, construction with ``..`` as an infix operator should be used instead. Concrete syntax: @@ -406,7 +408,33 @@ Concrete syntax: AST: .. code-block:: nim - nnkRange(nnkIntLit(1), nnkIntLit(3)) + nnkInfix( + nnkIdent(!".."), + nnkIntLit(1), + nnkIntLit(3) + ) + +Example code: + +.. code-block:: nim + macro genRepeatEcho(): stmt = + result = newNimNode(nnkStmtList) + + var forStmt = newNimNode(nnkForStmt) # generate a for statement + forStmt.add(ident("i")) # use the variable `i` for iteration + + var rangeDef = newNimNode(nnkInfix).add( + ident("..")).add( + newIntLitNode(3),newIntLitNode(5)) # iterate over the range 3..5 + + forStmt.add(rangeDef) + forStmt.add(newCall(ident("echo"), newIntLitNode(3))) # meat of the loop + result.add(forStmt) + + genRepeatEcho() # gives: + # 3 + # 3 + # 3 If expression -- cgit 1.4.1-2-gfad0