From a0a69777be19b88e5c2d340b63e498f1e07ae6b5 Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Thu, 6 Nov 2025 06:50:09 -0800 Subject: [PATCH 1/4] Add additional definitions to JSSymbol --- CHANGELOG.md | 6 ++ sdk/lib/js_interop/js_interop.dart | 136 ++++++++++++++++++++++++++++- 2 files changed, 141 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18aa96fa1427..33c7824a4bd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ but `false` on Windows. Use `FileSystemEntity.typeSync()` instead to get portable behavior. +#### `dart:js_interop` + +- Added a constructor to `JSSymbol`, as well as `JSSymbol.key`, + `JSSymbol.description`, and static methods for all well-known ECMAScript + symbols. + #### `dart:js_util` - dart2wasm no longer supports `dart:js_util`. Any code that imports diff --git a/sdk/lib/js_interop/js_interop.dart b/sdk/lib/js_interop/js_interop.dart index 9b99d004c51e..6ae31771cfe3 100644 --- a/sdk/lib/js_interop/js_interop.dart +++ b/sdk/lib/js_interop/js_interop.dart @@ -529,8 +529,142 @@ extension type JSBoolean._(JSBooleanRepType _jsBoolean) implements JSAny {} /// A JavaScript string. extension type JSString._(JSStringRepType _jsString) implements JSAny {} +@JS('Symbol') +external JSSymbol _constructSymbol([String? description]); + /// A JavaScript `Symbol`. -extension type JSSymbol._(JSSymbolRepType _jsSymbol) implements JSAny {} +@JS('Symbol') +extension type JSSymbol._(JSSymbolRepType _jsSymbol) implements JSAny { + // TODO(srujzs): See if this can be made `const` so it can be used in similar + // situations to a Dart symbol literal. + /// Creates a new, unique JavaScript `Symbol`. + /// + /// If [description] is provided, it's used for debugging but not to access + /// the symbol itself. + @Since('3.11') + JSSymbol([String? description]) + : _jsSymbol = + (description == null + ? _constructSymbol() + : _constructSymbol(description)) + ._jsSymbol; + + /// Searches for an existing symbol in a runtime-wide symbol registry with the + /// given key and returns it if found. + /// + /// Otherwise, creates a new symbol with this key, adds it to the global + /// registry, and returns it. + @Since('3.11') + @JS('for') + external static JSSymbol forKey(String key); + + /// `Symbol.asyncDispose` from the ECMAScript [explicit resource management] + /// feature. + /// + /// [explicit resource management]: https://github.com/tc39/proposal-explicit-resource-management + @Since('3.11') + external static JSSymbol get asyncDispose; + + /// See [`Symbol.asyncIterator`]. + /// + /// [`Symbol.asyncIterator`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator + @Since('3.11') + external static JSSymbol get asyncIterator; + + /// `Symbol.dispose` from the ECMAScript [explicit resource management] + /// feature. + /// + /// [explicit resource management]: https://github.com/tc39/proposal-explicit-resource-management + @Since('3.11') + external static JSSymbol get dispose; + + /// See [`Symbol.hasInstance`]. + /// + /// [`Symbol.hasInstance`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance + @Since('3.11') + external static JSSymbol get hasInstance; + + /// See [`Symbol.isConcatSpreadable`]. + /// + /// [`Symbol.isConcatSpreadable`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable + @Since('3.11') + external static JSSymbol get isConcatSpreadable; + + /// See [`Symbol.iterator`]. + /// + /// [`Symbol.iterator`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator + @Since('3.11') + external static JSSymbol get iterator; + + /// See [`Symbol.match`]. + /// + /// [`Symbol.match`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match + @Since('3.11') + external static JSSymbol get match; + + /// See [`Symbol.matchAll`]. + /// + /// [`Symbol.matchAll`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/matchAll + @Since('3.11') + external static JSSymbol get matchAll; + + /// See [`Symbol.replace`]. + /// + /// [`Symbol.replace`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace + @Since('3.11') + external static JSSymbol get replace; + + /// See [`Symbol.search`]. + /// + /// [`Symbol.search`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search + @Since('3.11') + external static JSSymbol get search; + + /// See [`Symbol.species`]. + /// + /// [`Symbol.species`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species + @Since('3.11') + external static JSSymbol get species; + + /// See [`Symbol.split`]. + /// + /// [`Symbol.split`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split + @Since('3.11') + external static JSSymbol get split; + + /// See [`Symbol.toPrimitive`]. + /// + /// [`Symbol.toPrimitive`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive + @Since('3.11') + external static JSSymbol get toPrimitive; + + /// See [`Symbol.toStringTag`]. + /// + /// [`Symbol.toStringTag`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag + @Since('3.11') + external static JSSymbol get toStringTag; + + /// See [`Symbol.unscopables`]. + /// + /// [`Symbol.unscopables`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables + @Since('3.11') + external static JSSymbol get unscopables; + + @Since('3.11') + @JS('keyFor') + external static String? _keyFor(JSSymbol symbol); + + /// Returns the shared symbol key from the global symbol registry for this + /// symbol (as registered with [forKey]), if this symbol was created with + /// [Symbol.forKey]. + @Since('3.11') + String? get key => _keyFor(this); + + /// A string containing the description of the symbol, as passed to [new + /// Symbol]. + @Since('3.11') + external String get description; +} /// A JavaScript `BigInt`. extension type JSBigInt._(JSBigIntRepType _jsBigInt) implements JSAny {} From 24836464ea4f5b9fee4826793bc1cc9e53e8d31b Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Wed, 10 Dec 2025 15:55:04 -0800 Subject: [PATCH 2/4] Add additional tests for JSSymbol --- .../js/static_interop_test/js_types_test.dart | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tests/lib/js/static_interop_test/js_types_test.dart b/tests/lib/js/static_interop_test/js_types_test.dart index 64700c7d8da7..92fb3e62daae 100644 --- a/tests/lib/js/static_interop_test/js_types_test.dart +++ b/tests/lib/js/static_interop_test/js_types_test.dart @@ -128,9 +128,6 @@ external JSString str; @JS() external JSSymbol symbol; -@JS('Symbol') -external JSSymbol createSymbol(String value); - extension on JSSymbol { @JS('toString') external String toStringExternal(); @@ -536,10 +533,29 @@ void syncTests() { Expect.equals('foo', dartStr); // [JSSymbol] - symbol = createSymbol('foo'); + symbol = JSSymbol('foo'); Expect.isTrue(symbol is JSSymbol); Expect.isTrue(confuse(symbol) is JSSymbol); Expect.equals('Symbol(foo)', symbol.toStringExternal()); + Expect.equals(symbol.description, 'foo'); + Expect.notEquals(JSSymbol.forKey('foo'), symbol); + Expect.equals(JSSymbol.forKey('foo'), JSSymbol.forKey('foo')); + Expect.equals(JSSymbol.forKey('foo').key, 'foo'); + Expect.isTrue(JSSymbol.asyncDispose is JSSymbol); + Expect.isTrue(JSSymbol.asyncIterator is JSSymbol); + Expect.isTrue(JSSymbol.dispose is JSSymbol); + Expect.isTrue(JSSymbol.hasInstance is JSSymbol); + Expect.isTrue(JSSymbol.isConcatSpreadable is JSSymbol); + Expect.isTrue(JSSymbol.iterator is JSSymbol); + Expect.isTrue(JSSymbol.match is JSSymbol); + Expect.isTrue(JSSymbol.matchAll is JSSymbol); + Expect.isTrue(JSSymbol.replace is JSSymbol); + Expect.isTrue(JSSymbol.search is JSSymbol); + Expect.isTrue(JSSymbol.species is JSSymbol); + Expect.isTrue(JSSymbol.split is JSSymbol); + Expect.isTrue(JSSymbol.toPrimitive is JSSymbol); + Expect.isTrue(JSSymbol.toStringTag is JSSymbol); + Expect.isTrue(JSSymbol.unscopables is JSSymbol); // [JSBigInt] bigInt = createBigInt('9876543210000000000000123456789'); From 98cdb8b7c7a4fea647b69ab674cbf6af532c6b0f Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Tue, 16 Dec 2025 09:23:12 -0800 Subject: [PATCH 3/4] Fix buildbots --- pkg/dart2wasm/test/ir_tests/interop.bool.wat | 28 ++++++++--------- .../test/ir_tests/interop.double.wat | 26 ++++++++-------- pkg/dart2wasm/test/ir_tests/interop.int.wat | 12 ++++---- pkg/dart2wasm/test/ir_tests/interop.num.wat | 30 +++++++++---------- .../test/ir_tests/interop.string.wat | 12 ++++---- sdk/lib/js_interop/js_interop.dart | 18 ++--------- .../js/static_interop_test/js_types_test.dart | 2 -- 7 files changed, 56 insertions(+), 72 deletions(-) diff --git a/pkg/dart2wasm/test/ir_tests/interop.bool.wat b/pkg/dart2wasm/test/ir_tests/interop.bool.wat index 03729e73cae0..351b691c27eb 100644 --- a/pkg/dart2wasm/test/ir_tests/interop.bool.wat +++ b/pkg/dart2wasm/test/ir_tests/interop.bool.wat @@ -1,10 +1,10 @@ (module $module0 (type $#Top (struct (field $field0 i32))) - (func $"dart2wasm._149 (import)" (import "dart2wasm" "_149") (param externref) (result i32)) - (func $"dart2wasm._150 (import)" (import "dart2wasm" "_150") (param i32) (result externref)) - (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref)) - (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref)) + (func $"dart2wasm._169 (import)" (import "dart2wasm" "_169") (param externref) (result i32)) + (func $"dart2wasm._170 (import)" (import "dart2wasm" "_170") (param i32) (result externref)) + (func $"dart2wasm._294 (import)" (import "dart2wasm" "_294") (param externref) (result externref)) + (func $"dart2wasm._295 (import)" (import "dart2wasm" "_295") (param externref) (result externref)) (global $"C2 false" (ref $#Top) <...>) (global $"C40 true" (ref $#Top) <...>) (global $"boolValue initialized" (mut i32) <...>) @@ -21,8 +21,8 @@ (func $"testBoolConstant " (local $var0 externref) i32.const 1 - call $"dart2wasm._150 (import)" - call $"dart2wasm._274 (import)" + call $"dart2wasm._170 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result i32) @@ -30,14 +30,14 @@ unreachable else local.get $var0 - call $"dart2wasm._149 (import)" + call $"dart2wasm._169 (import)" end call $"sinkBool " ) (func $"testBoolConstantNullable " (local $var0 externref) ref.null noextern - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var0 call $isDartNull if (result (ref null $#Top)) @@ -46,7 +46,7 @@ global.get $"C40 true" global.get $"C2 false" local.get $var0 - call $"dart2wasm._149 (import)" + call $"dart2wasm._169 (import)" select (ref $#Top) end call $"sinkBoolNullable " @@ -59,8 +59,8 @@ else call $"boolValue implicit getter" end - call $"dart2wasm._150 (import)" - call $"dart2wasm._274 (import)" + call $"dart2wasm._170 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result i32) @@ -68,7 +68,7 @@ unreachable else local.get $var0 - call $"dart2wasm._149 (import)" + call $"dart2wasm._169 (import)" end call $"sinkBool " ) @@ -110,7 +110,7 @@ local.get $var0 call $jsifyRaw end - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var1 call $isDartNull if (result (ref null $#Top)) @@ -119,7 +119,7 @@ global.get $"C40 true" global.get $"C2 false" local.get $var1 - call $"dart2wasm._149 (import)" + call $"dart2wasm._169 (import)" select (ref $#Top) end call $"sinkBoolNullable " diff --git a/pkg/dart2wasm/test/ir_tests/interop.double.wat b/pkg/dart2wasm/test/ir_tests/interop.double.wat index 2a434e35d61a..bfcf9153c81e 100644 --- a/pkg/dart2wasm/test/ir_tests/interop.double.wat +++ b/pkg/dart2wasm/test/ir_tests/interop.double.wat @@ -4,10 +4,10 @@ (type $BoxedDouble (sub final $#Top (struct (field $field0 i32) (field $value f64)))) - (func $"dart2wasm._147 (import)" (import "dart2wasm" "_147") (param externref) (result f64)) - (func $"dart2wasm._148 (import)" (import "dart2wasm" "_148") (param f64) (result externref)) - (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param f64) (result externref)) - (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref)) + (func $"dart2wasm._167 (import)" (import "dart2wasm" "_167") (param externref) (result f64)) + (func $"dart2wasm._168 (import)" (import "dart2wasm" "_168") (param f64) (result externref)) + (func $"dart2wasm._294 (import)" (import "dart2wasm" "_294") (param f64) (result externref)) + (func $"dart2wasm._295 (import)" (import "dart2wasm" "_295") (param externref) (result externref)) (global $"doubleValue initialized" (mut i32) <...>) (global $"doubleValueNullable initialized" (mut i32) <...>) (global $"ktrue initialized" (mut i32) <...>) @@ -22,7 +22,7 @@ (func $"testDoubleConstant " (local $var0 externref) f64.const 1.1 - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result f64) @@ -30,14 +30,14 @@ unreachable else local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" end call $"sinkDouble " ) (func $"testDoubleConstantNullable " (local $var0 externref) ref.null noextern - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var0 call $isDartNull if (result (ref null $BoxedDouble)) @@ -45,7 +45,7 @@ else i32.const 84 local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" struct.new $BoxedDouble end call $"sinkDoubleNullable " @@ -58,7 +58,7 @@ else call $"doubleValue implicit getter" end - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result f64) @@ -66,7 +66,7 @@ unreachable else local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" end call $"sinkDouble " ) @@ -111,10 +111,10 @@ else local.get $var0 struct.get $BoxedDouble $value - call $"dart2wasm._148 (import)" + call $"dart2wasm._168 (import)" end end - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var1 call $isDartNull if (result (ref null $BoxedDouble)) @@ -122,7 +122,7 @@ else i32.const 84 local.get $var1 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" struct.new $BoxedDouble end call $"sinkDoubleNullable " diff --git a/pkg/dart2wasm/test/ir_tests/interop.int.wat b/pkg/dart2wasm/test/ir_tests/interop.int.wat index 95f0b4ca8678..624c7631a957 100644 --- a/pkg/dart2wasm/test/ir_tests/interop.int.wat +++ b/pkg/dart2wasm/test/ir_tests/interop.int.wat @@ -4,8 +4,8 @@ (type $BoxedInt (sub final $#Top (struct (field $field0 i32) (field $value i64)))) - (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref)) - (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref)) + (func $"dart2wasm._294 (import)" (import "dart2wasm" "_294") (param externref) (result externref)) + (func $"dart2wasm._295 (import)" (import "dart2wasm" "_295") (param externref) (result externref)) (global $"intValue initialized" (mut i32) <...>) (global $"intValueNullable initialized" (mut i32) <...>) (global $"ktrue initialized" (mut i32) <...>) @@ -21,7 +21,7 @@ (local $var0 externref) i64.const 1 call $jsifyInt - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result i64) @@ -36,7 +36,7 @@ (func $"testIntConstantNullable " (local $var0 externref) ref.null noextern - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var0 call $isDartNull if (result (ref null $BoxedInt)) @@ -58,7 +58,7 @@ call $"intValue implicit getter" end call $jsifyInt - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result i64) @@ -107,7 +107,7 @@ local.get $var0 call $jsifyRaw end - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var1 call $isDartNull if (result (ref null $BoxedInt)) diff --git a/pkg/dart2wasm/test/ir_tests/interop.num.wat b/pkg/dart2wasm/test/ir_tests/interop.num.wat index 4e204d67ae5c..5025d6d969a3 100644 --- a/pkg/dart2wasm/test/ir_tests/interop.num.wat +++ b/pkg/dart2wasm/test/ir_tests/interop.num.wat @@ -14,10 +14,10 @@ (type $_Type (sub $#Top (struct (field $field0 i32) (field $isDeclaredNullable i32)))) - (func $"dart2wasm._147 (import)" (import "dart2wasm" "_147") (param externref) (result f64)) - (func $"dart2wasm._148 (import)" (import "dart2wasm" "_148") (param f64) (result externref)) - (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref)) - (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref)) + (func $"dart2wasm._167 (import)" (import "dart2wasm" "_167") (param externref) (result f64)) + (func $"dart2wasm._168 (import)" (import "dart2wasm" "_168") (param f64) (result externref)) + (func $"dart2wasm._294 (import)" (import "dart2wasm" "_294") (param externref) (result externref)) + (func $"dart2wasm._295 (import)" (import "dart2wasm" "_295") (param externref) (result externref)) (table $dtable0 745 funcref) (global $"C319 _TopType" (ref $_TopType) <...>) (global $"C66 WasmArray>[729]" (ref $Array>) <...>) @@ -36,7 +36,7 @@ (local $var0 externref) i64.const 1 call $jsifyInt - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result f64) @@ -44,15 +44,15 @@ unreachable else local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" end call $"sinkNum " ) (func $"testNumConstantDouble " (local $var0 externref) f64.const 1.1 - call $"dart2wasm._148 (import)" - call $"dart2wasm._274 (import)" + call $"dart2wasm._168 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result f64) @@ -60,14 +60,14 @@ unreachable else local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" end call $"sinkNum " ) (func $"testNumConstantNullable " (local $var0 externref) ref.null noextern - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var0 call $isDartNull if (result (ref null $BoxedDouble)) @@ -75,7 +75,7 @@ else i32.const 84 local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" struct.new $BoxedDouble end call $"sinkNumNullable " @@ -88,7 +88,7 @@ call $"numValue implicit getter" end $label0 call $jsifyNum - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result f64) @@ -96,7 +96,7 @@ unreachable else local.get $var0 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" end call $"sinkNum " ) @@ -270,7 +270,7 @@ ref.null noextern end $label1 end - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var4 call $isDartNull if (result (ref null $BoxedDouble)) @@ -278,7 +278,7 @@ else i32.const 84 local.get $var4 - call $"dart2wasm._147 (import)" + call $"dart2wasm._167 (import)" struct.new $BoxedDouble end call $"sinkNumNullable " diff --git a/pkg/dart2wasm/test/ir_tests/interop.string.wat b/pkg/dart2wasm/test/ir_tests/interop.string.wat index 3d670a0fbd2f..9d2c9e14addd 100644 --- a/pkg/dart2wasm/test/ir_tests/interop.string.wat +++ b/pkg/dart2wasm/test/ir_tests/interop.string.wat @@ -4,8 +4,8 @@ (type $JSStringImpl (sub final $#Top (struct (field $field0 i32) (field $_ref externref)))) - (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref)) - (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref)) + (func $"dart2wasm._294 (import)" (import "dart2wasm" "_294") (param externref) (result externref)) + (func $"dart2wasm._295 (import)" (import "dart2wasm" "_295") (param externref) (result externref)) (global $.a (import "" "a") (ref extern)) (global $"ktrue initialized" (mut i32) <...>) (global $"stringValueNullable initialized" (mut i32) <...>) @@ -21,7 +21,7 @@ (func $"testStringConstant " (local $var0 externref) global.get $.a - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result (ref $JSStringImpl)) @@ -36,7 +36,7 @@ (func $"testStringConstantNullable " (local $var0 externref) ref.null noextern - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var0 call $isDartNull if (result (ref null $JSStringImpl)) @@ -55,7 +55,7 @@ call $"stringValue implicit getter" end $label0 struct.get $JSStringImpl $_ref - call $"dart2wasm._274 (import)" + call $"dart2wasm._294 (import)" local.tee $var0 call $isDartNull if (result (ref $JSStringImpl)) @@ -101,7 +101,7 @@ local.get $var0 call $jsifyRaw end - call $"dart2wasm._275 (import)" + call $"dart2wasm._295 (import)" local.tee $var1 call $isDartNull if (result (ref null $JSStringImpl)) diff --git a/sdk/lib/js_interop/js_interop.dart b/sdk/lib/js_interop/js_interop.dart index 6ae31771cfe3..26028ac71602 100644 --- a/sdk/lib/js_interop/js_interop.dart +++ b/sdk/lib/js_interop/js_interop.dart @@ -558,26 +558,12 @@ extension type JSSymbol._(JSSymbolRepType _jsSymbol) implements JSAny { @JS('for') external static JSSymbol forKey(String key); - /// `Symbol.asyncDispose` from the ECMAScript [explicit resource management] - /// feature. - /// - /// [explicit resource management]: https://github.com/tc39/proposal-explicit-resource-management - @Since('3.11') - external static JSSymbol get asyncDispose; - /// See [`Symbol.asyncIterator`]. /// /// [`Symbol.asyncIterator`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator @Since('3.11') external static JSSymbol get asyncIterator; - /// `Symbol.dispose` from the ECMAScript [explicit resource management] - /// feature. - /// - /// [explicit resource management]: https://github.com/tc39/proposal-explicit-resource-management - @Since('3.11') - external static JSSymbol get dispose; - /// See [`Symbol.hasInstance`]. /// /// [`Symbol.hasInstance`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance @@ -656,12 +642,12 @@ extension type JSSymbol._(JSSymbolRepType _jsSymbol) implements JSAny { /// Returns the shared symbol key from the global symbol registry for this /// symbol (as registered with [forKey]), if this symbol was created with - /// [Symbol.forKey]. + /// [JSSymbol.forKey]. @Since('3.11') String? get key => _keyFor(this); /// A string containing the description of the symbol, as passed to [new - /// Symbol]. + /// JSSymbol]. @Since('3.11') external String get description; } diff --git a/tests/lib/js/static_interop_test/js_types_test.dart b/tests/lib/js/static_interop_test/js_types_test.dart index 92fb3e62daae..fc832a7a85bb 100644 --- a/tests/lib/js/static_interop_test/js_types_test.dart +++ b/tests/lib/js/static_interop_test/js_types_test.dart @@ -541,9 +541,7 @@ void syncTests() { Expect.notEquals(JSSymbol.forKey('foo'), symbol); Expect.equals(JSSymbol.forKey('foo'), JSSymbol.forKey('foo')); Expect.equals(JSSymbol.forKey('foo').key, 'foo'); - Expect.isTrue(JSSymbol.asyncDispose is JSSymbol); Expect.isTrue(JSSymbol.asyncIterator is JSSymbol); - Expect.isTrue(JSSymbol.dispose is JSSymbol); Expect.isTrue(JSSymbol.hasInstance is JSSymbol); Expect.isTrue(JSSymbol.isConcatSpreadable is JSSymbol); Expect.isTrue(JSSymbol.iterator is JSSymbol); From 513594cd51a0101275690fb33e85b5e069ebd249 Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Thu, 18 Dec 2025 12:20:46 -0800 Subject: [PATCH 4/4] Fix doc reference --- sdk/lib/js_interop/js_interop.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/lib/js_interop/js_interop.dart b/sdk/lib/js_interop/js_interop.dart index 26028ac71602..5ac9a595b509 100644 --- a/sdk/lib/js_interop/js_interop.dart +++ b/sdk/lib/js_interop/js_interop.dart @@ -646,8 +646,8 @@ extension type JSSymbol._(JSSymbolRepType _jsSymbol) implements JSAny { @Since('3.11') String? get key => _keyFor(this); - /// A string containing the description of the symbol, as passed to [new - /// JSSymbol]. + /// A string containing the description of the symbol, as passed to + /// [JSSymbol.new]. @Since('3.11') external String get description; }