stage4/generate_cc/generate_cc.cc
changeset 46 fc1b78ea6d84
parent 41 8998c8b24b60
child 49 c96d1a4c23f8
equal deleted inserted replaced
45:3b6bf2b5f1df 46:fc1b78ea6d84
  1386     generate_cc_pous_c generate_cc_pous;
  1386     generate_cc_pous_c generate_cc_pous;
  1387 
  1387 
  1388     symbol_c *current_configuration;
  1388     symbol_c *current_configuration;
  1389 
  1389 
  1390     const char *current_name;
  1390     const char *current_name;
       
  1391     const char *current_builddir;
  1391 
  1392 
  1392     unsigned long common_ticktime;
  1393     unsigned long common_ticktime;
  1393 
  1394 
  1394   public:
  1395   public:
  1395     generate_cc_c(stage4out_c *s4o_ptr): 
  1396     generate_cc_c(stage4out_c *s4o_ptr, const char *builddir): 
  1396             s4o(*s4o_ptr),
  1397             s4o(*s4o_ptr),
  1397             pous_s4o("POUS", "c"),
  1398             pous_s4o(builddir, "POUS", "c"),
  1398             located_variables_s4o("LOCATED_VARIABLES","h"),
  1399             located_variables_s4o(builddir, "LOCATED_VARIABLES","h"),
  1399             generate_cc_pous(&pous_s4o) {
  1400             generate_cc_pous(&pous_s4o) {
       
  1401       current_builddir = builddir;
  1400       current_configuration = NULL;
  1402       current_configuration = NULL;
  1401     }
  1403     }
  1402             
  1404             
  1403     ~generate_cc_c(void) {}
  1405     ~generate_cc_c(void) {}
  1404 
  1406 
  1470       calculate_common_ticktime_c calculate_common_ticktime;
  1472       calculate_common_ticktime_c calculate_common_ticktime;
  1471       symbol->accept(calculate_common_ticktime);
  1473       symbol->accept(calculate_common_ticktime);
  1472       common_ticktime = calculate_common_ticktime.get_ticktime();
  1474       common_ticktime = calculate_common_ticktime.get_ticktime();
  1473       
  1475       
  1474       symbol->configuration_name->accept(*this);
  1476       symbol->configuration_name->accept(*this);
  1475       stage4out_c config_s4o(current_name, "c");
  1477       stage4out_c config_s4o(current_builddir, current_name, "c");
  1476       generate_cc_config_c generate_cc_config(&config_s4o);
  1478       generate_cc_config_c generate_cc_config(&config_s4o);
  1477       symbol->accept(generate_cc_config);
  1479       symbol->accept(generate_cc_config);
  1478         
  1480         
  1479       config_s4o.print("int common_ticktime__ = ");
  1481       config_s4o.print("int common_ticktime__ = ");
  1480       config_s4o.print_integer((int)(common_ticktime / 1000000));
  1482       config_s4o.print_integer((int)(common_ticktime / 1000000));
  1487       return NULL;
  1489       return NULL;
  1488     }
  1490     }
  1489 
  1491 
  1490     void *visit(resource_declaration_c *symbol) {
  1492     void *visit(resource_declaration_c *symbol) {
  1491     	symbol->resource_name->accept(*this);
  1493     	symbol->resource_name->accept(*this);
  1492     	stage4out_c resources_s4o(current_name, "c");
  1494     	stage4out_c resources_s4o(current_builddir, current_name, "c");
  1493       generate_cc_resources_c generate_cc_resources(&resources_s4o, current_configuration, symbol, common_ticktime);
  1495       generate_cc_resources_c generate_cc_resources(&resources_s4o, current_configuration, symbol, common_ticktime);
  1494     	symbol->accept(generate_cc_resources);
  1496     	symbol->accept(generate_cc_resources);
  1495     	return NULL;
  1497     	return NULL;
  1496     }
  1498     }
  1497 
  1499 
  1498     void *visit(single_resource_declaration_c *symbol) {
  1500     void *visit(single_resource_declaration_c *symbol) {
  1499     	stage4out_c resources_s4o("RESOURCE", "c");
  1501     	stage4out_c resources_s4o(current_builddir, "RESOURCE", "c");
  1500       generate_cc_resources_c generate_cc_resources(&resources_s4o, current_configuration, symbol, common_ticktime);
  1502       generate_cc_resources_c generate_cc_resources(&resources_s4o, current_configuration, symbol, common_ticktime);
  1501     	symbol->accept(generate_cc_resources);
  1503     	symbol->accept(generate_cc_resources);
  1502     	return NULL;
  1504     	return NULL;
  1503     }
  1505     }
  1504     
  1506     
  1514 /***********************************************************************/
  1516 /***********************************************************************/
  1515 
  1517 
  1516 
  1518 
  1517 
  1519 
  1518 
  1520 
  1519 visitor_c *new_code_generator(stage4out_c *s4o)  {return new generate_cc_c(s4o);}
  1521 visitor_c *new_code_generator(stage4out_c *s4o, const char *builddir)  {return new generate_cc_c(s4o, builddir);}
  1520 void delete_code_generator(visitor_c *code_generator) {delete code_generator;}
  1522 void delete_code_generator(visitor_c *code_generator) {delete code_generator;}
  1521 
  1523 
  1522 
  1524