Test1.nim
993 Bytes
# This import adds macros to generate FFI Smalltalk code
import squeaknim
# Just compile with "nim c Test1.nim", copy resulting lib and Test1.st
# to a Squeak directory, file in Test1.st and then it should be fine
# to call foo, see class side of Test1
type
MyFloat = float32
Vector3* = object
x*, y*, z*: MyFloat
# This sets the name of the FFI module (and class) and a Smalltalk prefix
# to avoid collisions for generated classes, like Vector3 which turns into
# URVector3 in Smalltalk
setModulename "Test1", "UR"
# Generate the Smalltalk class URVector3 representing Vector3
wrapObject(Vector3)
# Generate declarations for Smalltalk code
writeExternalLibrary()
# Here follows Nim procedures that will be callable via FFI
# Note that exportSt pragma to export.
proc foo*(a, b: Vector3, c: int): cstring {.exportSt: "bar".} =
# Just a silly test proc
result = "x plus y plus c " & $(a.x + b.y + c.float)
# Write the Smalltalk code to file
writeSmallTalkCode("Test1.st")