summaryrefslogtreecommitdiff
path: root/sys/src/cmd/acme
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-04-01 06:04:00 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-04-01 06:04:00 +0200
commit50e2c9b4d47c8a14f9b921d716f2cd070a4aabcd (patch)
tree198db8d3fb46ca13745343e9eb1a21842ccbfd80 /sys/src/cmd/acme
parent5b5eb3b4b4a7e10e16dcbe7f287771c7e6e85aa8 (diff)
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.
Diffstat (limited to 'sys/src/cmd/acme')
-rw-r--r--sys/src/cmd/acme/regx.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/src/cmd/acme/regx.c b/sys/src/cmd/acme/regx.c
index af1197f8e..cedf11a81 100644
--- a/sys/src/cmd/acme/regx.c
+++ b/sys/src/cmd/acme/regx.c
@@ -455,7 +455,7 @@ nextrec(void)
exprp++;
return '\n';
}
- return *exprp++|(Runemax+1);
+ return *exprp++|(Runemask+1);
}
return *exprp++;
}
@@ -491,11 +491,11 @@ bldcclass(void)
if((c2 = nextrec()) == ']')
goto Error;
classp[n+0] = Runemax;
- classp[n+1] = c1;
- classp[n+2] = c2;
+ 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){