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); }
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); }