62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
var Errors = {};
|
|
|
|
[
|
|
'ParserException',
|
|
'CompositeParserException',
|
|
'UnexpectedTokenException',
|
|
'UnexpectedEOFException',
|
|
'AstBuilderException',
|
|
'NoSuchLanguageException'
|
|
].forEach(function (name) {
|
|
|
|
function ErrorProto (message) {
|
|
this.message = message || ('Unspecified ' + name);
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, arguments.callee);
|
|
}
|
|
}
|
|
|
|
ErrorProto.prototype = Object.create(Error.prototype);
|
|
ErrorProto.prototype.name = name;
|
|
ErrorProto.prototype.constructor = ErrorProto;
|
|
Errors[name] = ErrorProto;
|
|
});
|
|
|
|
Errors.CompositeParserException.create = function(errors) {
|
|
var message = "Parser errors:\n" + errors.map(function (e) { return e.message; }).join("\n");
|
|
var err = new Errors.CompositeParserException(message);
|
|
err.errors = errors;
|
|
return err;
|
|
};
|
|
|
|
Errors.UnexpectedTokenException.create = function(token, expectedTokenTypes, stateComment) {
|
|
var message = "expected: " + expectedTokenTypes.join(', ') + ", got '" + token.getTokenValue().trim() + "'";
|
|
var location = !token.location.column
|
|
? {line: token.location.line, column: token.line.indent + 1 }
|
|
: token.location;
|
|
return createError(Errors.UnexpectedEOFException, message, location);
|
|
};
|
|
|
|
Errors.UnexpectedEOFException.create = function(token, expectedTokenTypes, stateComment) {
|
|
var message = "unexpected end of file, expected: " + expectedTokenTypes.join(', ');
|
|
return createError(Errors.UnexpectedTokenException, message, token.location);
|
|
};
|
|
|
|
Errors.AstBuilderException.create = function(message, location) {
|
|
return createError(Errors.AstBuilderException, message, location);
|
|
};
|
|
|
|
Errors.NoSuchLanguageException.create = function(language, location) {
|
|
var message = "Language not supported: " + language;
|
|
return createError(Errors.NoSuchLanguageException, message, location);
|
|
};
|
|
|
|
function createError(Ctor, message, location) {
|
|
var fullMessage = "(" + location.line + ":" + location.column + "): " + message;
|
|
var error = new Ctor(fullMessage);
|
|
error.location = location;
|
|
return error;
|
|
}
|
|
|
|
module.exports = Errors;
|