# HG changeset patch # User Laurent Bessard # Date 1346774526 -7200 # Node ID e7caa7d32ef5bdfcf30b0298d4fe525e1a201d83 # Parent 9f2cefb98e60448321b820746a22a4d567a654e8 Adding support for P0 and P1 qualifiers and fixing code generated for SL qualifier diff -r 9f2cefb98e60 -r e7caa7d32ef5 stage1_2/iec_bison.yy --- a/stage1_2/iec_bison.yy Sat Sep 01 16:27:24 2012 +0200 +++ b/stage1_2/iec_bison.yy Tue Sep 04 18:02:06 2012 +0200 @@ -1020,6 +1020,8 @@ %token N %token P +%token P0 +%token P1 /* NOTE: the following two clash with the R and S IL operators. * It will have to be handled when we include parsing of SFC... */ @@ -5255,6 +5257,8 @@ | R {$$ = new qualifier_c(strdup("R"), locloc(@$));} | S {$$ = new qualifier_c(strdup("S"), locloc(@$));} | P {$$ = new qualifier_c(strdup("P"), locloc(@$));} +| P0 {$$ = new qualifier_c(strdup("P0"), locloc(@$));} +| P1 {$$ = new qualifier_c(strdup("P1"), locloc(@$));} ; timed_qualifier: diff -r 9f2cefb98e60 -r e7caa7d32ef5 stage1_2/iec_flex.ll --- a/stage1_2/iec_flex.ll Sat Sep 01 16:27:24 2012 +0200 +++ b/stage1_2/iec_flex.ll Tue Sep 04 18:02:06 2012 +0200 @@ -1387,6 +1387,8 @@ SL return SL; N return N; P return P; +P0 return P0; +P1 return P1; R return R; S return S; } diff -r 9f2cefb98e60 -r e7caa7d32ef5 stage4/generate_c/generate_c_sfc.cc --- a/stage4/generate_c/generate_c_sfc.cc Sat Sep 01 16:27:24 2012 +0200 +++ b/stage4/generate_c/generate_c_sfc.cc Tue Sep 04 18:02:06 2012 +0200 @@ -519,11 +519,15 @@ strcmp(qualifier, "R") == 0) { s4o.print("active"); } - if (strcmp(qualifier, "P") == 0 || strcmp(qualifier, "SD") == 0 || - strcmp(qualifier, "DS") == 0 || strcmp(qualifier, "SL") == 0) { + else if (strcmp(qualifier, "P") == 0 || strcmp(qualifier, "SD") == 0 || + strcmp(qualifier, "DS") == 0 || strcmp(qualifier, "SL") == 0 || + strcmp(qualifier, "P0") == 0) { s4o.print("activated"); } - if (strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0) { + else if (strcmp(qualifier, "P1") == 0) { + s4o.print("desactivated"); + } + else if (strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0) { s4o.print("active && __time_cmp("); print_step_argument(current_step, "elapsed_time"); s4o.print(", "); @@ -539,11 +543,12 @@ s4o.indent_right(); s4o.print(s4o.indent_spaces); if (strcmp(qualifier, "N") == 0 || strcmp(qualifier, "P") == 0 || - strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0) { + strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0 || + strcmp(qualifier, "P0") == 0 || strcmp(qualifier, "P1") == 0) { print_action_argument(current_action, "state"); s4o.print(" = 1;\n"); } - if (strcmp(qualifier, "S") == 0) { + if (strcmp(qualifier, "S") == 0 || strcmp(qualifier, "SL") == 0) { print_action_argument(current_action, "set"); s4o.print(" = 1;\n"); }