⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 try.js.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
字号:
// Copyright 2008 the V8 project authors. All rights reserved.// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:////     * Redistributions of source code must retain the above copyright//       notice, this list of conditions and the following disclaimer.//     * Redistributions in binary form must reproduce the above//       copyright notice, this list of conditions and the following//       disclaimer in the documentation and/or other materials provided//       with the distribution.//     * Neither the name of Google Inc. nor the names of its//       contributors may be used to endorse or promote products derived//       from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.// Flags: --expose-gcfunction Catch(f, g) {  var r;  try { r = f(); } catch (o) { return g(o); }  return r;}function CatchReturn(f, g) {  try { return f(); } catch (o) { return g(o); }}var a = [Catch, CatchReturn]for (var n in a) {  var c = a[n];  assertEquals(1, c(function() { return 1; }));  assertEquals('bar', c(function() { return 'bar'; }));  assertEquals(1, c(function () { throw 1; }, function (x) { return x; }));  assertEquals('bar', c(function () { throw 'bar'; }, function (x) { return x; }));}assertEquals(1, (function() { try { return 1; } finally { } })());assertEquals(1, (function() { try { return 1; } finally { var x = 12; } })());assertEquals(2, (function() { try { } finally { return 2; } })());assertEquals(4, (function() { try { return 3; } finally { return 4; } })());function f(x, n, v) { try { return x; } finally { x[n] = v; } }assertEquals(2, f({}, 'foo', 2).foo);assertEquals(5, f({}, 'bar', 5).bar);function guard(f) { try { f(); } catch (o) { return o; } }assertEquals('baz', guard(function() { throw 'baz'; }));assertEquals(2, (function() { try { throw {}; } catch(e) {} finally { return 2; } })());assertEquals(1, guard(function() { try { throw 1; } finally { } }));assertEquals(2, guard(function() { try { throw 2; } finally { var x = 12; } }));assertEquals(4, guard(function() { try { throw 3; } finally { throw 4; } }));(function () {  var iter = 10000000;  for (var i = 1; i <= iter; i++) {    try {      if (i == iter) gc();    } finally {      if (i == iter) gc();    }  }})();function trycatch(a) {  var o;  try {    throw 1;  } catch (o) {    a.push(o);    try {      throw 2;    } catch (o) {      a.push(o);    }    a.push(o);  }  a.push(o);}var a = [];trycatch(a);assertEquals(4, a.length);assertEquals(1, a[0], "a[0]");assertEquals(2, a[1], "a[1]");assertEquals(1, a[2], "a[2]");assertTrue(typeof a[3] === 'undefined', "a[3]");assertTrue(typeof o === 'undefined', "global.o");function return_from_nested_catch(x) {  try {    try {      return x;    } catch (o) {      return -1;    }  } catch (o) {    return -2;  }}assertEquals(0, return_from_nested_catch(0));assertEquals(1, return_from_nested_catch(1));function return_from_nested_finally(x) {  var a = [x-2];  try {    try {      return a;    } finally {      a[0]++;    }  } finally {    a[0]++;  }}assertEquals(0, return_from_nested_finally(0)[0]);assertEquals(1, return_from_nested_finally(1)[0]);function break_from_catch(x) {  x--; L:  {    try {      x++;      if (false) return -1;      break L;    } catch (o) {      x--;    }  }  return x;}assertEquals(0, break_from_catch(0));assertEquals(1, break_from_catch(1));function break_from_finally(x) { L:  {    try {      x++;      if (false) return -1;      break L;    } finally {      x--;    }    x--;  }  return x;}assertEquals(0, break_from_finally(0), "break from finally");assertEquals(1, break_from_finally(1), "break from finally");function continue_from_catch(x) {  x--;  var cont = true;  while (cont) {    try {      x++;      if (false) return -1;      cont = false;      continue;    } catch (o) {      x--;    }  }  return x;}assertEquals(0, continue_from_catch(0));assertEquals(1, continue_from_catch(1));function continue_from_finally(x) {  var cont = true;  while (cont) {    try {      x++;      if (false) return -1;      cont = false;      continue;    } finally {      x--;    }    x--;  }  return x;}assertEquals(0, continue_from_finally(0));assertEquals(1, continue_from_finally(1));function continue_alot_from_finally(x) {  var j = 0;  for (var i = 0; i < x;) {    try {      j++;      continue;      j++;  // should not happen    } finally {      i++; // must happen    }    j++; // should not happen  }  return j;}assertEquals(100, continue_alot_from_finally(100));assertEquals(200, continue_alot_from_finally(200));function break_from_nested_catch(x) {  x -= 2; L:  {    try {      x++;      try {        x++;        if (false) return -1;        break L;      } catch (o) {        x--;      }    } catch (o) {      x--;    }  }   return x;}assertEquals(0, break_from_nested_catch(0));assertEquals(1, break_from_nested_catch(1));function break_from_nested_finally(x) { L:  {    try {      x++;      try {        x++;        if (false) return -1;        break L;      } finally {        x--;      }    } finally {      x--;    }    x--; // should not happen  }   return x;}assertEquals(0, break_from_nested_finally(0));assertEquals(1, break_from_nested_finally(1));function continue_from_nested_catch(x) {  x -= 2;  var cont = true;  while (cont) {    try {      x++;      try {        x++;        if (false) return -1;        cont = false;        continue;      } catch (o) {        x--;      }    } catch (o) {      x--;    }  }  return x;}assertEquals(0, continue_from_nested_catch(0));assertEquals(1, continue_from_nested_catch(1));function continue_from_nested_finally(x) {  var cont = true;  while (cont) {    try {      x++;      try {        x++;        if (false) return -1;        cont = false;        continue;      } finally {        x--;      }    } finally {      x--;    }    x--;  // should not happen  }  return x;}assertEquals(0, continue_from_nested_finally(0));assertEquals(1, continue_from_nested_finally(1));var caught = false;var finalized = false;var broke = true;L: try {  break L;  broke = false;} catch (o) {  caught = true;} finally {  finalized = true;}assertTrue(broke);assertFalse(caught);assertTrue(finalized);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -