Пример #1
0
    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);
        }
    }
Пример #2
0
        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);
            }
        }