Skip to content

Commit b949981

Browse files
author
Anna Gringauze
authored
Prepare for variable names changes due to patterns support in DDC (#2042)
* Prepare for variable names changes due to patterns support in DDC * Update version and build * Update webdev to dev version and use local dwds in test_common
1 parent c2c8b17 commit b949981

File tree

12 files changed

+167
-105
lines changed

12 files changed

+167
-105
lines changed

dwds/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 18.0.2-dev
2+
3+
- Support new DDC temp names for patterns. - [#2042](https://github.com/dart-lang/webdev/pull/2042)
4+
15
## 18.0.1
26

37
- Fix failure to map JS exceptions to dart. - [#2004](https://github.com/dart-lang/webdev/pull/2004)

dwds/lib/src/debugging/dart_scope.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,19 @@ import 'package:dwds/src/debugging/debugger.dart';
66
import 'package:dwds/src/utilities/objects.dart';
77
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
88

9-
// TODO(sdk/issues/44262) - use an alternative way to identify synthetic
10-
// variables.
11-
final ddcTemporaryVariableRegExp = RegExp(r'^(t[0-9]+\$?[0-9]*|__t[\$\w*]+)$');
9+
/// The regular expressions used to filter out temp variables.
10+
/// Needs to be kept in sync with SDK repo.
11+
///
12+
/// TODO(annagrin) - use an alternative way to identify
13+
/// synthetic variables.
14+
/// Issue: https://github.com/dart-lang/sdk/issues/44262
15+
final ddcTemporaryVariableRegExp = RegExp(r'^t(\$[0-9]*)+\w*$');
16+
final ddcTemporaryTypeVariableRegExp = RegExp(r'^__t[\$\w*]+$');
17+
18+
/// Temporary variable regex before SDK changes for patterns.
19+
/// TODO(annagrin): remove after dart 3.0 is stable.
20+
final previousDdcTemporaryVariableRegExp =
21+
RegExp(r'^(t[0-9]+\$?[0-9]*|__t[\$\w*]+)$');
1222

1323
/// Find the visible Dart properties from a JS Scope Chain, coming from the
1424
/// scopeChain attribute of a Chrome CallFrame corresponding to [frame].
@@ -65,7 +75,9 @@ Future<List<Property>> visibleProperties({
6575
// Dart generic function, where the type arguments get passed in as
6676
// parameters. Hide those.
6777
return (type == 'function' && description.startsWith('class ')) ||
68-
(ddcTemporaryVariableRegExp.hasMatch(name)) ||
78+
previousDdcTemporaryVariableRegExp.hasMatch(name) ||
79+
ddcTemporaryVariableRegExp.hasMatch(name) ||
80+
ddcTemporaryTypeVariableRegExp.hasMatch(name) ||
6981
(type == 'object' && description == 'dart.LegacyType.new');
7082
});
7183

dwds/lib/src/injected/client.js

Lines changed: 56 additions & 76 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dwds/lib/src/services/expression_evaluator.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ class ExpressionEvaluator {
207207

208208
// Compile expression using an expression compiler, such as
209209
// frontend server or expression compiler worker.
210+
//
211+
// TODO(annagrin): map JS locals to dart locals in the expression
212+
// and JS scope before passing them to the dart expression compiler.
213+
// Issue: https://github.com/dart-lang/sdk/issues/40273
210214
final compilationResult = await _compiler.compileExpressionToJs(
211215
isolateId,
212216
libraryUri.toString(),

dwds/lib/src/version.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dwds/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dwds
22
# Every time this changes you need to run `dart run build_runner build`.
3-
version: 18.0.1
3+
version: 18.0.2-dev
44
description: >-
55
A service that proxies between the Chrome debug protocol and the Dart VM
66
service protocol.

dwds/test/evaluate_common.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,27 @@ void testAll({
105105
await context.service.resume(isolateId);
106106
});
107107

108+
test('extension method scope variables can be evaluated', () async {
109+
await onBreakPoint(isolateId, mainScript, 'extension', () async {
110+
final event = await stream
111+
.firstWhere((event) => event.kind == EventKind.kPauseBreakpoint);
112+
113+
final stack = await context.service.getStack(isolateId);
114+
final scope = _getFrameVariables(stack.frames!.first);
115+
for (var p in scope.entries) {
116+
final name = p.key;
117+
final value = p.value as InstanceRef;
118+
final result = await context.service
119+
.evaluateInFrame(isolateId, event.topFrame!.index!, name!);
120+
121+
expect(
122+
result,
123+
isA<InstanceRef>().having((instance) => instance.valueAsString,
124+
'valueAsString', value.valueAsString));
125+
}
126+
});
127+
}, skip: 'https://github.com/dart-lang/webdev/issues/1371');
128+
108129
test('uses correct null safety mode', () async {
109130
await onBreakPoint(isolateId, mainScript, 'printLocal', () async {
110131
final event = await stream
@@ -695,3 +716,10 @@ void testAll({
695716
});
696717
});
697718
}
719+
720+
Map<String?, InstanceRef?> _getFrameVariables(Frame frame) {
721+
return <String?, InstanceRef?>{
722+
for (var variable in frame.vars!)
723+
variable.name: variable.value as InstanceRef?,
724+
};
725+
}

dwds/test/variable_scope_test.dart

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,75 @@
77
import 'package:dwds/src/debugging/dart_scope.dart';
88
import 'package:dwds/src/services/chrome_proxy_service.dart';
99
import 'package:test/test.dart';
10+
import 'package:test_common/logging.dart';
1011
import 'package:test_common/test_sdk_configuration.dart';
1112
import 'package:vm_service/vm_service.dart';
1213

1314
import 'fixtures/context.dart';
1415
import 'fixtures/project.dart';
1516

1617
void main() {
17-
final provider = TestSdkConfigurationProvider();
18+
// set to true for debug logging.
19+
final debug = false;
20+
21+
final provider = TestSdkConfigurationProvider(verbose: debug);
1822
tearDownAll(provider.dispose);
1923

2024
final context =
2125
TestContext(TestProject.testScopesWithSoundNullSafety, provider);
2226

2327
setUpAll(() async {
24-
await context.setUp();
28+
setCurrentLogWriter(debug: debug);
29+
await context.setUp(verboseCompiler: debug);
2530
});
2631

2732
tearDownAll(() async {
2833
await context.tearDown();
2934
});
3035

31-
group('ddcTemporaryVariableRegExp', () {
32-
test('matches correctly', () {
33-
expect(ddcTemporaryVariableRegExp.hasMatch(r't4$'), isTrue);
34-
expect(ddcTemporaryVariableRegExp.hasMatch(r't4$0'), isTrue);
35-
expect(ddcTemporaryVariableRegExp.hasMatch(r't4$10'), isTrue);
36-
expect(ddcTemporaryVariableRegExp.hasMatch(r't4$0'), isTrue);
37-
expect(ddcTemporaryVariableRegExp.hasMatch(r't1'), isTrue);
38-
expect(ddcTemporaryVariableRegExp.hasMatch(r't10'), isTrue);
39-
expect(ddcTemporaryVariableRegExp.hasMatch(r'__t$TL'), isTrue);
40-
expect(ddcTemporaryVariableRegExp.hasMatch(r'__t$StringN'), isTrue);
41-
expect(ddcTemporaryVariableRegExp.hasMatch(r'__t$IdentityMapOfString$T'),
36+
group('temporary variable regular expression', () {
37+
setUpAll(() => setCurrentLogWriter(debug: debug));
38+
test('matches correctly for pre-patterns temporary variables', () {
39+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't4$'), isTrue);
40+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't4$0'), isTrue);
41+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't4$10'), isTrue);
42+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't4$0'), isTrue);
43+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't1'), isTrue);
44+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't10'), isTrue);
45+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r'__t$TL'), isTrue);
46+
expect(
47+
previousDdcTemporaryVariableRegExp.hasMatch(r'__t$StringN'), isTrue);
48+
expect(
49+
previousDdcTemporaryVariableRegExp
50+
.hasMatch(r'__t$IdentityMapOfString$T'),
51+
isTrue);
52+
53+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't'), isFalse);
54+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't10foo'), isFalse);
55+
expect(previousDdcTemporaryVariableRegExp.hasMatch(r't$10foo'), isFalse);
56+
});
57+
58+
test('matches correctly for post-patterns temporary variables', () {
59+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$364$'), isTrue);
60+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$364$0'), isTrue);
61+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$364$10'), isTrue);
62+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$364$0'), isTrue);
63+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$361'), isTrue);
64+
expect(ddcTemporaryVariableRegExp.hasMatch(r't$36$350$350'), isTrue);
65+
expect(
66+
ddcTemporaryVariableRegExp.hasMatch(r't$36$350$354$35isSet'), isTrue);
67+
expect(ddcTemporaryTypeVariableRegExp.hasMatch(r'__t$TL'), isTrue);
68+
expect(ddcTemporaryTypeVariableRegExp.hasMatch(r'__t$StringN'), isTrue);
69+
expect(
70+
ddcTemporaryTypeVariableRegExp.hasMatch(r'__t$IdentityMapOfString$T'),
4271
isTrue);
4372

4473
expect(ddcTemporaryVariableRegExp.hasMatch(r't'), isFalse);
74+
expect(ddcTemporaryVariableRegExp.hasMatch(r'this'), isFalse);
75+
expect(ddcTemporaryVariableRegExp.hasMatch(r'\$this'), isFalse);
76+
expect(ddcTemporaryVariableRegExp.hasMatch(r't10'), isFalse);
4577
expect(ddcTemporaryVariableRegExp.hasMatch(r't10foo'), isFalse);
46-
expect(ddcTemporaryVariableRegExp.hasMatch(r't$10foo'), isFalse);
78+
expect(ddcTemporaryVariableRegExp.hasMatch(r'ten'), isFalse);
4779
});
4880
});
4981

@@ -109,6 +141,8 @@ void main() {
109141
};
110142
}
111143

144+
setUpAll(() => setCurrentLogWriter(debug: debug));
145+
112146
setUp(() async {
113147
service = context.service;
114148
vm = await service.getVM();

test_common/pubspec.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ environment:
66
sdk: ">=3.0.0-134.0.dev <4.0.0"
77

88
dependencies:
9-
dwds: 18.0.1
9+
dwds:
10+
path: ../dwds
1011
file: ^6.1.3
1112
logging: ^1.0.1
1213
path: ^1.8.1
@@ -15,6 +16,3 @@ dependencies:
1516
dev_dependencies:
1617
lints: ^2.0.0
1718

18-
# dependency_overrides:
19-
# dwds:
20-
# path: ../dwds

webdev/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
## 3.0.3-dev
2+
13
## 3.0.2
24

35
- Update `build_daemon` constraint to `^4.0.0`.

webdev/lib/src/version.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webdev/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: webdev
22
# Every time this changes you need to run `dart run build_runner build`.
3-
version: 3.0.2
3+
version: 3.0.3-dev
44
# We should not depend on a dev SDK before publishing.
55
# publish_to: none
66
description: >-
@@ -52,9 +52,9 @@ dev_dependencies:
5252
webdriver: ^3.0.0
5353

5454
# Comment out before releasing webdev.
55-
# dependency_overrides:
56-
# dwds:
57-
# path: ../dwds
55+
dependency_overrides:
56+
dwds:
57+
path: ../dwds
5858

5959
executables:
6060
webdev:

0 commit comments

Comments
 (0)