blob: 651f35185e7f9c345618d68bd4eef4c0d2b930fc [file] [log] [blame]
import 'KiamaAS.ecore#/';
import 'KiamaCS.ecore#/';
transformation KiamaRewrite_qvtp_qvtcas
{
leftCS imports kiamacs;
rightAS imports kiamaas;
}
map __root__ in KiamaRewrite_qvtp_qvtcas
{
var roots : Set(ocl::OclElement) := leftCS.rootObjects();
var _'«child-NumCS»' : Set(kiamacs::NumCS) := roots->selectByKind(kiamacs::NumCS);
buffer ji_NumCS1 : Set(kiamacs::NumCS) := _'«child-NumCS»';
var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := roots->selectByKind(kiamacs::PlusCS);
buffer ji_PlusCS1 : Set(kiamacs::PlusCS) := _'«child-PlusCS»';
buffer ji_PlusCS_31 : Set(kiamacs::PlusCS) := _'«child-PlusCS»';
var _'«child-TopCS»' : Set(kiamacs::TopCS) := roots->selectByKind(kiamacs::TopCS);
var ji_TopCS1 : Set(kiamacs::TopCS) := _'«child-TopCS»';
for loop0 : kiamacs::TopCS in ji_TopCS1 {
call m_TopCS_ast {
lTopCS iterates loop0;
}
}
for loop0 : kiamacs::TopCS in ji_TopCS1 {
call r_TopCS_node {
ji_NumCS appendsTo ji_NumCS1;
ji_PlusCS appendsTo ji_PlusCS1;
ji_PlusCS_3 appendsTo ji_PlusCS_31;
_'«parent»' iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS_31 {
infinite call r__PlusCS {
ji_NumCS appendsTo ji_NumCS1;
ji_PlusCS appendsTo ji_PlusCS1;
_'«head»' iterates loop0;
}
}
for loop0 : kiamacs::NumCS in ji_NumCS1 {
call m_NumCS_ast {
lNumCS iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS1 {
call m_PlusCS_ast_2 {
lPlusCS iterates loop0;
}
}
for loop0 : kiamacs::NumCS in ji_NumCS1 {
call m_NumCS_ast_value_1 {
lNumCS iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS1 {
call m_PlusCS_ast_left {
lPlusCS iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS1 {
call m_PlusCS_ast_right {
lPlusCS iterates loop0;
}
}
for loop0 : kiamacs::TopCS in ji_TopCS1 {
call m_TopCS_ast_node {
lTopCS iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS1 {
call m_PlusCS_ast_1 {
lPlusCS iterates loop0;
}
}
for loop0 : kiamacs::NumCS in ji_NumCS1 {
call m_NumCS_ast_2 {
lNumCS iterates loop0;
}
}
for loop0 : kiamacs::PlusCS in ji_PlusCS1 {
call m_PlusCS_ast {
lPlusCS iterates loop0;
}
}
}
map m_NumCS_ast in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lNumCS : NumCS;
new:rightAS rNum : Num;
set lNumCS.ast := rNum;
}
map m_NumCS_ast_2 in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lNumCS : NumCS;
var ast : ecore::EObject := lNumCS.ast;
var aNum : kiamaas::Num := ast.oclAsType(kiamaas::Num);
var oclContainer : ocl::OclElement := aNum.oclContainer;
var _'oclIsKindOf\nkiamaas::Top' : Boolean := oclContainer.oclIsKindOf(kiamaas::Top);
var _'if' : Integer := if _'oclIsKindOf\nkiamaas::Top'
then 0
else oclContainer.oclAsType(kiamaas::Plus).depth + 1 endif;
notify set aNum.depth := _'if';
}
map m_NumCS_ast_value_1 in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lNumCS : NumCS;
var ast : ecore::EObject := lNumCS.ast;
var value : ecore::EInt := lNumCS.value;
var aNum : kiamaas::Num := ast.oclAsType(kiamaas::Num);
notify set aNum.height := 0;
set aNum.value := value;
}
map m_PlusCS_ast in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lPlusCS : PlusCS;
var ast : ecore::EObject := lPlusCS.ast;
var aPlus : kiamaas::Plus := ast.oclAsType(kiamaas::Plus);
var left : kiamaas::Node := aPlus.left;
var right : kiamaas::Node := aPlus.right;
observe kiamaas::Node::height var height : ecore::EIntegerObject := left.height;
observe kiamaas::Node::height var height1 : ecore::EIntegerObject := right.height;
var oclAsSet : Set(ecore::EIntegerObject) := height.oclAsSet();
var including : Set(ecore::EIntegerObject) := oclAsSet->including(height1);
var max : ecore::EIntegerObject := including->max();
var _'+' : Integer := max + 1;
notify set aPlus.height := _'+';
}
map m_PlusCS_ast_1 in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lPlusCS : PlusCS;
var ast : ecore::EObject := lPlusCS.ast;
var aPlus : kiamaas::Plus := ast.oclAsType(kiamaas::Plus);
var oclContainer : ocl::OclElement := aPlus.oclContainer;
var _'oclIsKindOf\nkiamaas::Top' : Boolean := oclContainer.oclIsKindOf(kiamaas::Top);
observe kiamaas::Node::depth var _'if' : Integer := if _'oclIsKindOf\nkiamaas::Top'
then 0
else oclContainer.oclAsType(kiamaas::Plus).depth + 1 endif;
notify set aPlus.depth := _'if';
}
map m_PlusCS_ast_2 in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lPlusCS : PlusCS;
new:rightAS rPlus : Plus;
set lPlusCS.ast := rPlus;
}
map m_PlusCS_ast_left in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lPlusCS : PlusCS;
var ast : ecore::EObject := lPlusCS.ast;
var left : kiamacs::NodeCS := lPlusCS.left;
var aPlus : kiamaas::Plus := ast.oclAsType(kiamaas::Plus);
var ast1 : ecore::EObject := left.ast;
var aNode : kiamaas::Node := ast1.oclAsType(kiamaas::Node);
set aPlus.left := aNode;
}
map m_PlusCS_ast_right in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lPlusCS : PlusCS;
var ast : ecore::EObject := lPlusCS.ast;
var right : kiamacs::NodeCS := lPlusCS.right;
var aPlus : kiamaas::Plus := ast.oclAsType(kiamaas::Plus);
var ast1 : ecore::EObject := right.ast;
var aNode : kiamaas::Node := ast1.oclAsType(kiamaas::Node);
set aPlus.right := aNode;
}
map m_TopCS_ast in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lTopCS : TopCS;
new:rightAS rTop : Top;
set lTopCS.ast := rTop;
}
map m_TopCS_ast_node in KiamaRewrite_qvtp_qvtcas
{
guard:leftCS lTopCS : TopCS;
var ast : ecore::EObject := lTopCS.ast;
var node : kiamacs::NodeCS := lTopCS.node;
var aTop : kiamaas::Top := ast.oclAsType(kiamaas::Top);
var ast1 : ecore::EObject := node.ast;
var aNode : kiamaas::Node := ast1.oclAsType(kiamaas::Node);
set aTop.node := aNode;
}
map r_PlusCS_left in KiamaRewrite_qvtp_qvtcas
{
append ji_PlusCS : Set(kiamacs::PlusCS);
append ji_NumCS : Set(kiamacs::NumCS);
in:leftCS _'«parent»' : PlusCS;
var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.left.oclAsSet();
var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS);
var _'«child-NumCS»' : Set(kiamacs::NumCS) := allChildren->selectByKind(kiamacs::NumCS);
add ji_PlusCS += _'«child-PlusCS»';
add ji_NumCS += _'«child-NumCS»';
for aChild : kiamacs::PlusCS in _'«child-PlusCS»' {
call r_PlusCS_left {
_'«parent»' uses aChild;
ji_PlusCS appendsTo ji_PlusCS;
ji_NumCS appendsTo ji_NumCS;
}
}
}
map r_PlusCS_right in KiamaRewrite_qvtp_qvtcas
{
append ji_PlusCS : Set(kiamacs::PlusCS);
append ji_NumCS : Set(kiamacs::NumCS);
in:leftCS _'«parent»' : PlusCS;
var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.right.oclAsSet();
var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS);
var _'«child-NumCS»' : Set(kiamacs::NumCS) := allChildren->selectByKind(kiamacs::NumCS);
add ji_PlusCS += _'«child-PlusCS»';
add ji_NumCS += _'«child-NumCS»';
for aChild : kiamacs::PlusCS in _'«child-PlusCS»' {
call r_PlusCS_right {
_'«parent»' uses aChild;
ji_PlusCS appendsTo ji_PlusCS;
ji_NumCS appendsTo ji_NumCS;
}
}
}
map r_TopCS_node in KiamaRewrite_qvtp_qvtcas
{
append ji_PlusCS : Set(kiamacs::PlusCS);
append ji_PlusCS_3 : Set(kiamacs::PlusCS);
append ji_NumCS : Set(kiamacs::NumCS);
guard:leftCS _'«parent»' : TopCS;
var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.node.oclAsSet();
var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS);
var _'«child-NumCS»' : Set(kiamacs::NumCS) := allChildren->selectByKind(kiamacs::NumCS);
add ji_PlusCS += _'«child-PlusCS»';
add ji_PlusCS_3 += _'«child-PlusCS»';
add ji_NumCS += _'«child-NumCS»';
}
map r__PlusCS in KiamaRewrite_qvtp_qvtcas
{
append ji_PlusCS : Set(kiamacs::PlusCS);
append ji_NumCS : Set(kiamacs::NumCS);
guard:leftCS _'«head»' : PlusCS;
buffer _'«local»' : Set(kiamacs::PlusCS);
buffer _'«new»' : Set(kiamacs::PlusCS);
call r_PlusCS_left {
ji_NumCS appendsTo ji_NumCS;
ji_PlusCS appendsTo _'«local»';
_'«parent»' uses _'«head»';
}
call r_PlusCS_right {
ji_NumCS appendsTo ji_NumCS;
ji_PlusCS appendsTo _'«local»';
_'«parent»' uses _'«head»';
}
add _'«new»' += _'«local»'->excludingAll(ji_PlusCS);
add ji_PlusCS += _'«new»';
for loop0 : kiamacs::PlusCS in _'«new»' {
infinite call r__PlusCS {
ji_NumCS appendsTo ji_NumCS;
ji_PlusCS appendsTo ji_PlusCS;
_'«head»' iterates loop0;
}
}
}