Cleanup a bit

This commit is contained in:
Joey Yakimowich-Payne 2018-06-21 18:43:28 +09:00
commit 92a16b37c4
3 changed files with 8 additions and 61 deletions

View file

@ -1,7 +1,7 @@
# nim-extensions # nim-extensions
Extensions for the nim programming language. Extensions for the Nim programming language.
These extensions aim to improve the usability of nim in practical applications. These extensions aim to improve the usability of Nim in practical applications.
Extensions so far include: Extensions so far include:
@ -12,7 +12,7 @@ Extensions so far include:
usage: usage:
```nim ```nim
import oop_macro import extensions/oop
class BaseObject: # inherits from RootObj class BaseObject: # inherits from RootObj
# attributes/properties # attributes/properties
var var
@ -33,5 +33,5 @@ Extensions so far include:
There's also an example in the code that demonstrates the inheritance that can be run by executing: There's also an example in the code that demonstrates the inheritance that can be run by executing:
```bash ```bash
nim c -r oop_macro.nim nim c -r tests/test1.nim
``` ```

View file

@ -3,7 +3,7 @@ import strutils
{.hint[XDeclaredButNotUsed]: off.} {.hint[XDeclaredButNotUsed]: off.}
macro new*(obj: untyped): untyped {.immediate.}= macro new*(obj: untyped): untyped =
if obj.kind == nnkObjConstr or obj.kind == nnkCall: if obj.kind == nnkObjConstr or obj.kind == nnkCall:
var args: seq[NimNode] = @[] var args: seq[NimNode] = @[]
var newObj = copyNimTree(obj) var newObj = copyNimTree(obj)
@ -288,58 +288,5 @@ macro class*(head: untyped, body: untyped): untyped =
# OfInherit # OfInherit
# Ident !"RootObj" # Ident !"RootObj"
# Empty <= We want to replace self # Empty <= We want to replace self
typeDecl#[[0]]#[0][2][0][2] = recList typeDecl[0][2][0][2] = recList
result.insert(0, typeDecl) result.insert(0, typeDecl)
when isMainModule:
class Animal of RootObj:
var
name: string
age: int
method init*(name: string, age: int)=
self.name = name
self.age = age
echo "I am a new Animal, ", self.name
method stuff(s:string): string = s
method vocalize: string = "..."
method ageHumanYrs: int = self.age # `self` is injected
class Dog of Animal:
method vocalize: string = "woof"
method ageHumanYrs: int = self.age * 7
class Cat of Animal:
method vocalize: string =
# call the base class method
self.vocalizeAnimal() & "meow"
class Tiger of Cat:
method init(name: string="Bob", age: int)=
self.initAnimal(name, age)
echo "I am a new tiger"
method vocalize: string =
# no need for super.super!
self.vocalizeAnimal() & "Rawr!"
var animals: seq[Animal] = @[]
animals.add(new Dog(name: "Sparky", age: 10))
animals.add(new Cat(name: "Mitten", age: 10))
animals.add(new Tiger(name: "Jean", age: 2))
for a in animals:
echo a.name, " says ", a.vocalize()
echo a.ageHumanYrs()
# prints:
# I am a new Animal, Sparky
# I am a new Animal, Mitten
# I am a new Animal, Jean
# I am a new tiger
# Sparky says woof
# 70
# Mitten says ...meow
# 10
# Jean says ...Rawr!
# 2

View file

@ -1,4 +1,4 @@
import extensions/oop_macro import extensions/oop
import strutils import strutils