ParamConditionSwitch.xtend 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package be.uantwerpen.ansymo.semanticadaptation.cg.cpp.generation
  2. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.data.GlobalInOutVariable
  3. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.data.ReturnInformation
  4. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.ParamDeclarations
  5. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SingleParamDeclaration
  6. import java.util.LinkedHashMap
  7. class ParamConditionSwitch extends GeneralConditionSwitch {
  8. var LinkedHashMap<String, GlobalInOutVariable> gVars;
  9. new(LinkedHashMap<String, GlobalInOutVariable> gVars) {
  10. this.gVars = gVars;
  11. }
  12. override ReturnInformation caseParamDeclarations(ParamDeclarations object) {
  13. var retInfo = new ReturnInformation();
  14. for (SingleParamDeclaration declaration : object.declarations) {
  15. var doSwitchRes = doSwitch(declaration);
  16. retInfo.code = retInfo.code +
  17. '''
  18. «doSwitchRes.code»
  19. '''
  20. }
  21. return retInfo;
  22. }
  23. override ReturnInformation caseSingleParamDeclaration(SingleParamDeclaration object) {
  24. val doSwitchRes = doSwitch(object.expr);
  25. var GlobalInOutVariable gVar = new GlobalInOutVariable(object.name, doSwitchRes.type);
  26. this.gVars.put(gVar.name, gVar);
  27. val retInfo = new ReturnInformation();
  28. retInfo.code =
  29. '''
  30. this->«gVar.name» = «doSwitchRes.code»;
  31. '''
  32. return retInfo;
  33. }
  34. }