diff --git a/mach/proto/cg/codegen.c b/mach/proto/cg/codegen.c index b56fc7c7..e763e085 100644 --- a/mach/proto/cg/codegen.c +++ b/mach/proto/cg/codegen.c @@ -656,8 +656,10 @@ if (Debug > 1) fprintf(stderr, "cost after coercions: %u\n", t); break; } } - if (!toplevel) - ply += emrepllen; + if (!toplevel) { + if (ply >= j) ply += emrepllen - j; + else ply = emrepllen; + } break; case DO_COST: DEBUG("COST"); diff --git a/mach/proto/ncg/codegen.c b/mach/proto/ncg/codegen.c index 61abf04a..d73fc04b 100644 --- a/mach/proto/ncg/codegen.c +++ b/mach/proto/ncg/codegen.c @@ -852,8 +852,14 @@ normalfailed: if (stackpad!=tokpatlen) { break; } } - if (!toplevel) - ply += emrepllen; + if (!toplevel) { + if (ply >= j) ply = emrepllen + ply - j; + else ply = emrepllen; +#ifndef NDEBUG + if (Debug > 4) + fprintf(stderr, "ply becomes %d\n", ply); +#endif + } break; } case DO_COST: {