ParamConditionSwitch.xtend 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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();
  26. gVar.type = doSwitchRes.type;
  27. gVar.name = object.name;
  28. // TODO: Does this hold?
  29. gVar.value = doSwitchRes.value;
  30. this.gVars.put(gVar.name, gVar);
  31. val retInfo = new ReturnInformation();
  32. retInfo.code =
  33. '''
  34. this->«gVar.name» = «doSwitchRes.code»;
  35. '''
  36. return retInfo;
  37. }
  38. }