Skip to content

Commit cf286ec

Browse files
authored
Fixes reference bugs (#39)
2 parents 6c9074c + 0e4fc86 commit cf286ec

File tree

23 files changed

+780
-555
lines changed

23 files changed

+780
-555
lines changed

subprojects/oxsts.lang/src/main/java/hu/bme/mit/semantifyr/oxsts/lang/Oxsts.xtext

+12-7
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ fragment TransitionBody returns Transition:
113113
(
114114
'('
115115
(
116-
parameters+=Parameter
117-
(',' parameters+=Parameter)*
116+
arguments+=Argument
117+
(',' arguments+=Argument)*
118118
(',')?
119119
)?
120120
')'
@@ -125,8 +125,9 @@ fragment TransitionBody returns Transition:
125125
)*
126126
;
127127

128-
Parameter:
129-
name=ID ':' type=[Type|FQN]
128+
129+
Argument:
130+
name=ID ':' typing=Typing
130131
;
131132

132133

@@ -194,13 +195,13 @@ InlineSeq:
194195
InlineCall:
195196
'inline' reference=ReferenceExpression '('
196197
(
197-
parameterBindings+=ParameterBinding
198-
(',' parameterBindings+=ParameterBinding)* (',')?
198+
argumentBindings+=ArgumentBinding
199+
(',' argumentBindings+=ArgumentBinding)* (',')?
199200
)?
200201
')'
201202
;
202203

203-
ParameterBinding:
204+
ArgumentBinding:
204205
expression=Expression
205206
;
206207

@@ -343,6 +344,10 @@ Pattern:
343344
('or' patternBodies += PatternBody)*
344345
;
345346

347+
Parameter:
348+
name=ID ':' type=[Type|FQN]
349+
;
350+
346351
PatternBody:
347352
'{'
348353
(constraints += Constraint)*

subprojects/oxsts.lang/src/main/java/hu/bme/mit/semantifyr/oxsts/lang/scoping/OxstsScopeProvider.java

+2
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ protected List<Element> getAccessibleElements(EObject element) {
135135
elements.addAll(getInheritedElements(feature.getTyping()));
136136
} else if (element instanceof Parameter parameter) {
137137
elements.addAll(getInheritedElements(parameter.getType()));
138+
} else if (element instanceof Argument argument) {
139+
elements.addAll(getInheritedElements(argument.getTyping()));
138140
}
139141

140142
elements.addAll(getAccessibleElements(parent));

subprojects/oxsts.lang/src/main/java/hu/bme/mit/semantifyr/oxsts/lang/validation/OxstsValidator.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,18 @@ public void checkFeatureRedefinition(Feature feature) {
9797

9898
@Check
9999
public void checkTransitionInlining(InlineCall operation) {
100-
var bindings = operation.getParameterBindings();
100+
var bindings = operation.getArgumentBindings();
101101
var transition = (Transition) getReference(operation.getReference());
102102

103103
if (transition == null) return;
104104

105-
if (bindings.size() < transition.getParameters().size()) {
105+
if (bindings.size() < transition.getArguments().size()) {
106106
error("Transition inlining defines too few parameter bindings",
107-
OxstsPackage.Literals.INLINE_CALL__PARAMETER_BINDINGS,
107+
OxstsPackage.Literals.INLINE_CALL__ARGUMENT_BINDINGS,
108108
INVALID_INLINING);
109-
} else if (bindings.size() > transition.getParameters().size()) {
109+
} else if (bindings.size() > transition.getArguments().size()) {
110110
error("Transition inlining defines too much parameter bindings",
111-
OxstsPackage.Literals.INLINE_CALL__PARAMETER_BINDINGS,
111+
OxstsPackage.Literals.INLINE_CALL__ARGUMENT_BINDINGS,
112112
INVALID_INLINING);
113113
}
114114
}

subprojects/oxsts.model/model/oxsts.aird

+208-261
Large diffs are not rendered by default.

subprojects/oxsts.model/model/oxsts.ecore

+9-5
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"/>
2626
<eStructuralFeatures xsi:type="ecore:EAttribute" name="override" lowerBound="1"
2727
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"/>
28-
<eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
29-
eType="#//Parameter" containment="true"/>
28+
<eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
29+
eType="#//Argument" containment="true"/>
3030
</eClassifiers>
3131
<eClassifiers xsi:type="ecore:EClass" name="SequenceOperation" eSuperTypes="#//CompositeOperation"/>
3232
<eClassifiers xsi:type="ecore:EClass" name="Operation" abstract="true" eSuperTypes="#//Element"/>
@@ -64,8 +64,8 @@
6464
<eClassifiers xsi:type="ecore:EClass" name="InlineCall" eSuperTypes="#//InlineOperation">
6565
<eStructuralFeatures xsi:type="ecore:EReference" name="reference" eType="#//ReferenceExpression"
6666
containment="true"/>
67-
<eStructuralFeatures xsi:type="ecore:EReference" name="parameterBindings" upperBound="-1"
68-
eType="#//ParameterBinding" containment="true"/>
67+
<eStructuralFeatures xsi:type="ecore:EReference" name="argumentBindings" upperBound="-1"
68+
eType="#//ArgumentBinding" containment="true"/>
6969
</eClassifiers>
7070
<eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//Element"/>
7171
<eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" abstract="true" eSuperTypes="#//Expression"/>
@@ -167,7 +167,7 @@
167167
<eStructuralFeatures xsi:type="ecore:EReference" name="variables" upperBound="-1"
168168
eType="#//Variable" containment="true"/>
169169
</eClassifiers>
170-
<eClassifiers xsi:type="ecore:EClass" name="ParameterBinding">
170+
<eClassifiers xsi:type="ecore:EClass" name="ArgumentBinding">
171171
<eStructuralFeatures xsi:type="ecore:EReference" name="expression" lowerBound="1"
172172
eType="#//Expression" containment="true"/>
173173
</eClassifiers>
@@ -273,4 +273,8 @@
273273
eType="#//Feature"/>
274274
<eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
275275
</eClassifiers>
276+
<eClassifiers xsi:type="ecore:EClass" name="Argument" eSuperTypes="#//Element">
277+
<eStructuralFeatures xsi:type="ecore:EReference" name="typing" lowerBound="1"
278+
eType="#//Typing" containment="true"/>
279+
</eClassifiers>
276280
</ecore:EPackage>

subprojects/oxsts.model/model/oxsts.genmodel

+7-4
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//Transition/operation"/>
3131
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute oxsts.ecore#//Transition/virtual"/>
3232
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute oxsts.ecore#//Transition/override"/>
33-
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//Transition/parameters"/>
33+
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//Transition/arguments"/>
3434
</genClasses>
3535
<genClasses ecoreClass="oxsts.ecore#//SequenceOperation"/>
3636
<genClasses ecoreClass="oxsts.ecore#//Operation"/>
@@ -58,7 +58,7 @@
5858
</genClasses>
5959
<genClasses ecoreClass="oxsts.ecore#//InlineCall">
6060
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//InlineCall/reference"/>
61-
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//InlineCall/parameterBindings"/>
61+
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//InlineCall/argumentBindings"/>
6262
</genClasses>
6363
<genClasses ecoreClass="oxsts.ecore#//Expression"/>
6464
<genClasses ecoreClass="oxsts.ecore#//LiteralExpression"/>
@@ -136,8 +136,8 @@
136136
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//XSTS/property"/>
137137
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//XSTS/variables"/>
138138
</genClasses>
139-
<genClasses ecoreClass="oxsts.ecore#//ParameterBinding">
140-
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//ParameterBinding/expression"/>
139+
<genClasses ecoreClass="oxsts.ecore#//ArgumentBinding">
140+
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//ArgumentBinding/expression"/>
141141
</genClasses>
142142
<genClasses ecoreClass="oxsts.ecore#//ContextDependentReference"/>
143143
<genClasses ecoreClass="oxsts.ecore#//LessThanOperator"/>
@@ -210,5 +210,8 @@
210210
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference oxsts.ecore#//FeatureConstraint/feature"/>
211211
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference oxsts.ecore#//FeatureConstraint/type"/>
212212
</genClasses>
213+
<genClasses ecoreClass="oxsts.ecore#//Argument">
214+
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference oxsts.ecore#//Argument/typing"/>
215+
</genClasses>
213216
</genPackages>
214217
</genmodel:GenModel>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
8+
var __Mission__a__x : boolean
9+
10+
trans {
11+
__Mission__a__x := true;
12+
}
13+
14+
init {
15+
__Mission__a__x := false;
16+
}
17+
18+
env {}
19+
20+
prop {
21+
(__Mission__a__x != true)
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
package Test
8+
9+
type Simple {
10+
var x : Boolean
11+
12+
init {
13+
x := false
14+
}
15+
16+
tran set(y: Boolean) {
17+
x := y
18+
}
19+
}
20+
21+
target Mission {
22+
containment a : Simple
23+
24+
init {
25+
inline a.init()
26+
}
27+
28+
tran {
29+
inline a.set(true)
30+
}
31+
32+
prop {
33+
a.x != true
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
8+
var __Mission__a__x : integer
9+
10+
trans {
11+
__Mission__a__x := 10;
12+
}
13+
14+
init {
15+
__Mission__a__x := 0;
16+
}
17+
18+
env {}
19+
20+
prop {
21+
(__Mission__a__x != 10)
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
package Test
8+
9+
type Simple {
10+
var x : Integer
11+
12+
init {
13+
x := 0
14+
}
15+
16+
tran set(y: Integer) {
17+
x := y
18+
}
19+
}
20+
21+
target Mission {
22+
containment a : Simple
23+
24+
init {
25+
inline a.init()
26+
}
27+
28+
tran {
29+
inline a.set(10)
30+
}
31+
32+
prop {
33+
a.x != 10
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
8+
var __Mission__a__x : boolean = true
9+
10+
trans {
11+
}
12+
13+
init {
14+
}
15+
16+
env {}
17+
18+
prop {
19+
(__Mission__a__x != true)
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
package Test
8+
9+
type Simple {
10+
reference defaultX : Boolean = false
11+
var x : Boolean = defaultX
12+
}
13+
14+
target Mission {
15+
containment a : Simple {
16+
reference ::> defaultX : Boolean = true
17+
}
18+
19+
init {}
20+
tran {}
21+
22+
prop {
23+
a.x != true
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
8+
var __Mission__a__x : integer = 10
9+
10+
trans {
11+
}
12+
13+
init {
14+
}
15+
16+
env {}
17+
18+
prop {
19+
(__Mission__a__x != 10)
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023-2024 The Semantifyr Authors
3+
*
4+
* SPDX-License-Identifier: EPL-2.0
5+
*/
6+
7+
package Test
8+
9+
type Simple {
10+
reference defaultX : Integer = 0
11+
var x : Integer = defaultX
12+
}
13+
14+
target Mission {
15+
containment a : Simple {
16+
reference ::> defaultX : Integer = 10
17+
}
18+
19+
init {}
20+
tran {}
21+
22+
prop {
23+
a.x != 10
24+
}
25+
}
26+

0 commit comments

Comments
 (0)