示例#1
0
        private static IConvertible SizeOf(StructInstance context, Expression[] parameters)
        {
            if (parameters.Length != 1)
            {
                throw new LoadDataException("SizeOf function requires an argument");
            }
            if (!(parameters [0] is SymbolExpression))
            {
                throw new LoadDataException("SizeOf argument must be a symbol");
            }
            string symbol = ((SymbolExpression)parameters[0]).Symbol;

            StructFile structFile = context.Def.StructFile;
            StructDef  def        = structFile.GetStructByName(symbol);

            if (def == null)
            {
                throw new LoadDataException("Structure '" + symbol + "' not found");
            }
            return(def.GetDataSize());
        }
示例#2
0
        public StructFile LoadStructs(string fileName, StructSourceContext context)
        {
            StructFile result = new StructFile(fileName.Length > 0 ? Path.GetDirectoryName(fileName) : "");

            _curStructFile = result;
            LoadStructFile(fileName, context);
            foreach (ReferenceBase reference in result.References)
            {
                try
                {
                    reference.Resolve();
                }
                catch (ParseException ex)
                {
                    _errors.Add(ex);
                }
            }
            if (_errors.Count == 0)
            {
                return(result);
            }
            return(null);
        }
示例#3
0
 public StructDef(StructFile structFile, string name)
 {
     _structFile = structFile;
     _name       = name;
 }
示例#4
0
 public EnumDef(StructFile file, string name)
 {
     _structFile = file;
     _name       = name;
 }