This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/share/CodeBlocks/lexers/lexer_nim.sample

62 lines
1.4 KiB
Plaintext

# This is a comment
## This is a documentaion comment
import os, sys, time, string, macros
proc getStr(num: int): string =
result = case num:
of low(int).. -1:
"negative"
of 0:
"zero"
of 1..high(int):
"positive"
else:
"impossible"
for letter in 'a'..'z':
result.add(letter)
type Animal = ref object of RootObj
name: string
age: int
method vocalize(this: Animal): string {.base.} = "..."
var
a = @[1, 2, 3]
b = newSeq[int](3)
discard a[0] + MyInteger(4)
for i, v in a:
b[i] = v*v
b.delete(0) # takes O(n) time
b = a[0] & b # Same as original b
echo powersOfTwo.filter(proc (x: int): bool = x > 32)
type
ThreeStringAddress = array[3, string]
let names: ThreeStringAddress = ["Jasmine", "Ktisztina", "Kristof"]
proc zip[I, T](a, b: array[I, T]):
array[I, tuple[a, b: T]] =
for i in low(a)..high(a):
result[i] = (a[i], b[i])
macro class*(head, body: untyped): untyped =
# The macro is immediate, since all its parameters are untyped.
if head.kind == nnkInfix and head[0].ident == !"of":
# `head` is expression `typeName of baseClass`
# echo head.treeRepr
# --------------------
# Infix
# Ident !"of"
# Ident !"Animal"
# Ident !"RootObj"
typeName = head[1]
baseName = head[2]
# create a type section in the result
template typeDecl(a, b): untyped =
type a = ref object of b