RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
|
Classes | |
struct | precedence |
Public Types | |
enum | operation_type { End = 0x00 , Addition = 0x01 , Subtraction = 0x02 , Multiplication = 0x03 , Division = 0x04 , IntegerRemainder = 0x05 , Negation = 0x06 , BitShift = 0x07 , And = 0x08 , Or = 0x09 , EOr = 0x0A , Not = 0x0B , LessOrEqualTo = 0x0C , GreaterOrEqualTo = 0x0D , NotEqual = 0x0E , LessThan = 0x0F , GreaterThan = 0x10 , EqualTo = 0x11 , BitAnd = 0x12 , BitOr = 0x13 , BitEOr = 0x14 , BitNot = 0x15 , LocationCounterOperand = 0x80 , ConstantOperand = 0x81 , WeakLabelReferenceOperand = 0x82 , LabelReferenceOperand = 0x83 , LengthOfLabelReferenceOperand = 0x84 , TypeOfLabelReferenceOperand = 0x85 , CountOfLabelReferenceOperand = 0x86 , RelativeOffsetOperand = 0x87 , StackUnderflow = -1 } |
Represents an operation inside an expression in the object file. More... | |
Public Member Functions | |
Expression (int operation) | |
Expression (int operation, std::unique_ptr< Expression > &operand) | |
Expression (int operation, std::unique_ptr< Expression > &operand1, std::unique_ptr< Expression > &operand2) | |
Expression (int operation, offset_t value) | |
Expression (int operation, std::string value) | |
offset_t | GetLength (const Segment &segment) const |
void | ReadFile (Segment &segment, Linker::Reader &rd) |
void | WriteFile (const Segment &segment, Linker::Writer &wr) const |
std::string | GetStandardNotation () const |
Converts expression into a C-like syntax. | |
Public Attributes | |
operation_type | operation = End |
The type of operation, End means that the result is the last operand. | |
std::vector< std::unique_ptr< Expression > > | operands |
The operands the operation takes. | |
std::optional< std::variant< offset_t, std::string > > | value |
A value corresponding to an operation, such as an integer constant or a label name. | |
Protected Types | |
typedef precedence::precedence_type | precedence_type |
Protected Member Functions | |
void | PopElementsInto (size_t count, std::vector< std::unique_ptr< Expression > > &target) |
Removes elements from the top of the operands stack and copies them into target. On stack underflow, the missing elements are replaced with StackUnderflow expressions. | |
uint8_t | ReadSingleOperation (Segment &segment, Linker::Reader &rd) |
Reads a single byte of operation (plus optional number and label) and modifies the current list of operands as an operation acting on a stack. | |
void | GetStandardNotation (std::ostream &out, precedence_type precedence) const |