1
1
include (" @aml_parse/literals.jl" )
2
+ include (" @aml_parse/custom_code.jl" )
2
3
3
4
"""
4
5
@aml parser function
@@ -16,11 +17,14 @@ function aml_parse(expr::Expr)
16
17
17
18
argsexpr = expr. args[3 ] # arguments of the type
18
19
20
+ # TODO : optimize and fuse these
19
21
areargs_inds = findall (x-> ! (isa (x, LineNumberNode)), argsexpr. args)
22
+ macronum = count (x-> isa (x, Tuple{Symbol, Expr}), argsexpr. args)
20
23
21
24
data = argsexpr. args[areargs_inds]
25
+
22
26
datanum = length (areargs_inds)
23
- argsnum = datanum - 1
27
+ argsnum = datanum - ( 1 + macronum) # 1 for struct name
24
28
25
29
args_param = Vector {Union{Expr,Symbol}} (undef, argsnum) # Expr(:parameters)[]
26
30
args_var = Vector {Union{Expr,Symbol}} (undef, argsnum)
@@ -36,10 +40,10 @@ function aml_parse(expr::Expr)
36
40
struct_nodetype = AbsDocOrNode
37
41
struct_function = Array {Union{Missing, Symbol, Function},0} (missing )
38
42
39
-
43
+ iMacro = 0
40
44
for iData = 1 : datanum # iterating over arguments of each type argument
41
45
42
- iArg = iData- 1
46
+ iArg = iData - ( 1 + iMacro)
43
47
i = areargs_inds[iData] # used for argsexpr.args[i]
44
48
45
49
ei = data[iData] # type argument element i
@@ -93,7 +97,7 @@ function aml_parse(expr::Expr)
93
97
94
98
# Custom Code
95
99
elseif isa (ei, Tuple{Symbol, Expr})
96
-
100
+ iMacro += 1
97
101
# Row for code insertion (insert before iArg-th argument)
98
102
if ei[1 ] == :creator
99
103
args_custom_creator[iArg] = ei[2 ]
0 commit comments