breakable.js 762 B

123456789101112131415161718192021222324252627282930313233343536
  1. // breakable.js
  2. // MIT licensed, see LICENSE file
  3. // Copyright (c) 2013-2014 Olov Lassus <olov.lassus@gmail.com>
  4. var breakable = (function() {
  5. "use strict";
  6. function Val(val, brk) {
  7. this.val = val;
  8. this.brk = brk;
  9. }
  10. function make_brk() {
  11. return function brk(val) {
  12. throw new Val(val, brk);
  13. };
  14. }
  15. function breakable(fn) {
  16. var brk = make_brk();
  17. try {
  18. return fn(brk);
  19. } catch (e) {
  20. if (e instanceof Val && e.brk === brk) {
  21. return e.val;
  22. }
  23. throw e;
  24. }
  25. }
  26. return breakable;
  27. })();
  28. if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
  29. module.exports = breakable;
  30. }