int classend(int poffset) {
			switch (p.luaByte(poffset++)) {
			case L_ESC:
				if (poffset == p.length()) {
					error("malformed pattern (ends with %)");
				}
				return poffset + 1;

			case '[':
				if (p.luaByte(poffset) == '^')
					poffset++;
				do {
					if (poffset == p.length()) {
						error("malformed pattern (missing ])");
					}
					if (p.luaByte(poffset++) == L_ESC && poffset != p.length())
						poffset++;
				} while (p.luaByte(poffset) != ']');
				return poffset + 1;
			default:
				return poffset;
			}
		}