Commit bb5b4c4a authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ compatibility fixes for ttcn-3 mapping

+ support for EnumDataType
+ support for inherited members
+ system specification for generated configuration functions to resolve identically named ports across system components
+ support for extended component types
parent 0cecb571
Loading
Loading
Loading
Loading
+52 −2
Original line number Diff line number Diff line
@@ -221,6 +221,29 @@ rule SimpleDT2R
    t.sub = s;
}

//Generative, use mappings instead
rule EnumDT2E 
    transform dt : TDL!EnumDataType
    to e : TTCN!EnumDefNamed {
    guard : not useDataMapping
    
    e.name = dt.TTCNname();
    
    var module = dt.eContainer.equivalent();
    var t = module.createTypeDefBody();    

    t.structured = new TTCN!StructuredTypeDef();
    t.structured.enumDef = e;
    
    e.list = new TTCN!EnumerationList();
    for (v in dt.value) {
        var literal = new TTCN!Enumeration();
        literal.name = v.TTCNname();
        e.list.enums.add(literal);  
    }
}


//Generative, use mappings instead
rule StructuredDT2R 
    transform dt : TDL!StructuredDataType
@@ -236,6 +259,20 @@ rule StructuredDT2R
    t.structured.record = r;
    
    r.body = new TTCN!StructDefBody();  

    //add inherited members
    //TODO: use for all members? what about equivalent()? -> needs special handling
    //TODO: also unions and other constraints need special handling..
    for (m in dt.allMembers().select(e | e.eContainer() != dt)) {
	    var f = new TTCN!StructFieldDef();
	    f.name = m.TTCNname();
	    if (m.isOptional) {
	        f.optional = "optional";
	    }
	    f.type = m.dataType.getTTCNType();
        r.body.defs.add(f);
    }
    
}

//Generative, use mappings instead
@@ -349,6 +386,9 @@ rule TC2FD
    fd.runsOn = new TTCN!RunsOnSpec();
    fd.runsOn.component = mtc.structured.component;
    
    fd.system = new TTCN!SystemSpec();
    fd.system.component = sut.structured.component;
    
    fd.statement = new TTCN!StatementBlock();
    
    var sl = new TTCN!FunctionStatementList();
@@ -405,7 +445,6 @@ rule TC2FD
        if (simulateSUT or 
              (c.endPoint.get(0).component.role = TDL!ComponentInstanceRole#Tester and 
               c.endPoint.get(1).component.role = TDL!ComponentInstanceRole#Tester )) {
            
            var s = new TTCN!FunctionStatement();
            s.configuration = new TTCN!ConfigurationStatements();
            s.configuration.connect = new TTCN!ConnectStatement();
@@ -418,6 +457,11 @@ rule TC2FD
                    c.endPoint.get(1).component.role = TDL!ComponentInstanceRole#SUT )) {
            //skip
        } else {
        //FIXED:confusion between different system interfaces if multiple configurations include the same SUT component.. 
//            var p1 = c.endPoint.get(0).equivalent();
//            var p2 = c.endPoint.get(1).equivalent();
//            ("MAP: "+p1.component.getComponentName()+":"+p1.port.name
//               +"->"+p2.component.getComponentName()+":"+p2.port.name).println();
            var s = new TTCN!FunctionStatement();
            s.configuration = new TTCN!ConfigurationStatements();
            s.configuration.map = new TTCN!MapStatement();
@@ -583,6 +627,11 @@ rule CT2C
    var m = ct.eContainer.equivalent();
    var t = m.createTypeDefBody();
    
    if (ct.extension.isDefined()) {
        c.`extends`.add(ct.extension.extending.equivalent());
        //(ct+"->"+ct.extension.extending.equivalent()).println();
    }

    t.structured = new TTCN!StructuredTypeDef();
    t.structured.component = c;

@@ -731,6 +780,7 @@ rule SimpleDI2TD
    	and not di.isValue() 
    	and di.dataType.name <> "Verdict"
    	and di.dataType.name <> "Boolean"
    	and not di.eContainer.isKindOf(TDL!EnumDataType)

    var md = new TTCN!ModuleDefinition();
    md.def = td;