private void Load(StructureValueCollection values, ushort index, StringTableReader stringReader) { ushort salt = (ushort)values.GetNumber("datum index salt"); Index = new DatumIndex(salt, index); Opcode = (ushort)values.GetNumber("opcode"); ValueType = (short)values.GetNumber("value type"); Type = (ExpressionType)values.GetNumber("expression type"); _nextIndex = new DatumIndex(values.GetNumber("next expression index")); _stringTableOffset = (int)values.GetNumber("string table offset"); Value = values.GetNumber("value"); LineNumber = (short)values.GetNumber("source line"); stringReader.RequestString(_stringTableOffset); }
private void Load(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, IStringIDSource stringIDs, BuildInformation buildInfo) { StringTableReader stringReader = new StringTableReader(); ScriptExpressions = LoadScriptExpressions(values, reader, addrConverter, stringReader, buildInfo.GetLayout("script expression entry")); ScriptObjects = LoadScriptObjects(values, reader, addrConverter, stringIDs, buildInfo.GetLayout("script object entry")); ScriptGlobals = LoadScriptGlobals(values, reader, addrConverter, ScriptExpressions, buildInfo.GetLayout("script global entry")); Scripts = LoadScripts(values, reader, addrConverter, stringIDs, ScriptExpressions, buildInfo.GetLayout("script entry"), buildInfo); CachedStringTable strings = LoadStrings(values, reader, stringReader, addrConverter); foreach (IExpression expr in ScriptExpressions) { // FIXME: hax if (expr != null) ((ThirdGenExpression)expr).ResolveStrings(strings); } }
public ThirdGenExpression(StructureValueCollection values, ushort index, StringTableReader stringReader) { Load(values, index, stringReader); }
private ExpressionTable LoadScriptExpressions(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, StringTableReader stringReader, StructureLayout entryLayout) { int exprCount = (int)values.GetNumber("number of script expressions"); ScriptExpressionsLocation = new Pointer(values.GetNumber("script expression table address"), addrConverter); ExpressionTable result = new ExpressionTable(); reader.SeekTo(ScriptExpressionsLocation.AsOffset()); for (int i = 0; i < exprCount; i++) { StructureValueCollection exprValues = StructureReader.ReadStructure(reader, entryLayout); result.AddExpression(new ThirdGenExpression(exprValues, (ushort)i, stringReader)); } foreach (IExpression expr in result) { // FIXME: hax if (expr != null) ((ThirdGenExpression)expr).ResolveReferences(result); } return result; }
private CachedStringTable LoadStrings(StructureValueCollection values, IReader reader, StringTableReader stringReader, MetaAddressConverter addrConverter) { int stringsSize = (int)values.GetNumber("script string table size"); Pointer stringsLocation = new Pointer(values.GetNumber("script string table address"), addrConverter); CachedStringTable result = new CachedStringTable(); stringReader.ReadRequestedStrings(reader, stringsLocation, result); return result; }