1- import ../ cores
21import ../ types
32import ../ functions
3+ import ../ cores
44
55import std/ tables
66import std/ strutils
77import std/ strformat
88
99proc jlTupleToNim * (val: JlValue , tup: var tuple ) =
10- # collect(keys(val))
10+ # julia> collect(keys(val))
1111 var keys = jlCall (" keys" , val)
1212 keys = jlCall (" collect" , keys)
13+
1314 # Tuple of JlSymbol
14- # length(collect(keys(val)))
15+ # julia> length(collect(keys(val)))
1516 var show = getJlFunc (" show" )
1617 var sprint = getJlFunc (" sprint" )
1718 var nkeys = jlCall (" length" , keys).to (int )
19+
1820 var i = 0
1921 for name, field in tup.fieldPairs:
2022 inc (i)
@@ -33,31 +35,28 @@ proc jlTupleToNim*(val: JlValue, tup: var tuple) =
3335 raise newException (JlError , " Tuple conversion from Julia to Nim failed ! Fields must identical" )
3436
3537proc jlDictToNim * [U, V: string | SomeNumber | bool ](val: JlValue , tab: var Table [U, V]) =
36- # collect(keys(val))
38+ # julia> collect(keys(val))
3739 var keys = jlCall (" keys" , val)
3840 keys = jlCall (" collect" , keys)
41+
3942 # Tuple of JlSymbol
40- # length(collect(keys(val)))
43+ # julia> length(collect(keys(val)))
4144 var nkeys = jlCall (" length" , keys).to (int )
4245 for i in 1 .. nkeys:
4346 var key = jlCall (" getindex" , keys, i)
4447 var val = jlCall (" getindex" , val, key)
4548 tab[key.to (U)] = val.to (V)
4649
47- # Recursive import strategy
48- import ./ converttypes
49- # Tuple helpers -> result is memory managed by Julia's GC
50- # Convert object as tuple ?
5150proc nimToUnnamedJlTuple (v: tuple ): JlValue =
5251 var tupStr = $ v
5352 result = jlEval (tupStr)
5453
55- proc nimToNamedJlTuple (v: tuple | object ): JlValue =
54+ proc nimToNamedJlTuple * (v: tuple | object ): JlValue =
5655 result = jlEval (" NamedTuple()" )
5756 for name, field in v.fieldPairs:
58- result = jlCall (JlBase , " setindex" , result , toJlVal ( field) , jlSym (name))
57+ result = jlCall (JlBase , " setindex" , result , field, jlSym (name))
5958
60- proc isNamedTuple (v: tuple ) : bool =
59+ proc isNamedTuple (v: tuple ): bool =
6160 var i = 0
6261 for name, field in v.fieldPairs:
6362 if name != & " Field{ i} " :
@@ -71,11 +70,7 @@ proc nimToJlTuple*(v: tuple): JlValue =
7170 else :
7271 nimToUnnamedJlTuple (v)
7372
74- proc nimToJlTuple * (v: object ): JlValue =
75- nimToNamedJlTuple (v)
76-
7773proc nimTableToJlDict * [U, V: string | SomeNumber ](tab: Table [U, V]): JlValue =
7874 result = jlEval (" Dict()" )
7975 for name, field in tab:
80- discard jlCall (JlBase , " setindex!" , result , toJlVal (field), name)
81-
76+ discard jlCall (JlBase , " setindex!" , result , field, name)
0 commit comments