public void Mangle(AstToplevel topLevel) { var output = new OutputContext(_outputOptions); output.InitializeForFrequencyCounting(); if (_options.FrequencyCounting) { topLevel.Print(output); } _options.Chars = output.FinishFrequencyCounting(); Walk(topLevel); foreach (var s in _options.Reserved) { var idx = AstScope.Debase54(_options.Chars, s); if (idx >= 0) { _options.ReservedOrIdentifier.Add((uint)idx); } } foreach (var s in OutputContext.ReservedWords) { var idx = AstScope.Debase54(_options.Chars, s); if (idx >= 0) { _options.ReservedOrIdentifier.Add((uint)idx); } } for (var i = 0u; i < _toMangle.Count; i++) { _toMangle[i].Mangle(_options); } }
public void Mangle(ScopeOptions options) { if (MangledName != null) { return; } if (Unmangleable(options)) { if (!options.IgnoreEval && Scope.Pinned()) { var mangledIdx = AstScope.Debase54(options.Chars, Name); var enc = Scope.Enclosed.AsReadOnlySpan(); foreach (var encSym in enc) { if (encSym.MangledIdx == mangledIdx && encSym.MangledName != null) { encSym.MangledName = null; encSym.Mangle(options); } } } return; } var def = Redefined(); if (def != null) { if (def.MangledIdx >= 0) { MangledName = def.MangledName; MangledIdx = def.MangledIdx; } else { MangledName = def.Name; MangledIdx = AstScope.Debase54(options.Chars, MangledName); } } else { (MangledName, MangledIdx) = ((string, int))Scope.NextMangled(options, this); } }