equal
deleted
inserted
replaced
451 s4o.print("\n"); |
451 s4o.print("\n"); |
452 s4o.print(s4o.indent_spaces); |
452 s4o.print(s4o.indent_spaces); |
453 s4o.print(END_LABEL); |
453 s4o.print(END_LABEL); |
454 s4o.print(":\n"); |
454 s4o.print(":\n"); |
455 s4o.indent_right(); |
455 s4o.indent_right(); |
456 |
|
457 /* since every label must be followed by at least one statement, and |
|
458 * only the functions will introduce the return statement after this label, |
|
459 * function blocks written in IL would result in invalid C++ code. |
|
460 * To work around this we introduce the equivalent of a 'nop' operation |
|
461 * to humour the compiler... |
|
462 */ |
|
463 s4o.print(s4o.indent_spaces); |
|
464 s4o.print("/* to humour the compiler, we insert a nop */\n"); |
|
465 s4o.print(s4o.indent_spaces); |
|
466 s4o.print("if (0);\n\n"); |
|
467 } |
456 } |
468 |
457 |
469 |
458 |
470 |
459 |
471 public: |
460 public: |
839 |
828 |
840 /* (C.5) Function code */ |
829 /* (C.5) Function code */ |
841 generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->fblock_name, symbol, FB_FUNCTION_PARAM"->"); |
830 generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->fblock_name, symbol, FB_FUNCTION_PARAM"->"); |
842 symbol->fblock_body->accept(generate_c_code); |
831 symbol->fblock_body->accept(generate_c_code); |
843 print_end_of_block_label(); |
832 print_end_of_block_label(); |
|
833 s4o.print(s4o.indent_spaces + "return;\n"); |
844 s4o.indent_left(); |
834 s4o.indent_left(); |
845 s4o.print(s4o.indent_spaces + "} // "); |
835 s4o.print(s4o.indent_spaces + "} // "); |
846 symbol->fblock_name->accept(*this); |
836 symbol->fblock_name->accept(*this); |
847 s4o.print(FB_FUNCTION_SUFFIX); |
837 s4o.print(FB_FUNCTION_SUFFIX); |
848 s4o.print(s4o.indent_spaces + "() \n\n"); |
838 s4o.print(s4o.indent_spaces + "() \n\n"); |
1000 |
990 |
1001 /* (C.5) Function code */ |
991 /* (C.5) Function code */ |
1002 generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->program_type_name, symbol, FB_FUNCTION_PARAM"->"); |
992 generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->program_type_name, symbol, FB_FUNCTION_PARAM"->"); |
1003 symbol->function_block_body->accept(generate_c_code); |
993 symbol->function_block_body->accept(generate_c_code); |
1004 print_end_of_block_label(); |
994 print_end_of_block_label(); |
|
995 s4o.print(s4o.indent_spaces + "return;\n"); |
1005 s4o.indent_left(); |
996 s4o.indent_left(); |
1006 s4o.print(s4o.indent_spaces + "} // "); |
997 s4o.print(s4o.indent_spaces + "} // "); |
1007 symbol->program_type_name->accept(*this); |
998 symbol->program_type_name->accept(*this); |
1008 s4o.print(FB_FUNCTION_SUFFIX); |
999 s4o.print(FB_FUNCTION_SUFFIX); |
1009 s4o.print(s4o.indent_spaces + "() \n\n"); |
1000 s4o.print(s4o.indent_spaces + "() \n\n"); |