Skip to content

Commit

Permalink
Refactoring and code clean up of class dispatcher function
Browse files Browse the repository at this point in the history
  • Loading branch information
miranha committed May 8, 2017
1 parent 0cf20d2 commit ee90e4b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 250 deletions.
Expand Up @@ -45,4 +45,18 @@ public static AIdentifierVarExpIR createIdExpNullTyp(String name)

return id;
}

public static AIdentifierVarExpIR createIdExpTVPTyp(String name)
{
AIdentifierVarExpIR id = new AIdentifierVarExpIR();
id.setIsLambda(false);
id.setIsLocal(true);
id.setName(name);
AExternalTypeIR tyPat = new AExternalTypeIR();
tyPat.setName("TVP");
id.setType(tyPat);

return id;
}

}
Expand Up @@ -26,6 +26,7 @@
import org.overture.codegen.ir.types.AMethodTypeIR;
import org.overture.codegen.ir.types.ANatNumericBasicTypeIR;
import org.overture.codegen.trans.assistants.TransAssistantIR;
import org.overture.codegen.vdm2c.distribution.DistCGenUtil;
import org.overture.codegen.vdm2c.distribution.SystemArchitectureAnalysis;

public class GenerateClassDispatchTrans extends DepthFirstAnalysisCAdaptor
Expand All @@ -41,19 +42,12 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node)
{
ADefaultClassDeclIR cl = node;

// System.out.println("Dist transformation, method name: " + node.getName());

if(node.getTag()!=null){

String cpu = cl.getTag().toString();


for(String clName : SystemArchitectureAnalysis.systemClasses){

// Create a new method:

if (node.getTag() != null)
{
for (String clName : SystemArchitectureAnalysis.systemClasses)
{
// Create a new method:
AMethodDeclIR m = new AMethodDeclIR();

m.setAsync(false);
m.setAbstract(false);
m.setAccess("public");
Expand All @@ -65,43 +59,20 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node)
LinkedList<AFormalParamLocalParamIR> par = new LinkedList<AFormalParamLocalParamIR>();

// First parameter
AFormalParamLocalParamIR par1 = new AFormalParamLocalParamIR();
AIdentifierPatternIR idPat1 = new AIdentifierPatternIR();
idPat1.setName("obj");
par1.setPattern(idPat1);
AExternalTypeIR tyPat = new AExternalTypeIR();
tyPat.setName("TVP");
par1.setType(tyPat);
AFormalParamLocalParamIR par1 = DistCGenUtil.addMethodParameter("obj", "TVP");
par.add(par1);

AExternalTypeIR tyInt = new AExternalTypeIR();
tyInt.setName("int");

// Second parameter
AFormalParamLocalParamIR par2 = new AFormalParamLocalParamIR();
AIdentifierPatternIR idPat2 = new AIdentifierPatternIR();
idPat2.setName("funID");
par2.setPattern(idPat2);
par2.setType(tyInt.clone());
AFormalParamLocalParamIR par2 = DistCGenUtil.addMethodParameter("funID", "int");
par.add(par2);

// Third parameter
AFormalParamLocalParamIR par4 = new AFormalParamLocalParamIR();
AIdentifierPatternIR idPat4 = new AIdentifierPatternIR();
idPat4.setName("nrArgs");
par4.setPattern(idPat4);
par4.setType(tyInt.clone());
par.add(par4);
AFormalParamLocalParamIR par3 = DistCGenUtil.addMethodParameter("nrArgs", "int");
par.add(par3);

// Fourth parameter
AFormalParamLocalParamIR par3 = new AFormalParamLocalParamIR();
AIdentifierPatternIR idPat3 = new AIdentifierPatternIR();
idPat3.setName("args []");
par3.setPattern(idPat3);
AExternalTypeIR tyVar = new AExternalTypeIR();
tyVar.setName("TVP");
par3.setType(tyVar);
par.add(par3);
AFormalParamLocalParamIR par4 = DistCGenUtil.addMethodParameter("args []", "TVP");
par.add(par4);

// The method return type
AExternalTypeIR tyRet = new AExternalTypeIR();
Expand All @@ -126,24 +97,17 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node)
// Create the statements
LinkedList<SStmIR> st = new LinkedList<SStmIR>();

int maxArgs = 4;

int i;
for(i=0; i<4; i++){

// create the if statements
for (i = 0; i < 4; i++)
{
// Create the if statements
AIfStmIR first = new AIfStmIR();

// //**** Exp part
// Exp part
AEqualsBinaryExpIR bin = new AEqualsBinaryExpIR();

// Left side , Always the same
AIdentifierVarExpIR id = new AIdentifierVarExpIR();
id.setIsLambda(false);
id.setIsLocal(true);
id.setName("nrArgs");
id.setType(new AIntNumericBasicTypeIR());

AIdentifierVarExpIR id = DistCGenUtil.createIdExpIntTyp("nrArgs");
bin.setLeft(id);

// Right side: Add id to if for this specific bus
Expand All @@ -156,236 +120,56 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node)

first.setIfExp(bin);

//**** Then part, e.g. call the specific BUS
// Then part, e.g. call the specific BUS
AReturnStmIR ret = new AReturnStmIR();
AApplyExpIR app = new AApplyExpIR();
// Set args

LinkedList<SExpIR> args = new LinkedList<SExpIR>();
// AIntLiteralExpIR v = new AIntLiteralExpIR();
//// v.setValue((long) 6);

// 1. argument: Global variable name
AIdentifierVarExpIR arg0 = new AIdentifierVarExpIR();
arg0.setIsLambda(false);
arg0.setIsLocal(true);
arg0.setName(clName);
arg0.setType(tyPat.clone());
args.add(arg0);
args.add(arg0.clone());

AIdentifierVarExpIR arg1 = new AIdentifierVarExpIR();
arg1.setIsLambda(false);
arg1.setIsLocal(true);
arg1.setName("obj");
arg1.setType(tyPat.clone());
AIdentifierVarExpIR arg1 = DistCGenUtil.createIdExpTVPTyp(clName);
args.add(arg1);
args.add(arg1.clone());

// 2. argument: function id
AIdentifierVarExpIR arg2 = new AIdentifierVarExpIR();
arg2.setIsLambda(false);
arg2.setIsLocal(true);
arg2.setName("funID");
arg2.setType(new AIntNumericBasicTypeIR());
AIdentifierVarExpIR arg2 = DistCGenUtil.createIdExpTVPTyp("obj");
args.add(arg2);

// 4. argument: Array of arguments
// 2. argument: function id
AIdentifierVarExpIR arg3 = DistCGenUtil.createIdExpIntTyp("funID");
args.add(arg3);

int b=0;
for(b=0; b<i; b++){
AIdentifierVarExpIR arg4 = new AIdentifierVarExpIR();
arg4.setIsLambda(false);
arg4.setIsLocal(true);
arg4.setName("args[" + b + "]");
arg4.setType(new AIntNumericBasicTypeIR());
// 4. argument: Array of arguments
int b = 0;
for (b = 0; b < i; b++)
{
AIdentifierVarExpIR arg4 = DistCGenUtil.createIdExpIntTyp("args["
+ b + "]");
args.add(arg4);
}
//args.add(id);
// args.add(id);
app.setArgs(args);


// Type
app.setType(new AIntNumericBasicTypeIR());

// Root
AIdentifierVarExpIR idVar = new AIdentifierVarExpIR();
idVar.setIsLambda(false);
idVar.setIsLocal(false);

// get id of current object:
// String name = "Zone";
//
idVar.setName("CALL_FUNC");
// // set method type

// set method type
idVar.setType(mTy.clone());
app.setRoot(idVar);
ret.setExp(app);
//
first.setThenStm(ret);
//
//first.setIfExp(orBin);
//
st.add(first);
//st.add(first.clone());
}
body.setStatements(st);
m.setBody(body);

cl.getMethods().add(m);
}





/** One if statement pr. bus for a cpu ***/

// for(String bus : SystemArchitectureAnalysis.connectionMapStr.keySet()){
//
// // 1. statement
// // AIfStmIR first = new AIfStmIR();
//
// //**** Exp part
// //AEqualsBinaryExpIR bin = new AEqualsBinaryExpIR();
//
// // Left side , Always the same
// AIdentifierVarExpIR id = new AIdentifierVarExpIR();
// id.setIsLambda(false);
// id.setIsLocal(true);
// id.setName("objID");
// id.setType(new AIntNumericBasicTypeIR());
//
//
// LinkedList<AEqualsBinaryExpIR> binList = new LinkedList<AEqualsBinaryExpIR>();
//
// Set<String> cpuList = SystemArchitectureAnalysis.connectionMapStr.get(bus);
//
// int obj_id = 0;
//
// if(cpuList.contains(cpu)){
// for(String c : cpuList){
// if(c.equals(cpu)){
//
// // get deployed objects of the current CPU
// Set<String> depObj = SystemArchitectureAnalysis.distributionMapStr.get(c);
//
// for(String dobj : depObj){
// // One if statement pr. deployed object
//
// int idVal = SystemArchitectureAnalysis.systemDeployedObjectsStr.indexOf(dobj) + 1;
// LinkedList<AFieldDeclIR> va = SystemArchitectureAnalysis.systemDeployedObjects;
// obj_id = idVal - 1; // stor current object id
// AFieldDeclIR o = va.get(obj_id);
//
// AIfStmIR first = new AIfStmIR();
//
// AEqualsBinaryExpIR binEq = new AEqualsBinaryExpIR();
// // Left side: id
// AIdentifierVarExpIR idObj = new AIdentifierVarExpIR();
// idObj.setIsLambda(false);
// idObj.setIsLocal(true);
// idObj.setName("objID");
// idObj.setType(new AIntNumericBasicTypeIR());
//
// binEq.setLeft(idObj);
// // Right side: Add id to if for this specific bus
// // Add 1 since we start from 1 and not 0
//
// AIntLiteralExpIR val = new AIntLiteralExpIR();
// val.setType(new ANatNumericBasicTypeIR());
// val.setValue((long) idVal);
// binEq.setRight(val);
//
// first.setIfExp(binEq);
//
// //binList.add(binEq);
//
//
//
//
// //**** Then part, e.g. call the specific BUS
// AReturnStmIR ret = new AReturnStmIR();
// AApplyExpIR app = new AApplyExpIR();
// // Set args
// LinkedList<SExpIR> args = new LinkedList<SExpIR>();
// AIntLiteralExpIR v = new AIntLiteralExpIR();
// v.setValue((long) 6);
//
// // 1. argument: Global variable name
// AIdentifierVarExpIR arg1 = new AIdentifierVarExpIR();
// arg1.setIsLambda(false);
// arg1.setIsLocal(true);
// arg1.setName("g_" + SystemArchitectureAnalysis.systemName + "_" + o.getName());
// arg1.setType(new AIntNumericBasicTypeIR());
// args.add(arg1);
//
// // 2. argument: function id
// AIdentifierVarExpIR arg2 = new AIdentifierVarExpIR();
// arg2.setIsLambda(false);
// arg2.setIsLocal(true);
// arg2.setName("funID");
// arg2.setType(new AIntNumericBasicTypeIR());
// args.add(arg2);
//
// // 3. argument: number of arguments
// AIdentifierVarExpIR arg3 = new AIdentifierVarExpIR();
// arg3.setIsLambda(false);
// arg3.setIsLocal(true);
// arg3.setName("nrArgs");
// arg3.setType(new AIntNumericBasicTypeIR());
// args.add(arg3);
//
// // 4. argument: Array of arguments
// AIdentifierVarExpIR arg4 = new AIdentifierVarExpIR();
// arg4.setIsLambda(false);
// arg4.setIsLocal(true);
// arg4.setName("args");
// arg4.setType(new AIntNumericBasicTypeIR());
// args.add(arg4);
//
// //args.add(id);
// app.setArgs(args);
//
//
// // Type
// app.setType(new AIntNumericBasicTypeIR());
//
// // Root
// AIdentifierVarExpIR idVar = new AIdentifierVarExpIR();
// idVar.setIsLambda(false);
// idVar.setIsLocal(false);
//
// // get id of current object:
// String name = "Zone";
//
// idVar.setName("dist" + o.getType().toString());
// // set method type
// idVar.setType(mTy.clone());
// app.setRoot(idVar);
// ret.setExp(app);
//
// first.setThenStm(ret);
//
// //first.setIfExp(orBin);
//
// st.add(first);
// //st.add(first.clone());
//
// }
// }
// }
// }
//
// body.setStatements(st);

}
//LinkedList<SStmIR> s = ((ABlockStmIR) node.getBody()).getStatements();

//m.setBody(body);
// cl.getMethods().add(m);
//System.out.println();

}



}

0 comments on commit ee90e4b

Please sign in to comment.