Пример #1
0
        internal TokenCollection Analyze(AxData data)
        {
            if (!data.IsStarted)
            {
                throw new InvalidOperationException();
            }
            TokenCollection stream      = new TokenCollection();
            BinaryReader    reader      = data.Reader;
            long            sizeOfCode  = data.Header.CodeSize;
            long            startOfCode = data.StartOfCode;

            tokenOffset = 0;
            reader.BaseStream.Seek(startOfCode, SeekOrigin.Begin);
            while (tokenOffset < sizeOfCode)
            {
                PrimitiveToken code = ReadPrimitive(reader, data);
                if (code != null)
                {
                    stream.Add(code);
                }
            }
#if DEBUG
            List <int> variablesCount = null;
            variablesCount = subAnalyzeVariables(stream);
            for (int i = 0; i < variablesCount.Count; i++)
            {
                if (variablesCount[i] == 1)
                {
                    string errMsg = GlobalVariablePrimitive.ToString(i);
                    errMsg += ":この変数は一度しか使われていません";
                    global::KttK.HspDecompiler.HspConsole.Warning(errMsg);
                }
                if (variablesCount[i] == 0)
                {
                    string errMsg = GlobalVariablePrimitive.ToString(i);
                    errMsg += ":この変数は使われていません";
                    global::KttK.HspDecompiler.HspConsole.Warning(errMsg);
                }
            }
#endif

            return(stream);
        }
Пример #2
0
        private List <int> subAnalyzeVariables(TokenCollection stream)
        {
            List <int> variablesCount = new List <int>();

            foreach (PrimitiveToken token in stream.GetPrimives())
            {
                if (!(token is GlobalVariablePrimitive))
                {
                    continue;
                }
                GlobalVariablePrimitive variable = (GlobalVariablePrimitive)token;
                if (token.Value >= variablesCount.Count)
                {
                    variablesCount.Capacity = token.Value + 1;
                    while (token.Value >= variablesCount.Count)
                    {
                        variablesCount.Add(0);
                    }
                }
                variablesCount[token.Value]++;
            }
            return(variablesCount);
        }