Example #1
0
        public ClassDef AddDefinition(string name_space, string name,
                                      TypeAttr attr, Class parent, Location location)
        {
            string full_name;

            if (name_space != null)
            {
                full_name = String.Format("{0}.{1}", name_space, name);
            }
            else
            {
                full_name = name;
            }

            ClassTableItem item = (ClassTableItem)table[full_name];

            if (item == null)
            {
                ClassDef klass = pefile.AddClass(attr, name_space, name, parent);
                AddDefined(full_name, klass, location);
                return(klass);
            }

            /// TODO: Need to set parent, will need to modify PEAPI for this.
            item.Class.AddAttribute(attr);
            item.Defined = true;

            return(item.Class);
        }
Example #2
0
        public ClassDef AddDefinition(string name_space, string name,
                                      TypeAttr attr, Location location)
        {
            string full_name;

            if (name_space != null)
            {
                full_name = String.Format("{0}.{1}", name_space, name);
            }
            else
            {
                full_name = name;
            }

            ClassTableItem item = (ClassTableItem)table[full_name];

            if (item == null)
            {
                ClassDef klass = pefile.AddClass(attr, name_space, name);
                AddDefined(full_name, klass, location);
                return(klass);
            }

            item.Class.AddAttribute(attr);
            item.Defined = true;

            return(item.Class);
        }
Example #3
0
        /// <summary>
        ///  If a type is allready defined throw an Error
        /// </summary>
        protected void CheckExists(string full_name)
        {
            ClassTableItem item = table[full_name] as ClassTableItem;

            if ((item != null) && (item.Defined))
            {
                Report.Error(String.Format("Class: {0} defined in multiple locations.",
                                           full_name));
            }
        }
Example #4
0
        public Class Get(string full_name)
        {
            ClassTableItem item = table[full_name] as ClassTableItem;

            if (item == null)
            {
                return(null);
            }

            return(item.Class);
        }
Example #5
0
        protected void AddReference(string full_name, ClassDef klass, Location location)
        {
            if (table.Contains(full_name))
            {
                return;
            }

            ClassTableItem item = new ClassTableItem(klass, location);

            table[full_name] = item;
        }
Example #6
0
 /// <summary>
 ///  When there is no code left to compile, check to make sure referenced types where defined
 ///  TODO: Proper error reporting
 /// </summary>
 public void CheckForUndefined()
 {
     foreach (DictionaryEntry dic_entry in table)
     {
         ClassTableItem table_item = (ClassTableItem)dic_entry.Value;
         if (table_item.CheckDefined())
         {
             continue;
         }
         Report.Error(String.Format("Type: {0} is not defined.", dic_entry.Key));
     }
 }
Example #7
0
        public FieldTable GetFieldTable(string full_name, Location location)
        {
            ClassTableItem item = table[full_name] as ClassTableItem;

            if (item == null)
            {
                GetReference(full_name, location);
                return(GetFieldTable(full_name, location));
            }

            return(item.FieldTable);
        }
Example #8
0
        protected void AddDefined(string full_name, ClassDef klass, Location location)
        {
            if (table.Contains(full_name))
            {
                return;
            }

            ClassTableItem item = new ClassTableItem(klass, location);

            item.Defined = true;

            table[full_name] = item;
        }
Example #9
0
        public Class GetReference(string full_name, Location location)
        {
            ClassTableItem item = table[full_name] as ClassTableItem;

            if (item != null)
            {
                item.LocationList.Add(location);
                return(item.Class);
            }

            string name_space, name;

            GetNameAndNamespace(full_name, out name_space, out name);
            ClassDef klass = pefile.AddClass(DefaultAttr, name_space, name);

            AddReference(full_name, klass, location);

            return(klass);
        }
Example #10
0
                protected void AddReference (string full_name, ClassDef klass, Location location)
                {
                        if (table.Contains (full_name))
                                return;

                        ClassTableItem item = new ClassTableItem (klass, location);

                        table[full_name] = item;
                }
Example #11
0
                protected void AddDefined (string full_name, ClassDef klass, Location location)
                {
                        if (table.Contains (full_name))
                                return;

                        ClassTableItem item = new ClassTableItem (klass, location);
                        item.Defined = true;

                        table[full_name] = item;
                }