1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const brsTypes_1 = require("./brsTypes");
|
4 | class BrsError extends Error {
|
5 | constructor(message, location) {
|
6 | super(message);
|
7 | this.location = location;
|
8 | }
|
9 | /**
|
10 | * Formats the error into a human-readable string including filename, starting and ending line
|
11 | * and column, and the message associated with the error, e.g.:
|
12 | *
|
13 | * `lorem.brs(1,1-3): Expected '(' after sub name`
|
14 | * ```
|
15 | */
|
16 | format() {
|
17 | let location = this.location;
|
18 | let formattedLocation;
|
19 | if (location.start.line === location.end.line) {
|
20 | let columns = `${location.start.column}`;
|
21 | if (location.start.column !== location.end.column) {
|
22 | columns += `-${location.end.column}`;
|
23 | }
|
24 | formattedLocation = `${location.file}(${location.start.line},${columns})`;
|
25 | }
|
26 | else {
|
27 | formattedLocation = `${location.file}(${location.start.line},${location.start.column},${location.end.line},${location.end.line})`;
|
28 | }
|
29 | return `${formattedLocation}: ${this.message}`;
|
30 | }
|
31 | }
|
32 | exports.BrsError = BrsError;
|
33 | /**
|
34 | * Creates a "type mismatch"-like error message, but with the appropriate types specified.
|
35 | * @return a type mismatch error that will be tracked by this module.
|
36 | */
|
37 | class TypeMismatch extends BrsError {
|
38 | constructor(mismatchMetadata) {
|
39 | let messageLines = [
|
40 | mismatchMetadata.message,
|
41 | ` left: ${brsTypes_1.ValueKind.toString(getKind(mismatchMetadata.left.type))}`,
|
42 | ];
|
43 | let location = mismatchMetadata.left.location;
|
44 | if (mismatchMetadata.right) {
|
45 | messageLines.push(` right: ${brsTypes_1.ValueKind.toString(getKind(mismatchMetadata.right.type))}`);
|
46 | location.end = mismatchMetadata.right.location.end;
|
47 | }
|
48 | super(messageLines.join("\n"), location);
|
49 | }
|
50 | }
|
51 | exports.TypeMismatch = TypeMismatch;
|
52 | /**
|
53 | * Logs a detected BRS error to console.
|
54 | * @param err the error to log to console
|
55 | */
|
56 | function logConsoleError(err) {
|
57 | console.error(err.format());
|
58 | }
|
59 | exports.logConsoleError = logConsoleError;
|
60 | /**
|
61 | * Produces a function that writes errors to the given error stream.
|
62 | * @param errorStream write stream to write errors to.
|
63 | * @returns function that writes to given write stream.
|
64 | */
|
65 | function getLoggerUsing(errorStream) {
|
66 | return err => errorStream.write(err.format());
|
67 | }
|
68 | exports.getLoggerUsing = getLoggerUsing;
|
69 | /**
|
70 | * Returns the `.kind` property of a `BrsType`, otherwise returns the provided `ValueKind`.
|
71 | * @param maybeType the `BrsType` to extract a `.kind` field from, or the `ValueKind` to return directly
|
72 | * @returns the `ValueKind` for `maybeType`
|
73 | */
|
74 | function getKind(maybeType) {
|
75 | if (typeof maybeType === "number") {
|
76 | return maybeType;
|
77 | }
|
78 | else {
|
79 | return maybeType.kind;
|
80 | }
|
81 | }
|
82 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBZ0Q7QUFHaEQsTUFBYSxRQUFTLFNBQVEsS0FBSztJQUMvQixZQUFZLE9BQWUsRUFBVyxRQUFrQjtRQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUV4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTTtRQUNGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFN0IsSUFBSSxpQkFBeUIsQ0FBQztRQUU5QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQzNDLElBQUksT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxPQUFPLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3hDO1lBQ0QsaUJBQWlCLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDO1NBQzdFO2FBQU07WUFDSCxpQkFBaUIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztTQUNySTtRQUVELE9BQU8sR0FBRyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztDQUNKO0FBN0JELDRCQTZCQztBQXNCRDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxRQUFRO0lBQ3RDLFlBQVksZ0JBQXNDO1FBQzlDLElBQUksWUFBWSxHQUFHO1lBQ2YsZ0JBQWdCLENBQUMsT0FBTztZQUN4QixhQUFhLG9CQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtTQUN6RSxDQUFDO1FBQ0YsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUN4QixZQUFZLENBQUMsSUFBSSxDQUNiLGNBQWMsb0JBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQzNFLENBQUM7WUFFRixRQUFRLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1NBQ3REO1FBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBbEJELG9DQWtCQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFhO0lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUZELDBDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxXQUErQjtJQUMxRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsd0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQUMsU0FBOEI7SUFDM0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUM7S0FDcEI7U0FBTTtRQUNILE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztLQUN6QjtBQUNMLENBQUMifQ== |
\ | No newline at end of file |