Skip to content

Commit 9aafacb

Browse files
committed
Fix management of ComparisonOperator (finally)
1 parent 773fc50 commit 9aafacb

12 files changed

Lines changed: 184 additions & 7 deletions

‎src/FAST-Python-Model-Generator/FASTPythonMetamodelGenerator.class.st‎

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ FASTPythonMetamodelGenerator >> defineClasses [
186186
classDefinition withTesting.
187187
classPattern := builder ensureClassNamed: #ClassPattern."Todo"
188188
comment := builder ensureClassNamed: #Comment."Todo"
189-
comparisonOperator := builder ensureClassNamed: #ComparisonOperator."Todo"
189+
comparisonOperator := builder ensureClassNamed: #ComparisonOperator.
190190
complexPattern := builder ensureClassNamed: #ComplexPattern."Todo"
191191
concatenatedString := builder ensureClassNamed: #ConcatenatedString."Todo"
192192
conditionalExpression := builder ensureClassNamed: #ConditionalExpression."Todo"
@@ -312,6 +312,8 @@ FASTPythonMetamodelGenerator >> defineHierarchy [
312312

313313
comment --|> tComment.
314314

315+
comparisonOperator --|> expression.
316+
315317
expression --|> tExpression.
316318

317319
self flag: #todo. "I am not sure this should be the case but the importer is too young and we need this to not have everything breaking."
@@ -337,11 +339,26 @@ FASTPythonMetamodelGenerator >> defineHierarchy [
337339
string --|> tStringLiteral
338340
]
339341

342+
{ #category : 'definition' }
343+
FASTPythonMetamodelGenerator >> defineProperties [
344+
345+
super defineProperties.
346+
347+
(comparisonOperator property: #operators type: #String)
348+
multivalued: true;
349+
comment: 'The comparators applied in order. Possible operators: <, <=, ==, !=, >=, >, <>, in, not in, is, is not'
350+
]
351+
340352
{ #category : 'definition' }
341353
FASTPythonMetamodelGenerator >> defineRelations [
342354

343355
super defineRelations.
344-
(entity property: #'genericChildren') <>-* (entity property: #'genericParent').
356+
357+
(entity property: #genericChildren) <>-* (entity property: #genericParent).
358+
359+
((comparisonOperator property: #operands) comment:
360+
'List of the operands of the comparison operands. For example if we have `a == b != c`, it will be a, b and c.')
361+
<>-* ((tExpression property: #parentComparisonOperator) comment: 'Parent comparison expression of which I am.')
345362
]
346363

347364
{ #category : 'definition' }

‎src/FAST-Python-Model/FASTPyBinaryOperator.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|

‎src/FAST-Python-Model/FASTPyBoolean.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|

‎src/FAST-Python-Model/FASTPyBooleanOperator.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|
Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,27 @@
1+
"
2+
## Relations
3+
======================
4+
5+
### Children
6+
| Relation | Origin | Opposite | Type | Comment |
7+
|---|
8+
| `operands` | `FASTPyComparisonOperator` | `parentComparisonOperator` | `FASTTExpression` | List of the operands of the comparison operands. For example if we have `a == b != c`, it will be a, b and c.|
9+
10+
11+
## Properties
12+
======================
13+
14+
| Name | Type | Default value | Comment |
15+
|---|
16+
| `operators` | `String` | nil | The comparators applied in order. Possible operators: <, <=, ==, !=, >=, >, <>, in, not in, is, is not|
17+
18+
"
119
Class {
220
#name : 'FASTPyComparisonOperator',
3-
#superclass : 'FASTPyEntity',
21+
#superclass : 'FASTPyExpression',
22+
#instVars : [
23+
'#operators => FMProperty'
24+
],
425
#category : 'FAST-Python-Model-Entities',
526
#package : 'FAST-Python-Model',
627
#tag : 'Entities'
@@ -9,8 +30,56 @@ Class {
930
{ #category : 'meta' }
1031
FASTPyComparisonOperator class >> annotation [
1132

12-
<FMClass: #ComparisonOperator super: #FASTPyEntity>
33+
<FMClass: #ComparisonOperator super: #FASTPyExpression>
1334
<package: #'FAST-Python-Model'>
1435
<generated>
1536
^ self
1637
]
38+
39+
{ #category : 'adding' }
40+
FASTPyComparisonOperator >> addOperand: anObject [
41+
<generated>
42+
^ self operands add: anObject
43+
]
44+
45+
{ #category : 'accessing' }
46+
FASTPyComparisonOperator >> operands [
47+
"Relation named: #operands type: #FASTTExpression opposite: #parentComparisonOperator"
48+
49+
<generated>
50+
<FMComment: 'List of the operands of the comparison operands. For example if we have `a == b != c`, it will be a, b and c.'>
51+
<derived>
52+
<FMProperty: #operands type: #FASTTExpression opposite: #parentComparisonOperator>
53+
<multivalued>
54+
^ self attributeAt: #operands ifAbsentPut: [ FMMultivalueLink on: self opposite: #parentComparisonOperator: ]
55+
]
56+
57+
{ #category : 'accessing' }
58+
FASTPyComparisonOperator >> operands: anObject [
59+
60+
<generated>
61+
self operands value: anObject
62+
]
63+
64+
{ #category : 'navigation' }
65+
FASTPyComparisonOperator >> operandsGroup [
66+
<generated>
67+
<navigation: 'Operands'>
68+
^ MooseSpecializedGroup withAll: self operands asSet
69+
]
70+
71+
{ #category : 'accessing' }
72+
FASTPyComparisonOperator >> operators [
73+
74+
<FMProperty: #operators type: #String>
75+
<generated>
76+
<multivalued>
77+
<FMComment: 'The comparators applied in order. Possible operators: <, <=, ==, !=, >=, >, <>, in, not in, is, is not'>
78+
^ operators
79+
]
80+
81+
{ #category : 'accessing' }
82+
FASTPyComparisonOperator >> operators: anObject [
83+
<generated>
84+
operators := anObject
85+
]

‎src/FAST-Python-Model/FASTPyEntity.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
1111
| `genericParent` | `FASTPyEntity` | `genericChildren` | `FASTPyEntity` | |
12+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1213
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1314
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1415
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|

‎src/FAST-Python-Model/FASTPyExpression.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|

‎src/FAST-Python-Model/FASTPyLiteral.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|

‎src/FAST-Python-Model/FASTPyString.class.st‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
| `argumentOwner` | `FASTTExpression` | `arguments` | `FASTTWithArguments` | my owner|
99
| `assignedIn` | `FASTTExpression` | `expression` | `FASTTAssignment` | Optional assignment where this expression is used|
1010
| `expressionStatementOwner` | `FASTTExpression` | `expression` | `FASTTExpressionStatement` | The expression statement that own me (if it's the case|
11+
| `parentComparisonOperator` | `FASTTExpression` | `operands` | `FASTPyComparisonOperator` | Parent comparison expression of which I am.|
1112
| `parentConditionalStatement` | `FASTTExpression` | `condition` | `FASTTConditionalStatement` | Optional condition statement where this expression is used|
1213
| `parentExpression` | `FASTTExpression` | `expression` | `FASTTUnaryExpression` | Parent (unary) expression|
1314
| `parentExpressionLeft` | `FASTTExpression` | `leftOperand` | `FASTTBinaryExpression` | Parent (binary) expression of which I am left side|
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Extension { #name : 'FASTTExpression' }
2+
3+
{ #category : '*FAST-Python-Model-accessing' }
4+
FASTTExpression >> parentComparisonOperator [
5+
"Relation named: #parentComparisonOperator type: #FASTPyComparisonOperator opposite: #operands"
6+
7+
<generated>
8+
<FMComment: 'Parent comparison expression of which I am.'>
9+
<container>
10+
<FMProperty: #parentComparisonOperator type: #FASTPyComparisonOperator opposite: #operands>
11+
<package: #'FAST-Python-Model'>
12+
^ self attributeAt: #parentComparisonOperator ifAbsent: [ nil ]
13+
]
14+
15+
{ #category : '*FAST-Python-Model-accessing' }
16+
FASTTExpression >> parentComparisonOperator: anObject [
17+
18+
<generated>
19+
self attributeAt: #parentComparisonOperator put: (FMMultivalueLink on: self update: #operands from: self parentComparisonOperator to: anObject).
20+
]

0 commit comments

Comments
 (0)