@@ -7,7 +7,7 @@ type RawRow* = seq[RawNimNode]
77
88proc addRawRow * (id: SchemaId , row: RawRow ) =
99 if isFrozen (id):
10- raise newException (CuleFrozenError , " schema " & $ id & " is frozen, no rows can be added" )
10+ raise newException (FrozenError , " schema " & $ id & " is frozen, no rows can be added" )
1111 getSchemaData (id).add glaze (row)
1212
1313macro defineRowAdd * (id: static SchemaId , name: untyped ) =
@@ -20,16 +20,37 @@ macro defineRowAdd*(id: static SchemaId, name: untyped) =
2020 var params: seq [NimNode ] = @ [newEmptyNode ()]
2121 var row = newNimNode (nnkBracket, name)
2222 for field in schema.fields:
23- let typeNode = field.type .NimNode
23+ var typeNode = field.type .constraint.NimNode
24+ case field.type .kind
25+ of ExprAtom :
26+ if typeNode.isNil:
27+ typeNode = bindSym " untyped"
28+ of TypeAtom :
29+ if typeNode.isNil:
30+ typeNode = bindSym " typedesc"
31+ else :
32+ typeNode = newTree (nnkBracketExpr, bindSym " typedesc" , typeNode)
33+ of StaticAtom :
34+ if typeNode.isNil:
35+ typeNode = bindSym " static"
36+ else :
37+ typeNode = newTree (nnkBracketExpr, bindSym " static" , typeNode)
2438 let defaultNode = field.default.NimNode
2539 var def = newNimNode (nnkIdentDefs, typeNode)
2640 def.add ident (field.name)
27- if typeNode.isNil: def.add newEmptyNode ()
28- else : def.add typeNode
41+ def.add typeNode
2942 if defaultNode.isNil: def.add newEmptyNode ()
3043 else : def.add defaultNode
3144 params.add def
32- row.add newCall (bindSym " RawNimNode" , ident (field.name)) # XXX needs to be different for typedescs and statics
45+ var serializeNode = ident (field.name)
46+ case field.type .kind
47+ of ExprAtom : discard
48+ of TypeAtom :
49+ # maybe implement glaze for typedesc
50+ serializeNode = newCall (bindSym " getTypeInst" , serializeNode)
51+ of StaticAtom :
52+ serializeNode = newCall (bindSym (" glaze" , brForceOpen), serializeNode)
53+ row.add newCall (bindSym " RawNimNode" , serializeNode)
3354 result = newProc (
3455 procType = nnkMacroDef,
3556 name = name,
0 commit comments