whalesong/js-assembler/runtime-src/baselib-exceptions.js
2011-07-05 17:49:31 -04:00

119 lines
4.0 KiB
JavaScript

// Exceptions
(function(baselib) {
var exceptions = {};
baselib.exceptions = exceptions;
// Error type exports
var InternalError = function(val, contMarks) {
this.val = val;
this.contMarks = (contMarks ? contMarks : false);
}
var SchemeError = function(val) {
this.val = val;
}
var IncompleteExn = function(constructor, msg, otherArgs) {
this.constructor = constructor;
this.msg = msg;
this.otherArgs = otherArgs;
};
// (define-struct exn (message continuation-mark-set))
var Exn = plt.baselib.structs.makeStructureType(
'exn', false, 2, 0, false, false);
// (define-struct (exn:break exn) (continuation))
var ExnBreak = plt.baselib.structs.makeStructureType(
'exn:break', Exn, 1, 0, false, false);
var ExnFail = plt.baselib.structs.makeStructureType(
'exn:fail', Exn, 0, 0, false, false);
var ExnFailContract = plt.baselib.structs.makeStructureType(
'exn:fail:contract', ExnFail, 0, 0, false, false);
var ExnFailContractArity = plt.baselib.structs.makeStructureType(
'exn:fail:contract:arity', ExnFailContract, 0, 0, false, false);
var ExnFailContractVariable = plt.baselib.structs.makeStructureType(
'exn:fail:contract:variable', ExnFailContract, 1, 0, false, false);
var ExnFailContractDivisionByZero = plt.baselib.structs.makeStructureType(
'exn:fail:contract:divide-by-zero', ExnFailContract, 0, 0, false, false);
var exceptionHandlerKey = new plt.baselib.symbols.Symbol("exnh");
//////////////////////////////////////////////////////////////////////
// Exports
exceptions.InternalError = InternalError;
exceptions.internalError = function(v, contMarks) { return new InternalError(v, contMarks); };
exceptions.isInternalError = function(x) { return x instanceof InternalError; };
exceptions.SchemeError = SchemeError;
exceptions.schemeError = function(v) { return new SchemeError(v); };
exceptions.isSchemeError = function(v) { return v instanceof SchemeError; };
exceptions.IncompleteExn = IncompleteExn;
exceptions.incompleteExn = function(constructor, msg, args) { return new IncompleteExn(constructor, msg, args); };
exceptions.isIncompleteExn = function(x) { return x instanceof IncompleteExn; };
exceptions.Exn = Exn;
exceptions.exn = Exn.constructor;
exceptions.isExn = Exn.predicate;
exceptions.exnMessage = function(exn) { return Exn.accessor(exn, 0); };
exceptions.exnContMarks = function(exn) { return Exn.accessor(exn, 1); };
exceptions.exnSetContMarks = function(exn, v) { Exn.mutator(exn, 1, v); };
exceptions.ExnBreak = ExnBreak;
exceptions.exnBreak = ExnBreak.constructor;
exceptions.isExnBreak = ExnBreak.predicate;
exceptions.exnBreakContinuation =
function(exn) { return ExnBreak.accessor(exn, 0); };
exceptions.ExnFail = ExnFail;
exceptions.exnFail = ExnFail.constructor;
exceptions.isExnFail = ExnFail.predicate;
exceptions.ExnFailContract = ExnFailContract;
exceptions.exnFailContract = ExnFailContract.constructor;
exceptions.isExnFailContract = ExnFailContract.predicate;
exceptions.ExnFailContractArity = ExnFailContractArity;
exceptions.exnFailContractArity = ExnFailContractArity.constructor;
exceptions.isExnFailContractArity = ExnFailContractArity.predicate;
exceptions.ExnFailContractVariable = ExnFailContractVariable;
exceptions.exnFailContractVariable = ExnFailContractVariable.constructor;
exceptions.isExnFailContractVariable = ExnFailContractVariable.predicate;
exceptions.exnFailContractVariableId =
function(exn) { return ExnFailContractVariable.accessor(exn, 0); };
exceptions.ExnFailContractDivisionByZero = ExnFailContractDivisionByZero;
exceptions.exnFailContractDivisionByZero = ExnFailContractDivisionByZero.constructor;
exceptions.isExnFailContractDivisionByZero = ExnFailContractDivisionByZero.predicate;
exceptions.exceptionHandlerKey = exceptionHandlerKey;
})(this['plt'].baselib);