why on Gaia do you not have a Runemas_Incremented_By_One_To_Keep_A_Negative_Sub variable? apart from that, it looks okay... will tango it in later... /c:2022November!^N^M On Tue, Nov 23, 2021 at 8:27 PM adr wrote: > The code assumes runes are 16 bits long, not 21, creating faulting > code parsing classes. I.e. '/[\-]' will not match '-'. > > This is the same fix already in 9front. > > http://adr.freeshell.org/plan9/patches/sam_fix_metachars_on_classes.diff > > --- /sys/src/cmd/sam/regexp.c Tue Apr 23 19:06:01 2013 > +++ regexp.c Tue Nov 23 15:01:18 2021 > @@ -53,8 +53,8 @@ > /* > * Actions and Tokens > * > - * 0x100xx are operators, value == precedence > - * 0x200xx are tokens, i.e. operands for operators > + * 0x2000xx are operators, value == precedence > + * 0x3000xx are tokens, i.e. operands for operators > */ > enum { > OPERATOR = Runemask+1, /* Bitmask of all operators */ > @@ -462,7 +462,8 @@ > exprp++; > return '\n'; > } > - return *exprp++|(Runemax+1); > + /* add a flag so metacharacters aren't interpreted */ > + return *exprp++|(Runemask+1); > } > return *exprp++; > } > @@ -498,11 +499,12 @@ > if((c2 = nextrec()) == ']') > goto Error; > classp[n+0] = Runemax; > - classp[n+1] = c1; > - classp[n+2] = c2; > + /* remove possible flag from nextrec() */ > + classp[n+1] = c1 & Runemask; > + classp[n+2] = c2 & Runemask; > n += 3; > }else > - classp[n++] = c1; > + classp[n++] = c1 & Runemask; > } > classp[n] = 0; > if(nclass == Nclass){ > ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tccbdb20b670003a1-M7b2bbb4acbd0bc7b5c5c7f69 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription