decompiler
1.0.0
|
An interface to the pool of constant objects for byte-code languages. More...
#include <cpool.hh>
Public Member Functions | |
virtual | ~ConstantPool () |
Destructor. | |
virtual const CPoolRecord * | getRecord (const vector< uintb > &refs) const =0 |
Retrieve a constant pool record (CPoolRecord) given a reference to it. More... | |
void | putRecord (const vector< uintb > &refs, uint4 tag, const string &tok, Datatype *ct) |
A a new constant pool record to this database. More... | |
const CPoolRecord * | restoreXmlRecord (const vector< uintb > &refs, const Element *el, TypeFactory &typegrp) |
Restore a CPoolRecord given a reference and an XML stream. More... | |
virtual bool | empty (void) const =0 |
Is the container empty of records. | |
virtual void | clear (void)=0 |
Release any (local) resources. | |
virtual void | saveXml (ostream &s) const =0 |
Save all records in this container to an XML stream. More... | |
virtual void | restoreXml (const Element *el, TypeFactory &typegrp)=0 |
Restore constant pool records from an XML stream. More... | |
Private Member Functions | |
virtual CPoolRecord * | createRecord (const vector< uintb > &refs)=0 |
Allocate a new CPoolRecord object, given a reference to it. More... | |
An interface to the pool of constant objects for byte-code languages.
This is an abstract base class that acts as a container for CPoolRecords. A reference (1 or more integer constants) maps to an individual CPoolRecord. A CPoolRecord object can be queried for using getRecord(), and a new object can be added with putRecord(). Internally, the actual CPoolRecord object is produced by createRecord().
|
privatepure virtual |
Allocate a new CPoolRecord object, given a reference to it.
The object will still need to be initialized but is already associated with the reference. Any issue with allocation (like a dupicate reference) causes an exception.
refs | is the reference of 1 or more identifying integers |
Implemented in ConstantPoolInternal, and ConstantPoolGhidra.
|
pure virtual |
Retrieve a constant pool record (CPoolRecord) given a reference to it.
refs | is the reference (made up of 1 or more identifying integers) |
Implemented in ConstantPoolInternal, and ConstantPoolGhidra.
Referenced by RuleTransformCpool::applyOp(), TypeOpCpoolref::getOutputLocal(), PrintJava::opCpoolRefOp(), PrintC::opCpoolRefOp(), and TypeOpCpoolref::printRaw().
void ConstantPool::putRecord | ( | const vector< uintb > & | refs, |
uint4 | tag, | ||
const string & | tok, | ||
Datatype * | ct | ||
) |
A a new constant pool record to this database.
Given the basic constituents of the record, type, name, and data-type, create a new CPoolRecord object and associate it with the given reference.
refs | is the reference (made up of 1 or more identifying integers) |
tag | is the type of record to create |
tok | is the name associated with the object |
ct | is the data-type associated with the object |
References CPoolRecord::tag, CPoolRecord::token, and CPoolRecord::type.
|
pure virtual |
Restore constant pool records from an XML stream.
(If supported) The container is populated with CPooLRecords initialized from a <constantpool> XML tag.
el | is the XML element |
typegrp | is the TypeFactory used to resolve data-type references in the XML |
Implemented in ConstantPoolInternal, and ConstantPoolGhidra.
const CPoolRecord * ConstantPool::restoreXmlRecord | ( | const vector< uintb > & | refs, |
const Element * | el, | ||
TypeFactory & | typegrp | ||
) |
Restore a CPoolRecord given a reference and an XML stream.
A <cpoolrec> element initializes the new record which is immediately associated with the reference.
refs | is the reference (made up of 1 or more identifying integers) |
el | is the XML element |
typegrp | is the TypeFactory used to resolve data-type references in XML |
References CPoolRecord::restoreXml().
Referenced by ConstantPoolGhidra::getRecord().
|
pure virtual |
Save all records in this container to an XML stream.
(If supported) An <constantpool> element is written containing <cpoolrec> child elements for each CPoolRecord in the container.
s | is the output stream |
Implemented in ConstantPoolInternal, and ConstantPoolGhidra.