private int ParseUnicodeEscape() {
int d4 = Tokenizer.ToDigit(Read());
int d3 = Tokenizer.ToDigit(Read());
int d2 = Tokenizer.ToDigit(Read());
int d1 = Tokenizer.ToDigit(Read());
if (d1 >= 16 || d2 >= 16 || d3 >= 16 || d4 >= 16) {
throw MakeError("invalid Unicode escape");
}
int codepoint = (d4 << 12) | (d3 << 8) | (d2 << 4) | d1;
if (codepoint >= 0xd800 && codepoint <= 0xdfff) {
throw MakeError("invalid Unicode range");
}
return codepoint;
}