@@ -55,49 +55,69 @@ def expand_elements(
55
55
elements_changed = False
56
56
new_elements : List [ElementType ] = []
57
57
for element in elements :
58
- expanded_elements : List [ElementType ] = []
59
- if isinstance (element , SpecOp ):
60
- if element .op == "send" :
61
- expanded_elements = _expand_send_element (element )
62
- elif element .op == "match" :
63
- expanded_elements = _expand_match_element (element )
64
- elif element .op == "start" :
65
- expanded_elements = _expand_start_element (element )
66
- elif element .op == "stop" :
67
- expanded_elements = _expand_stop_element (element )
68
- elif element .op == "activate" :
69
- expanded_elements = _expand_activate_element (element )
70
- elif element .op == "await" :
71
- expanded_elements = _expand_await_element (element )
72
- elif isinstance (element , Assignment ):
73
- expanded_elements = _expand_assignment_stmt_element (element )
74
- elif isinstance (element , While ):
75
- expanded_elements = _expand_while_stmt_element (element , flow_configs )
76
- elif isinstance (element , If ):
77
- expanded_elements = _expand_if_element (element , flow_configs )
78
- elements_changed = True # Makes sure to update continue/break elements
79
- elif isinstance (element , When ):
80
- expanded_elements = _expand_when_stmt_element (element , flow_configs )
81
- elements_changed = True # Makes sure to update continue/break elements
82
- elif isinstance (element , Continue ):
83
- if element .label is None and continue_break_labels is not None :
84
- element .label = continue_break_labels [0 ]
85
- elif isinstance (element , Break ):
86
- if element .label is None and continue_break_labels is not None :
87
- element .label = continue_break_labels [1 ]
88
-
89
- if len (expanded_elements ) > 0 :
90
- # Map new elements to source
91
- for expanded_element in expanded_elements :
92
- if isinstance (expanded_element , Element ) and isinstance (
93
- element , Element
94
- ):
95
- expanded_element ._source = element ._source
96
- # Add new elements
97
- new_elements .extend (expanded_elements )
98
- elements_changed = True
99
- else :
100
- new_elements .extend ([element ])
58
+ try :
59
+ expanded_elements : List [ElementType ] = []
60
+ if isinstance (element , SpecOp ):
61
+ if element .op == "send" :
62
+ expanded_elements = _expand_send_element (element )
63
+ elif element .op == "match" :
64
+ expanded_elements = _expand_match_element (element )
65
+ elif element .op == "start" :
66
+ expanded_elements = _expand_start_element (element )
67
+ elif element .op == "stop" :
68
+ expanded_elements = _expand_stop_element (element )
69
+ elif element .op == "activate" :
70
+ expanded_elements = _expand_activate_element (element )
71
+ elif element .op == "await" :
72
+ expanded_elements = _expand_await_element (element )
73
+ elif isinstance (element , Assignment ):
74
+ expanded_elements = _expand_assignment_stmt_element (element )
75
+ elif isinstance (element , While ):
76
+ expanded_elements = _expand_while_stmt_element (
77
+ element , flow_configs
78
+ )
79
+ elif isinstance (element , If ):
80
+ expanded_elements = _expand_if_element (element , flow_configs )
81
+ elements_changed = (
82
+ True # Makes sure to update continue/break elements
83
+ )
84
+ elif isinstance (element , When ):
85
+ expanded_elements = _expand_when_stmt_element (element , flow_configs )
86
+ elements_changed = (
87
+ True # Makes sure to update continue/break elements
88
+ )
89
+ elif isinstance (element , Continue ):
90
+ if element .label is None and continue_break_labels is not None :
91
+ element .label = continue_break_labels [0 ]
92
+ elif isinstance (element , Break ):
93
+ if element .label is None and continue_break_labels is not None :
94
+ element .label = continue_break_labels [1 ]
95
+
96
+ if len (expanded_elements ) > 0 :
97
+ # Map new elements to source
98
+ for expanded_element in expanded_elements :
99
+ if isinstance (expanded_element , Element ) and isinstance (
100
+ element , Element
101
+ ):
102
+ expanded_element ._source = element ._source
103
+ # Add new elements
104
+ new_elements .extend (expanded_elements )
105
+ elements_changed = True
106
+ else :
107
+ new_elements .extend ([element ])
108
+
109
+ except Exception as e :
110
+ error = "Error"
111
+ if e .args [0 ]:
112
+ error = e .args [0 ]
113
+
114
+ if hasattr (element , "_source" ) and element ._source :
115
+ # TODO: Resolve source line to Colang file level
116
+ raise ColangSyntaxError (
117
+ error + f" on source line { element ._source .line } "
118
+ )
119
+ else :
120
+ raise ColangSyntaxError (error )
101
121
102
122
elements = new_elements
103
123
return elements
@@ -476,7 +496,7 @@ def _expand_await_element(
476
496
)
477
497
else :
478
498
raise ColangSyntaxError (
479
- f"Unsupported spec type '{ type (element .spec )} ', element '{ element .spec .name } ' on line { element . _source . line } "
499
+ f"Unsupported spec type '{ type (element .spec )} ', element '{ element .spec .name } '"
480
500
)
481
501
else :
482
502
# Element group
@@ -631,7 +651,7 @@ def _expand_activate_element(
631
651
else :
632
652
# It's an UMIM event
633
653
raise ColangSyntaxError (
634
- f"Only flows can be activated but not '{ element .spec .spec_type } ', element '{ element .spec .name } ' on line { element . _source . line } ! "
654
+ f"Only flows can be activated but not '{ element .spec .spec_type } ', element '{ element .spec .name } '"
635
655
)
636
656
elif isinstance (element .spec , dict ):
637
657
# Multiple match elements
0 commit comments