+- case REP(0, INF): /* as x{1,}? */
+ /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
+ INSERT(OCH_, start); /* offset is wrong... */
+ repeat(p, start+1, 1, to);
+@@ -1056,6 +1151,10 @@
+ /* done */
+ break;
+ case REP(1, N): /* as x?x{1,n-1} */
++#if __DARWIN_UNIX03
++ INSERT(OQUEST_, start);
++ ASTERN(O_QUEST, start);
++#else /* !__DARWIN_UNIX03 */
+ /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
+ INSERT(OCH_, start);
+ ASTERN(OOR1, start);
+@@ -1063,6 +1162,7 @@
+ EMIT(OOR2, 0); /* offset very wrong... */
+ AHEAD(THERE()); /* ...so fix it */
+ ASTERN(O_CH, THERETHERE());
++#endif /* __DARWIN_UNIX03 */
+ copy = dupl(p, start+1, finish+1);
+ assert(copy == finish+4);
+ repeat(p, copy, 1, to-1);
+@@ -1099,7 +1199,7 @@