| "use strict"; |
| module.exports = (function(){ |
| var AssertionError = (function() { |
| function AssertionError(a) { |
| this.constructor$(a); |
| this.message = a; |
| this.name = "AssertionError"; |
| } |
| AssertionError.prototype = new Error(); |
| AssertionError.prototype.constructor = AssertionError; |
| AssertionError.prototype.constructor$ = Error; |
| return AssertionError; |
| })(); |
| |
| function getParams(args) { |
| var params = []; |
| for (var i = 0; i < args.length; ++i) params.push("arg" + i); |
| return params; |
| } |
| |
| function nativeAssert(callName, args, expect) { |
| try { |
| var params = getParams(args); |
| var constructorArgs = params; |
| constructorArgs.push("return " + |
| callName + "("+ params.join(",") + ");"); |
| var fn = Function.apply(null, constructorArgs); |
| return fn.apply(null, args); |
| } catch (e) { |
| if (!(e instanceof SyntaxError)) { |
| throw e; |
| } else { |
| return expect; |
| } |
| } |
| } |
| |
| return function assert(boolExpr, message) { |
| if (boolExpr === true) return; |
| |
| if (typeof boolExpr === "string" && |
| boolExpr.charAt(0) === "%") { |
| var nativeCallName = boolExpr; |
| var $_len = arguments.length;var args = new Array(Math.max($_len - 2, 0)); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];}; |
| if (nativeAssert(nativeCallName, args, message) === message) return; |
| message = (nativeCallName + " !== " + message); |
| } |
| |
| var ret = new AssertionError(message); |
| if (Error.captureStackTrace) { |
| Error.captureStackTrace(ret, assert); |
| } |
| throw ret; |
| }; |
| })(); |