@@ -40,8 +40,8 @@ package ecs_generator
40
40
# Master
41
41
42
42
namespace ecs_info
43
- constant version = "4.0.0 Cuon alpinus(Preview) Build 230404 "
44
- constant std_version = "210604 "
43
+ constant version = "4.0.0 Cuon alpinus(Preview) Build 230405 "
44
+ constant std_version = "210605 "
45
45
end
46
46
47
47
import parsergen, ecs
@@ -130,12 +130,15 @@ class generator
130
130
nodes := nodes[0].nodes
131
131
if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "mul-expr"
132
132
nodes := nodes[0].nodes
133
- if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "unary -expr"
133
+ if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "conv -expr"
134
134
nodes := nodes[0].nodes
135
- if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "prim -expr"
135
+ if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "unary -expr"
136
136
nodes := nodes[0].nodes
137
- if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "visit-expr"
138
- return get_id_of_visit_expr(nodes[0].nodes)
137
+ if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "prim-expr"
138
+ nodes := nodes[0].nodes
139
+ if nodes.size == 1 && typeid nodes[0] == typeid parsergen.syntax_tree && nodes[0].root == "visit-expr"
140
+ return get_id_of_visit_expr(nodes[0].nodes)
141
+ end
139
142
end
140
143
end
141
144
end
@@ -642,35 +645,61 @@ class generator
642
645
this.visit_unary_expr(nodes[idx++].nodes)
643
646
end
644
647
if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "new" || typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "gcnew")
648
+ matched = true
645
649
# Optional
646
650
if nodes.size > 2 && (typeid nodes[2] == typeid parsergen.syntax_tree && nodes[2].root == "array")
647
- matched = true
648
- # Condition
649
- block
650
- var matched = false
651
- if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "new")
652
- matched = true
653
- # Visit term "new"
654
- ++idx; target.print(ecs_prefix + "ecs.param_new(")
655
- end
656
- if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "gcnew")
657
- matched = true
658
- # Visit term "gcnew"
659
- ++idx; target.print(ecs_prefix + "ecs.param_gcnew(")
651
+ var id = get_id_of_visit_expr(nodes[1].nodes)
652
+ if id != null && ecs.internal_type.exist(id)
653
+ # Condition
654
+ block
655
+ var matched = false
656
+ if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "new")
657
+ matched = true
658
+ # Visit term "new"
659
+ ++idx; target.print(ecs_prefix + "ecs.type_constructor.__" + id + "(")
660
+ end
661
+ if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "gcnew")
662
+ matched = true
663
+ # Visit term "gcnew"
664
+ ++idx; target.print(ecs_prefix + "&ecs.type_constructor.__" + id + "(")
665
+ end
666
+ if !matched
667
+ # Error
668
+ return
669
+ end
660
670
end
661
- if !matched
662
- # Error
663
- return
671
+ # Recursive Visit visit-expr
672
+ idx++
673
+ # Recursive Visit array
674
+ this.visit_array(nodes[idx++].nodes)
675
+ target.print("...)")
676
+ else
677
+ # Condition
678
+ block
679
+ var matched = false
680
+ if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "new")
681
+ matched = true
682
+ # Visit term "new"
683
+ ++idx; target.print(ecs_prefix + "ecs.param_new(")
684
+ end
685
+ if !matched && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "gcnew")
686
+ matched = true
687
+ # Visit term "gcnew"
688
+ ++idx; target.print(ecs_prefix + "ecs.param_gcnew(")
689
+ end
690
+ if !matched
691
+ # Error
692
+ return
693
+ end
664
694
end
695
+ # Recursive Visit visit-expr
696
+ this.visit_visit_expr(nodes[idx++].nodes)
697
+ target.print(", ")
698
+ # Recursive Visit array
699
+ this.visit_array(nodes[idx++].nodes)
700
+ target.print(")")
665
701
end
666
- # Recursive Visit unary-expr
667
- this.visit_unary_expr(nodes[idx++].nodes)
668
- target.print(", ")
669
- # Recursive Visit array
670
- this.visit_array(nodes[idx++].nodes)
671
- target.print(")")
672
702
else
673
- matched = true
674
703
# Condition
675
704
block
676
705
var matched = false
@@ -689,8 +718,8 @@ class generator
689
718
return
690
719
end
691
720
end
692
- # Recursive Visit unary -expr
693
- this.visit_unary_expr (nodes[idx++].nodes)
721
+ # Recursive Visit visit -expr
722
+ this.visit_visit_expr (nodes[idx++].nodes)
694
723
end
695
724
end
696
725
if !matched && (typeid nodes[idx] == typeid parsergen.syntax_tree && nodes[idx].root == "prim-expr")
@@ -1142,8 +1171,8 @@ class generator
1142
1171
end
1143
1172
function visit_mul_expr(nodes)
1144
1173
var idx = 0
1145
- # Recursive Visit unary -expr
1146
- this.visit_unary_expr (nodes[idx++].nodes)
1174
+ # Recursive Visit conv -expr
1175
+ this.visit_conv_expr (nodes[idx++].nodes)
1147
1176
# Optional
1148
1177
if idx < nodes.size && (typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "*" || typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "/" || typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "%" || typeid nodes[idx] == typeid parsergen.token_type && nodes[idx].data == "^")
1149
1178
# Condition
@@ -1178,6 +1207,29 @@ class generator
1178
1207
this.visit_mul_expr(nodes[idx++].nodes)
1179
1208
end
1180
1209
end
1210
+ function visit_conv_expr(nodes)
1211
+ if nodes.size > 1
1212
+ # Recursive Visit visit-expr
1213
+ link visit_expr_nodes = nodes[2].nodes
1214
+ var id = get_id_of_visit_expr(visit_expr_nodes)
1215
+ if id != null && ecs.internal_type.exist(id)
1216
+ target.print(ecs_prefix + "ecs.type_constructor.__" + id + "(")
1217
+ # Recursive Visit unary-expr
1218
+ this.visit_unary_expr(nodes[0].nodes)
1219
+ target.print(")")
1220
+ else
1221
+ target.print(ecs_prefix + "ecs.param_new(")
1222
+ this.visit_visit_expr(visit_expr_nodes)
1223
+ target.print(", {")
1224
+ # Recursive Visit unary-expr
1225
+ this.visit_unary_expr(nodes[0].nodes)
1226
+ target.print("})")
1227
+ end
1228
+ else
1229
+ # Recursive Visit unary-expr
1230
+ this.visit_unary_expr(nodes[0].nodes)
1231
+ end
1232
+ end
1181
1233
function visit_switch_stmts(nodes)
1182
1234
var idx = 0
1183
1235
++indent
0 commit comments