Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2c7468c

Browse files
committed
move
1 parent 220d1b3 commit 2c7468c

File tree

6 files changed

+39
-48
lines changed

6 files changed

+39
-48
lines changed

lib/web_ui/lib/src/engine/dart_js_conversion.dart

Lines changed: 0 additions & 44 deletions
This file was deleted.

lib/web_ui/lib/src/engine/dom.dart

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ import 'dart:js_interop';
77
import 'dart:math' as math;
88
import 'dart:typed_data';
99

10+
import 'package:ui/src/engine/skwasm/skwasm_stub.dart' if (dart.library.ffi) 'package:ui/src/engine/skwasm/skwasm_impl.dart';
1011
import 'package:js/js_util.dart' as js_util;
1112
import 'package:meta/meta.dart';
1213

1314
import 'browser_detection.dart';
1415

15-
import 'dart_js_conversion.dart';
16-
export 'dart_js_conversion.dart';
17-
1816
/// This file contains static interop classes for interacting with the DOM and
1917
/// some helpers. All of the classes in this file are named after their
2018
/// counterparts in the DOM. To extend any of these classes, simply add an
@@ -28,6 +26,41 @@ export 'dart_js_conversion.dart';
2826
// the boundary between Dart and JS interop exists, we should expose JS types
2927
// directly to the engine.
3028

29+
/// Conversions methods to facilitate migrating to JS types.
30+
///
31+
/// The existing behavior across the JS interop boundary involves many implicit
32+
/// conversions. For efficiency reasons, on JS backends we still want those
33+
/// implicit conversions, but on Wasm backends we need to 'shallowly' convert
34+
/// these types.
35+
///
36+
/// Note: Due to discrepancies between how `null`, `JSNull`, and `JSUndefined`
37+
/// are currently represented across web backends, these extensions should be
38+
/// used carefully and only on types that are known to not contains `JSNull` and
39+
/// `JSUndefined`.
40+
41+
extension ObjectToJSAnyExtension on Object {
42+
// Once `Object.toJSBox` is faster (see
43+
// https://github.com/dart-lang/sdk/issues/55183) we can remove this
44+
// backend-specific workaround.
45+
@pragma('wasm:prefer-inline')
46+
@pragma('dart2js:tryInline')
47+
JSAny get toJSAnyShallow => dartToJsWrapper(this);
48+
49+
@pragma('wasm:prefer-inline')
50+
@pragma('dart2js:tryInline')
51+
JSAny get toJSAnyDeep => js_util.jsify(this) as JSAny;
52+
}
53+
54+
extension JSAnyToObjectExtension on JSAny {
55+
@pragma('wasm:prefer-inline')
56+
@pragma('dart2js:tryInline')
57+
Object get toObjectShallow => jsWrapperToDart(this);
58+
59+
@pragma('wasm:prefer-inline')
60+
@pragma('dart2js:tryInline')
61+
Object get toObjectDeep => js_util.dartify(this)!;
62+
}
63+
3164
@JS('Object')
3265
external DomObjectConstructor get objectConstructor;
3366

lib/web_ui/lib/src/engine/skwasm/skwasm_impl.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'dart:ffi';
1111

1212
export 'skwasm_impl/canvas.dart';
1313
export 'skwasm_impl/codecs.dart';
14+
export 'skwasm_impl/dart_js_conversion.dart';
1415
export 'skwasm_impl/filters.dart';
1516
export 'skwasm_impl/font_collection.dart';
1617
export 'skwasm_impl/image.dart';

lib/web_ui/lib/src/engine/skwasm/skwasm_stub.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
// ignore: unnecessary_library_directive
77
library skwasm_stub;
88

9+
export 'skwasm_stub/dart_js_conversion.dart';
910
export 'skwasm_stub/renderer.dart';

lib/web_ui/lib/src/engine/dart_js_conversion_nonwasm.dart renamed to lib/web_ui/lib/src/engine/skwasm/skwasm_stub/dart_js_conversion.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ JSAny dartToJsWrapper(Object object) => object as JSAny;
1010

1111
@pragma('wasm:prefer-inline')
1212
@pragma('dart2js:tryInline')
13-
Object jsWrapperToDart(JSAny jsWrapper) => this;
13+
Object jsWrapperToDart(JSAny jsWrapper) => jsWrapper;

0 commit comments

Comments
 (0)