From ee90e4b068b31056db5846290b87666e4dc76652 Mon Sep 17 00:00:00 2001 From: Miran Date: Mon, 8 May 2017 18:39:53 +0200 Subject: [PATCH] Refactoring and code clean up of class dispatcher function --- .../vdm2c/distribution/DistCGenUtil.java | 14 + .../GenerateClassDispatchTrans.java | 284 +++--------------- 2 files changed, 48 insertions(+), 250 deletions(-) diff --git a/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/DistCGenUtil.java b/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/DistCGenUtil.java index 0a26b2ad..45148c5f 100644 --- a/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/DistCGenUtil.java +++ b/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/DistCGenUtil.java @@ -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; + } + } diff --git a/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/transformations/GenerateClassDispatchTrans.java b/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/transformations/GenerateClassDispatchTrans.java index 5ef3e76e..0d08fe8c 100644 --- a/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/transformations/GenerateClassDispatchTrans.java +++ b/core/vdm2c/src/main/java/org/overture/codegen/vdm2c/distribution/transformations/GenerateClassDispatchTrans.java @@ -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 @@ -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"); @@ -65,43 +59,20 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node) LinkedList par = new LinkedList(); // 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(); @@ -126,24 +97,17 @@ public void caseADefaultClassDeclIR(ADefaultClassDeclIR node) // Create the statements LinkedList st = new LinkedList(); - 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 @@ -156,53 +120,35 @@ 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 args = new LinkedList(); - // 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 binList = new LinkedList(); - // - // Set 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 depObj = SystemArchitectureAnalysis.distributionMapStr.get(c); - // - // for(String dobj : depObj){ - // // One if statement pr. deployed object - // - // int idVal = SystemArchitectureAnalysis.systemDeployedObjectsStr.indexOf(dobj) + 1; - // LinkedList 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 args = new LinkedList(); - // 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 s = ((ABlockStmIR) node.getBody()).getStatements(); - - //m.setBody(body); - // cl.getMethods().add(m); - //System.out.println(); - } - - - }