sam, acme: fix character classes quoting for 21-bit runes

quote handling was broken with 21-bit runes. nextrec()
returned quoted rune as long rune | (Runemax+1) to escape
it.

with 16-bit runes, storing that long into 16-bit Rune
would automatically remove the escaping, but with 21-bit
runes, Rune is uint32 so the escaping would remain. we
now use (Runemask+1) instead, and mask the escaping off
explicitely when storing back to Rune.
This commit is contained in:
cinap_lenrek 2014-04-01 06:04:00 +02:00
parent 5b5eb3b4b4
commit 50e2c9b4d4
2 changed files with 8 additions and 8 deletions

View file

@ -455,7 +455,7 @@ nextrec(void)
exprp++; exprp++;
return '\n'; return '\n';
} }
return *exprp++|(Runemax+1); return *exprp++|(Runemask+1);
} }
return *exprp++; return *exprp++;
} }
@ -491,11 +491,11 @@ bldcclass(void)
if((c2 = nextrec()) == ']') if((c2 = nextrec()) == ']')
goto Error; goto Error;
classp[n+0] = Runemax; classp[n+0] = Runemax;
classp[n+1] = c1; classp[n+1] = c1 & Runemask;
classp[n+2] = c2; classp[n+2] = c2 & Runemask;
n += 3; n += 3;
}else }else
classp[n++] = c1; classp[n++] = c1 & Runemask;
} }
classp[n] = 0; classp[n] = 0;
if(nclass == Nclass){ if(nclass == Nclass){

View file

@ -462,7 +462,7 @@ nextrec(void){
exprp++; exprp++;
return '\n'; return '\n';
} }
return *exprp++|(Runemax+1); return *exprp++|(Runemask+1);
} }
return *exprp++; return *exprp++;
} }
@ -498,11 +498,11 @@ bldcclass(void)
if((c2 = nextrec()) == ']') if((c2 = nextrec()) == ']')
goto Error; goto Error;
classp[n+0] = Runemax; classp[n+0] = Runemax;
classp[n+1] = c1; classp[n+1] = c1 & Runemask;
classp[n+2] = c2; classp[n+2] = c2 & Runemask;
n += 3; n += 3;
}else }else
classp[n++] = c1; classp[n++] = c1 & Runemask;
} }
classp[n] = 0; classp[n] = 0;
if(nclass == Nclass){ if(nclass == Nclass){