12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import unicode, sequtils, macros, re
- proc test_enums() =
- var o: Tfile
- if o.open("files " & "test.txt", fmWrite):
- o.write("test")
- o.close()
- proc test_iterators(filename = "tests.nim") =
- let
- input = readFile(filename)
- letters = toSeq(runes(string(input)))
- for letter in letters: echo int(letter)
- const SOME_SEQUENCE = @[1, 2]
- type
- bad_string = distinct string
- TPerson = object of TObject
- name*: bad_string
- age: int
- proc adder(a, b: int): int =
- result = a + b
- type
- PExpr = ref object of TObject ## abstract base class for an expression
- PLiteral = ref object of PExpr
- x: int
- PPlusExpr = ref object of PExpr
- a, b: PExpr
- # watch out: 'eval' relies on dynamic binding
- method eval(e: PExpr): int =
- # override this base method
- quit "to override!"
- method eval(e: PLiteral): int = e.x
- method eval(e: PPlusExpr): int = eval(e.a) + eval(e.b)
- proc newLit(x: int): PLiteral = PLiteral(x: x)
- proc newPlus(a, b: PExpr): PPlusExpr = PPlusExpr(a: a, b: b)
- echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4)))
- proc findVowelPosition(text: string) =
- var found = -1
- block loops:
- for i, letter in pairs(text):
- for j in ['a', 'e', 'i', 'o', 'u']:
- if letter == j:
- found = i
- break loops # leave both for-loops
- echo found
- findVowelPosition("Zerg") # should output 1, position of vowel.
- macro expect*(exceptions: varargs[expr], body: stmt): stmt {.immediate.} =
- ## Expect docstrings
- let exp = callsite()
- template expectBody(errorTypes, lineInfoLit: expr,
- body: stmt): NimNode {.dirty.} =
- try:
- body
- assert false
- except errorTypes:
- nil
- var body = exp[exp.len - 1]
- var errorTypes = newNimNode(nnkBracket)
- for i in countup(1, exp.len - 2):
- errorTypes.add(exp[i])
- result = getAst(expectBody(errorTypes, exp.lineinfo, body))
- proc err =
- raise newException(EArithmetic, "some exception")
- proc testMacro() =
- expect(EArithmetic):
- err()
- testMacro()
- let notAModule = re"(\w+)=(.*)"
|