@@ -61,6 +61,13 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
61
61
/// module.
62
62
final memberNames = < Member , String > {};
63
63
64
+ /// Maps each `Procedure` node compiled in the module to the `Identifier` s
65
+ /// used to name the class in JavaScript.
66
+ ///
67
+ /// This mapping is used when generating the symbol information for the
68
+ /// module.
69
+ final procedureIdentifiers = < Procedure , js_ast.Identifier > {};
70
+
64
71
/// Maps each `VariableDeclaration` node compiled in the module to the name
65
72
/// used for the variable in JavaScript.
66
73
///
@@ -2368,8 +2375,9 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
2368
2375
Class memberClass}) {
2369
2376
// Static members skip the rename steps and may require JS interop renames.
2370
2377
if (isStatic) {
2371
- // TODO(nshahan) Record the name for this member in memberNames.
2372
- return _emitStaticMemberName (name, member);
2378
+ var memberName = _emitStaticMemberName (name, member);
2379
+ memberNames[member] = memberName.valueWithoutQuotes;
2380
+ return memberName;
2373
2381
}
2374
2382
2375
2383
// We allow some (illegal in Dart) member names to be used in our private
@@ -2379,6 +2387,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
2379
2387
var runtimeName = _jsExportName (member);
2380
2388
if (runtimeName != null ) {
2381
2389
var parts = runtimeName.split ('.' );
2390
+ // TODO(nshahan) Record the name for this member in memberNames.
2382
2391
if (parts.length < 2 ) return propertyName (runtimeName);
2383
2392
2384
2393
js_ast.Expression result = _emitIdentifier (parts[0 ]);
@@ -2652,8 +2661,9 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
2652
2661
_currentUri = node.fileUri;
2653
2662
2654
2663
var name = node.name.text;
2664
+ memberNames[node] = name;
2655
2665
var result = js_ast.Method (
2656
- propertyName (name), _emitFunction (node.function, node. name.text ),
2666
+ propertyName (name), _emitFunction (node.function, name),
2657
2667
isGetter: node.isGetter, isSetter: node.isSetter)
2658
2668
..sourceInformation = _nodeEnd (node.fileEndOffset);
2659
2669
@@ -2678,8 +2688,10 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
2678
2688
2679
2689
var nameExpr = _emitTopLevelName (p);
2680
2690
var jsName = _safeFunctionNameForSafari (p.name.text, fn);
2681
- body.add (js.statement ('# = #' ,
2682
- [nameExpr, js_ast.NamedFunction (_emitTemporaryId (jsName), fn)]));
2691
+ var functionName = _emitTemporaryId (jsName);
2692
+ procedureIdentifiers[p] = functionName;
2693
+ body.add (js.statement (
2694
+ '# = #' , [nameExpr, js_ast.NamedFunction (functionName, fn)]));
2683
2695
2684
2696
_currentUri = savedUri;
2685
2697
_staticTypeContext.leaveMember (p);
@@ -3605,7 +3617,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
3605
3617
}
3606
3618
3607
3619
for (var p in f.positionalParameters) {
3608
- var jsParam = _emitVariableDef (p);
3620
+ var jsParam = _emitVariableRef (p);
3609
3621
if (_checkParameters) {
3610
3622
initParameter (p, jsParam);
3611
3623
}
@@ -4510,21 +4522,19 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
4510
4522
var name = v.name;
4511
4523
if (name == null || name.startsWith ('#' )) {
4512
4524
name = name == null ? 't${_tempVariables .length }' : name.substring (1 );
4513
- // TODO(nshahan) Record the Identifier for this variable in
4514
- // variableIdentifiers.
4515
4525
return _tempVariables.putIfAbsent (v, () => _emitTemporaryId (name));
4516
4526
}
4517
- var identifier = _emitIdentifier (name);
4518
- variableIdentifiers[v] = identifier;
4519
- return identifier;
4527
+ return _emitIdentifier (name);
4520
4528
}
4521
4529
4522
4530
/// Emits the declaration of a variable.
4523
4531
///
4524
4532
/// This is similar to [_emitVariableRef] but it also attaches source
4525
4533
/// location information, so hover will work as expected.
4526
4534
js_ast.Identifier _emitVariableDef (VariableDeclaration v) {
4527
- return _emitVariableRef (v)..sourceInformation = _nodeStart (v);
4535
+ var identifier = _emitVariableRef (v)..sourceInformation = _nodeStart (v);
4536
+ variableIdentifiers[v] = identifier;
4537
+ return identifier;
4528
4538
}
4529
4539
4530
4540
js_ast.Statement _initLetVariables () {
@@ -6403,8 +6413,9 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
6403
6413
Library library, String className, Member member,
6404
6414
[js_ast.TemporaryId id]) {
6405
6415
var name = '$className .${member .name .text }' ;
6406
- // Names used in the symbols for the public fields
6407
- // memberNames[member] = 'Symbol($name)';
6416
+ // Wrap the name as a symbol here so it matches what you would find at
6417
+ // runtime when you get all properties and symbols from an instance.
6418
+ memberNames[member] = 'Symbol($name )' ;
6408
6419
return emitPrivateNameSymbol (library, name, id);
6409
6420
}
6410
6421
0 commit comments