コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 public ThirdGenExpression(StructureValueCollection values, ushort index, StringTableReader stringReader)
 {
     Load(values, index, stringReader);
 }
コード例 #4
0
        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;
        }
コード例 #5
0
        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;
        }