| import '/resource/org.eclipse.ocl.pivot/model/Lookup.ecore' |
| import '/resource/org.eclipse.ocl.pivot/model/Pivot.ecore' |
| import '/resource/org.eclipse.ocl.pivot/model/PivotLookup.ocl' |
| import 'ImperativeOCL.ecore' |
| |
| package imperativeocl |
| |
| context BlockExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv().nestedEnv() |
| |
| |
| -- FIXME OMG issue. It's not clear if the variable is available to be used by further expressions (sibling elements) or only for inner body expression |
| -- in essence if a compute expression opens a new scope or not |
| context ComputeExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self._body = child then |
| parentEnv().addElement(self.returnedElement) |
| else |
| parentEnv() |
| endif |
| |
| -- Overwritten. This will be autogenerated |
| context WhileExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- FIXME (Abstract) |
| -- Overwritten. This will be autogenerated |
| context ImperativeLoopExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| context ForExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.condition = child then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators) |
| else if self.ownedBody = child then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators) |
| else if self.ownedIterators->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators->select(x | self.ownedIterators->indexOf(x) < self.ownedIterators->indexOf(child))) |
| else |
| parentEnv() |
| endif endif endif |
| |
| -- FIXME OMG issue. Messy in the spec. Shouldn't be an (OCL) IterateExp + ImperativeExp ?. Very confusing. Need deeper thought. |
| -- Besides, the logic seems to be different to the OCL one. OCL assigns the body to the accumulator (the acc var is normally used |
| -- in the body expressions), whereas QVTo concats (adds) the body to the accumulator (is the acc needed by the body? -> specify/clarify) |
| context ImperativeIterateExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if self.condition = child then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators) |
| .addElement(self.target) |
| else if self.ownedBody = child then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators) |
| else if self.ownedIterators->includes(child) then |
| parentEnv().nestedEnv() |
| .addElements(self.ownedIterators->select(x | self.ownedIterators->indexOf(x) < self.ownedIterators->indexOf(child))) |
| else |
| parentEnv() |
| endif endif endif |
| |
| -- Overwritten. This will be autogenerated |
| context SwitchExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context AltExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Note, since we have a Top-Down description, the VariableInitExp doesn't contribute nothing to the environment |
| -- Parents will have to handle when a VariableInitExp is encountered. |
| -- Overwritten. This will be autogenerated |
| context VariableInitExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context AssignExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context UnlinkExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| |
| context TryExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| if (self.tryBody->includes(child)) then |
| parentEnv().nestedEnv() |
| else |
| parentEnv() |
| endif |
| |
| -- FIXME Issue OMG. Smelly spec and pivot implementation. Think deeper. |
| --context CatchExp |
| --def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| -- if (self._body = child) then |
| -- parentEnv().nestedEnv() |
| -- .addElement(self.ex) |
| -- else |
| -- parentEnv() |
| -- endif |
| |
| -- Overwritten. This will be autogenerated |
| context CatchExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context RaiseExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ReturnExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context BreakExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context LogExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context AssertExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context InstantiationExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context OrderedTupleLiteralPart |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context OrderedTupleType |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ContinueExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context UnpackExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DictLiteralExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ListLiteralExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context Typedef |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context OrderedTupleLiteralExp |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DictionaryType |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ImperativeExpression |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context ListType |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| -- Overwritten. This will be autogenerated |
| context DictLiteralPart |
| def : _env(child : pivot::Element) : lookup::LookupEnvironment = |
| parentEnv() |
| |
| endpackage |