buntis
Version:
A 100% compliant, self-hosted typescript parser that emits an ESTree-compatible abstract syntax tree
62 lines (53 loc) • 1.57 kB
text/typescript
import { Errors } from '../errors';
export const enum Escape {
Empty = -1,
InvalidCodePoint = -2,
InvalidHex = -3,
UnicodeOverflow = -4,
InvalidSequence = -5,
InvalidUnicode = -6,
MissingCurlyBrace = -7
}
export const enum UnicodeEscape {
Empty = -1,
StrictOctal = -2,
EightOrNine = -3,
InvalidHex = -4,
OutOfRange = -5,
MissingCurlyBrace = -6
}
export function handleIdentifierError(code: Escape): Errors {
switch (code) {
case Escape.InvalidCodePoint:
return Errors.InvalidCodePoint;
case Escape.InvalidHex:
return Errors.InvalidHexEscapeSequence;
case Escape.UnicodeOverflow:
return Errors.UnicodeOverflow;
case Escape.InvalidUnicode:
case Escape.InvalidSequence:
return Errors.InvalidUnicodeEscapeSequence;
case Escape.MissingCurlyBrace:
return Errors.MissingCurlyBrace;
default:
return Errors.Unexpected;
}
}
export function handleEscapeError(code: UnicodeEscape, isTemplate: 0 | 1): Errors {
if (code === UnicodeEscape.StrictOctal) {
return isTemplate ? Errors.TemplateOctalLiteral : Errors.StrictOctalEscape;
}
if (code === UnicodeEscape.EightOrNine) {
return Errors.InvalidEightAndNine;
}
if (code === UnicodeEscape.InvalidHex) {
return Errors.InvalidHexEscapeSequence;
}
if (code === UnicodeEscape.OutOfRange) {
return Errors.UnicodeOverflow;
}
if (code === UnicodeEscape.MissingCurlyBrace) {
return Errors.MissingCurlyBrace;
}
return Errors.Unexpected;
}