Commit e95712ca1830ecec1fff3315b049ed587905c17e

Authored by Andreas Rumpf
1 parent 01dbfa89

bugfixes and cleanups

src/squeaknim.nim
... ... @@ -38,6 +38,7 @@ template writeSmallTalkCode*(filename: string) =
38 38 writeFile(filename, stCode)
39 39  
40 40 proc mapTypeToC(symbolicType: NimNode): string {.compileTime.} =
  41 + if symbolicType.kind == nnkEmpty: return "void"
41 42 let t = symbolicType.getType
42 43 if symbolicType.kind == nnkSym and t.typeKind == ntyObject:
43 44 return gPrefix & $symbolicType
... ... @@ -46,6 +47,7 @@ proc mapTypeToC(symbolicType: NimNode): string {.compileTime.} =
46 47 expectKind t, nnkBracketExpr
47 48 result = mapTypeToC(t[1]) & "*"
48 49 of ntyCString: result = "char*"
  50 + of ntyPointer: result = "void*"
49 51 of ntyInt: result = intType
50 52 of ntyInt8: result = "sbyte"
51 53 of ntyInt16: result = "short"
... ... @@ -61,7 +63,7 @@ proc mapTypeToC(symbolicType: NimNode): string {.compileTime.} =
61 63 of ntyBool, ntyChar, ntyEnum: result = "char"
62 64 else: quit "Error: cannot wrap to Squeak " & treeRepr(t)
63 65  
64   -macro exportSt*(className: string; body: stmt): stmt =
  66 +macro exportSt*(body: stmt): stmt =
65 67 # generates something like:
66 68  
67 69 # system: aString
... ...
tests/Test1.nim
... ... @@ -3,7 +3,7 @@ import squeaknim
3 3  
4 4 # Just compile with "nim c Test1.nim", copy resulting lib and Test1.st
5 5 # to a Squeak directory, file in Test1.st and then it should be fine
6   -# to call foo, see class side of Test1
  6 +# to call foo, see class side of Test1
7 7  
8 8 type
9 9 MyFloat = float32
... ... @@ -18,13 +18,13 @@ setModulename "Test1", "UR"
18 18 # Generate the Smalltalk class URVector3 representing Vector3
19 19 wrapObject(Vector3)
20 20  
21   -# Generate declarations for Smalltalk code
  21 +# Generate declarations for Smalltalk code
22 22 writeExternalLibrary()
23 23  
24 24 # Here follows Nim procedures that will be callable via FFI
25 25 # Note that exportSt pragma to export.
26 26  
27   -proc foo*(a, b: Vector3, c: int): cstring {.exportSt: "bar".} =
  27 +proc foo*(a, b: Vector3, c: int): cstring {.exportSt.} =
28 28 # Just a silly test proc
29 29 result = "x plus y plus c " & $(a.x + b.y + c.float)
30 30  
... ...