diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js index 6ba576051f6..cf0ffface57 100644 --- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js +++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js @@ -1899,14 +1899,12 @@ define([], function() { if (!condition) dart.throwAssertionError(); }; dart.throw = function(obj) { - if (obj != null && (typeof obj == 'object' || typeof obj == 'function')) { - dart._stack.set(obj, new Error()); - } + dart._stack = new Error(); throw obj; }; dart.getError = function(exception) { - var stack = dart._stack.get(exception); - return stack !== void 0 ? stack : exception; + var stack = dart._stack; + return stack !== null ? stack : exception; }; dart.stackPrint = function(exception) { var error = dart.getError(exception); @@ -2664,7 +2662,7 @@ define([], function() { return false; }); })(); - dart._stack = new WeakMap(); + dart._stack = null; dart._value = Symbol("_value"); dart.constants = new Map(); dart.constantLists = new Map(); diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js index 00228df08a9..503de637685 100644 --- a/pkg/dev_compiler/lib/js/common/dart_sdk.js +++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js @@ -1899,14 +1899,12 @@ if (!condition) dart.throwAssertionError(); }; dart.throw = function(obj) { - if (obj != null && (typeof obj == 'object' || typeof obj == 'function')) { - dart._stack.set(obj, new Error()); - } + dart._stack = new Error(); throw obj; }; dart.getError = function(exception) { - var stack = dart._stack.get(exception); - return stack !== void 0 ? stack : exception; + var stack = dart._stack; + return stack !== null ? stack : exception; }; dart.stackPrint = function(exception) { var error = dart.getError(exception); @@ -2664,7 +2662,7 @@ return false; }); })(); - dart._stack = new WeakMap(); + dart._stack = null; dart._value = Symbol("_value"); dart.constants = new Map(); dart.constantLists = new Map(); diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js index d71474d601c..3a48f4865b4 100644 --- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js +++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js @@ -1897,14 +1897,12 @@ dart.assert = function(condition) { if (!condition) dart.throwAssertionError(); }; dart.throw = function(obj) { - if (obj != null && (typeof obj == 'object' || typeof obj == 'function')) { - dart._stack.set(obj, new Error()); - } + dart._stack = new Error(); throw obj; }; dart.getError = function(exception) { - var stack = dart._stack.get(exception); - return stack !== void 0 ? stack : exception; + var stack = dart._stack; + return stack !== null ? stack : exception; }; dart.stackPrint = function(exception) { var error = dart.getError(exception); @@ -2662,7 +2660,7 @@ dart._ignoreTypeFailure = (() => { return false; }); })(); -dart._stack = new WeakMap(); +dart._stack = null; dart._value = Symbol("_value"); dart.constants = new Map(); dart.constantLists = new Map(); diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js index 34888fddba6..9dd23d8c8e7 100644 --- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js +++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js @@ -1900,14 +1900,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ if (!condition) dart.throwAssertionError(); }; dart.throw = function(obj) { - if (obj != null && (typeof obj == 'object' || typeof obj == 'function')) { - dart._stack.set(obj, new Error()); - } + dart._stack = new Error(); throw obj; }; dart.getError = function(exception) { - var stack = dart._stack.get(exception); - return stack !== void 0 ? stack : exception; + var stack = dart._stack; + return stack !== null ? stack : exception; }; dart.stackPrint = function(exception) { var error = dart.getError(exception); @@ -2665,7 +2663,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ return false; }); })(); - dart._stack = new WeakMap(); + dart._stack = null; dart._value = Symbol("_value"); dart.constants = new Map(); dart.constantLists = new Map(); diff --git a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum index 112e24f8204..1e0af37e67f 100644 Binary files a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum and b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum differ diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart index e622041f0cf..f1c8f8a18b0 100644 --- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart +++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart @@ -1315,7 +1315,7 @@ class CodeGenerator extends GeneralizingAstVisitor jsMethods.add(new JS.Method( _propertyName('constructor'), js.call('function(...args) { return this.new.apply(this, args); }') - as JS.Fun)); + as JS.Fun)); } else if (ctors.isEmpty) { jsMethods.add(_emitImplicitConstructor(node, fields, virtualFields)); } @@ -3968,7 +3968,7 @@ class CodeGenerator extends GeneralizingAstVisitor new JS.Method( access, js.call('function() { return #; }', _visitInitializer(node)) - as JS.Fun, + as JS.Fun, isGetter: true), node, _findAccessor(element, getter: true))); @@ -4528,7 +4528,7 @@ class CodeGenerator extends GeneralizingAstVisitor } result = astFactory.prefixedIdentifier( _bindValue(scope, 'o', ident.prefix, context: context) - as SimpleIdentifier, + as SimpleIdentifier, ident.period, ident.identifier); } else { diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js index af33d476e21..ea909a4b2c2 100644 --- a/pkg/dev_compiler/test/browser/language_tests.js +++ b/pkg/dev_compiler/test/browser/language_tests.js @@ -275,8 +275,6 @@ define(['dart_sdk', 'async_helper', 'expect', 'unittest', 'is', 'require'], 'setter_no_getter_test_01_multi': skip_fail, 'stack_overflow_stacktrace_test': skip_fail, 'stack_overflow_test': skip_fail, - 'stack_trace_test': skip_fail, - 'stacktrace_rethrow_nonerror_test': skip_fail, // mismatch from Karma's file hash 'stacktrace_rethrow_error_test_none_multi': skip_fail, 'stacktrace_rethrow_error_test_withtraceparameter_multi': skip_fail, 'stacktrace_test': skip_fail, @@ -377,7 +375,6 @@ define(['dart_sdk', 'async_helper', 'expect', 'unittest', 'is', 'require'], 'regress_r21715_test': fail, 'throw_half_surrogate_pair_test_02_multi': fail, 'splay_tree_from_iterable_test': firefox_fail, - 'stacktrace_current_test': chrome_fail, 'string_case_test_01_multi': firefox_fail, 'string_fromcharcodes_test': skip_timeout, 'string_operations_with_null_test': fail, diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart index 392abf0b7fd..0e3acaf539e 100644 --- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart +++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart @@ -552,25 +552,20 @@ assert_(condition) => JS( if (!$condition) $throwAssertionError(); })()'''); -final _stack = JS('', 'new WeakMap()'); +var _stack = null; @JSExportName('throw') throw_(obj) => JS( '', '''(() => { - if ($obj != null && (typeof $obj == 'object' || typeof $obj == 'function')) { - // TODO(jmesserly): couldn't we store the most recent stack in a single - // variable? There should only be one active stack trace. That would - // allow it to work for things like strings and numbers. - $_stack.set($obj, new Error()); - } - throw $obj; + $_stack = new Error(); + throw $obj; })()'''); getError(exception) => JS( '', '''(() => { - var stack = $_stack.get($exception); - return stack !== void 0 ? stack : $exception; + var stack = $_stack; + return stack !== null ? stack : $exception; })()'''); // This is a utility function: it is only intended to be called from dev