Ghidra Decompiler Analysis Engine
|
Go to the documentation of this file.
186 virtual void printUnicode(ostream &s,int4 onechar)
const;
200 void setNULLPrinting(
bool val) {
option_NULL = val; }
bool option_inplace_ops
Set to true if we should use '+=' '&=' etc.
Definition: printc.hh:117
void emitForLoop(const BlockWhileDo *bl)
Emit block as a for loop.
Definition: printc.cc:2640
virtual void opFloatLess(const PcodeOp *op)
Emit a FLOAT_LESS operator.
Definition: printc.hh:272
virtual void opIntScarry(const PcodeOp *op)
Emit a INT_SCARRY operator.
Definition: printc.hh:251
virtual string genericFunctionName(const Address &addr)
Create a generic function name base on the entry point address.
Definition: printc.cc:3058
void emitCommentFuncHeader(const Funcdata *fd)
Emit comments in the given function's header.
Definition: printc.cc:2970
static OpToken type_expr_nospace
Type declaration with no space.
Definition: printc.hh:112
void emitPrototypeOutput(const FuncProto *proto, const Funcdata *fd)
Emit the output data-type of a function prototype.
Definition: printc.cc:1900
The base class API for emitting a high-level language.
Definition: printlanguage.hh:134
virtual void opPiece(const PcodeOp *op)
Emit a PIECE operator.
Definition: printc.hh:290
void pushPrototypeInputs(const FuncProto *proto)
Push input parameters.
Definition: printc.cc:141
A control-flow block built out of sub-components.
Definition: block.hh:271
virtual void emitBlockGoto(const BlockGoto *bl)
Emit a block ending with a goto statement.
Definition: printc.cc:2469
virtual void opIntNotEqual(const PcodeOp *op)
Emit a INT_NOTEQUAL operator.
Definition: printc.hh:241
virtual void opReturn(const PcodeOp *op)
Emit a RETURN operator.
Definition: printc.cc:643
static OpToken dereference
The pointer dereference operator.
Definition: printc.hh:76
void emitLocalVarDecls(const Funcdata *fd)
Emit variable declarations for a function.
Definition: printc.cc:1966
Datatype object representing a pointer.
Definition: type.hh:228
virtual void emitFunctionDeclaration(const Funcdata *fd)
Emit a function declaration.
Definition: printc.cc:2273
Description of a control-flow block containing PcodeOps.
Definition: block.hh:60
static OpToken unary_minus
The unary minus operator.
Definition: printc.hh:73
static OpToken less_than
The less than operator.
Definition: printc.hh:86
static OpToken array_expr
Array adornment for a type declaration.
Definition: printc.hh:114
static OpToken addressof
The address of operator.
Definition: printc.hh:75
virtual void opFloatRound(const PcodeOp *op)
Emit a FLOAT_ROUND operator.
Definition: printc.hh:287
void buildTypeStack(const Datatype *ct, vector< const Datatype * > &typestack)
Prepare to push components of a data-type declaration.
Definition: printc.cc:115
const Datatype * parent
The parent data-type owning the field.
Definition: printc.hh:48
virtual void opFloatNan(const PcodeOp *op)
Emit a FLOAT_NAN operator.
Definition: printc.hh:274
virtual void opBranch(const PcodeOp *op)
Emit a BRANCH operator.
Definition: printc.cc:435
virtual void emitBlockWhileDo(const BlockWhileDo *bl)
Emit a loop structure, check at top.
Definition: printc.cc:2688
virtual void opCbranch(const PcodeOp *op)
Definition: printc.cc:451
void emitPrototypeInputs(const FuncProto *proto)
Emit the input data-types of a function prototype.
Definition: printc.cc:1928
const OpToken * token
Operator used to drill-down to the field.
Definition: printc.hh:46
bool option_hide_exts
Set to true if we should hide implied extension operations.
Definition: printc.hh:121
static OpToken modulo
The modulo operator.
Definition: printc.hh:80
virtual void opIntSext(const PcodeOp *op, const PcodeOp *readOp)
Emit a INT_SEXT operator.
Definition: printc.cc:688
static OpToken typecast
The type cast operator.
Definition: printc.hh:77
virtual void opIntXor(const PcodeOp *op)
Emit a INT_XOR operator.
Definition: printc.hh:255
virtual void opFloatSub(const PcodeOp *op)
Emit a FLOAT_SUB operator.
Definition: printc.hh:278
void emitStructDefinition(const TypeStruct *ct)
Emit the definition of a structure data-type.
Definition: printc.cc:1817
A loop structure where the condition is checked at the bottom.
Definition: block.hh:618
void emitSwitchCase(int4 casenum, const BlockSwitch *switchbl)
Emit labels for a case block.
Definition: printc.cc:2830
A map from values to control-flow targets within a function.
Definition: jumptable.hh:499
syntax_highlight
Possible types of syntax highlighting.
Definition: prettyprint.hh:88
virtual void opIntLeft(const PcodeOp *op)
Emit a INT_LEFT operator.
Definition: printc.hh:258
virtual void opIntSright(const PcodeOp *op)
Emit a INT_SRIGHT operator.
Definition: printc.hh:260
static OpToken binary_minus
The binary subtraction operator.
Definition: printc.hh:82
void emitAnyLabelStatement(const FlowBlock *bl)
Emit any required label statement for a given control-flow block.
Definition: printc.cc:2917
void opUnary(const OpToken *tok, const PcodeOp *op)
Push a unary operator onto the RPN stack.
Definition: printlanguage.cc:563
bool option_NULL
Set to true if we should emit NULL keyword.
Definition: printc.hh:116
static OpToken equal
The equal operator.
Definition: printc.hh:90
virtual void opIntDiv(const PcodeOp *op)
Emit a INT_DIV operator.
Definition: printc.hh:262
virtual void opSubpiece(const PcodeOp *op)
Emit a SUBPIECE operator.
Definition: printc.cc:719
virtual void opIntNegate(const PcodeOp *op)
Emit a INT_NEGATE operator.
Definition: printc.hh:254
virtual void opPtrsub(const PcodeOp *op)
Definition: printc.cc:779
virtual void emitBlockBasic(const BlockBasic *bb)
Emit statements in a basic block.
Definition: printc.cc:2381
virtual void opIntRight(const PcodeOp *op)
Emit a INT_RIGHT operator.
Definition: printc.hh:259
static OpToken greater_than
The greater than operator.
Definition: printc.hh:88
virtual void emitExpression(const PcodeOp *op)
Emit a full expression.
Definition: printc.cc:2164
virtual void opIntSub(const PcodeOp *op)
Emit a INT_SUB operator.
Definition: printc.hh:249
virtual void docTypeDefinitions(const TypeFactory *typegrp)
Emit definitions of data-types.
Definition: printc.cc:2097
virtual void push_float(uintb val, int4 sz, const Varnode *vn, const PcodeOp *op)
Push a constant with a floating-point data-type to the RPN stack.
Definition: printc.cc:1177
Base type for character data-types: i.e. char.
Definition: type.hh:183
Factory and static initializer for the "c-language" back-end to the decompiler.
Definition: printc.hh:32
virtual void opMultiequal(const PcodeOp *op)
Emit a MULTIEQUAL operator.
Definition: printc.hh:288
const TypeField * field
The component object describing the field.
Definition: printc.hh:47
virtual void opIntSless(const PcodeOp *op)
Emit a INT_SLESS operator.
Definition: printc.hh:242
virtual void opConstructor(const PcodeOp *op, bool withNew)
Emit an operator constructing an object.
Definition: printc.cc:606
virtual void opFloatCeil(const PcodeOp *op)
Emit a FLOAT_CEIL operator.
Definition: printc.hh:285
static OpToken enum_cat
The concatenation operator for enumerated values.
Definition: printc.hh:115
static OpToken multiply
The multiplication operator.
Definition: printc.hh:78
bool option_convention
Set to true if we should print calling convention.
Definition: printc.hh:118
A collection of Symbol objects within a single (namespace or functional) scope.
Definition: database.hh:402
virtual void opFloatInt2Float(const PcodeOp *op)
Emit a FLOAT_INT2FLOAT operator.
Definition: printc.hh:282
bool option_unplaced
Set to true if we should display unplaced comments.
Definition: printc.hh:120
A composite Datatype object: A "structure" with component "fields".
Definition: type.hh:310
static OpToken bitwise_not
The bitwise negate operator.
Definition: printc.hh:71
virtual bool pushEquate(uintb val, int4 sz, const EquateSymbol *sym, const Varnode *vn, const PcodeOp *op)
Push a constant marked up by and EquateSymbol onto the RPN stack.
Definition: printc.cc:1575
static OpToken less_equal
The less than or equal operator.
Definition: printc.hh:87
virtual void opFloatLessEqual(const PcodeOp *op)
Emit a FLOAT_LESSEQUAL operator.
Definition: printc.hh:273
static OpToken orequal
The in-place logical or operator.
Definition: printc.hh:109
static OpToken boolean_not
The boolean not operator.
Definition: printc.hh:72
virtual void docSingleGlobal(const Symbol *sym)
Emit the declaration for a single (global) Symbol.
Definition: printc.cc:2329
virtual void opIntAnd(const PcodeOp *op)
Emit a INT_AND operator.
Definition: printc.hh:256
virtual void opBoolOr(const PcodeOp *op)
Emit a BOOL_OR operator.
Definition: printc.hh:269
virtual void opIntEqual(const PcodeOp *op)
Emit a INT_EQUAL operator.
Definition: printc.hh:240
virtual void pushTypeEnd(const Datatype *ct)
Push the tail ends of a data-type declaration onto the RPN stack.
Definition: printc.cc:285
virtual void pushTypeStart(const Datatype *ct, bool noident)
Push part of a data-type declaration onto the RPN stack, up to the identifier.
Definition: printc.cc:236
static OpToken bitwise_and
The logical and operator.
Definition: printc.hh:92
A basic block for p-code operations.
Definition: block.hh:365
virtual void opSegmentOp(const PcodeOp *op)
Definition: printc.cc:947
virtual void emitBlockLs(const BlockList *bl)
Emit a sequence of blocks.
Definition: printc.cc:2484
virtual void opFloatNeg(const PcodeOp *op)
Emit a FLOAT_NEG operator.
Definition: printc.hh:279
virtual bool pushPtrCharConstant(uintb val, const TypePointer *ct, const Varnode *vn, const PcodeOp *op)
Attempt to push a quoted string representing a given constant pointer onto the RPN stack.
Definition: printc.cc:1464
Lowest level operation of the p-code language.
Definition: op.hh:58
virtual void emitTypeDefinition(const Datatype *ct)
Emit the definition of the given data-type.
Definition: printc.cc:2065
Manager for all the major decompiler subsystems.
Definition: architecture.hh:119
static OpToken shift_right
The right shift operator.
Definition: printc.hh:84
virtual bool doEmitWideCharPrefix(void) const
Return true if this language requires a prefix when expressing wide characters.
Definition: printc.cc:1319
static OpToken boolean_or
The boolean or operator.
Definition: printc.hh:96
virtual void emitBlockSwitch(const BlockSwitch *bl)
Emit a switch structure.
Definition: printc.cc:3011
virtual void emitBlockCopy(const BlockCopy *bl)
Emit a basic block (with any labels)
Definition: printc.cc:2462
virtual void opIntCarry(const PcodeOp *op)
Emit a INT_CARRY operator.
Definition: printc.hh:250
int4 getHiddenThisSlot(const PcodeOp *op, FuncProto *fc)
Get position of "this" pointer needing to be hidden.
Definition: printc.cc:1361
static OpToken unary_plus
The unary plus operator.
Definition: printc.hh:74
virtual void opExtractOp(const PcodeOp *op)
Emit an EXTRACT operator.
Definition: printc.cc:1067
virtual void docAllGlobals(void)
Emit declarations of global variables.
Definition: printc.cc:2319
virtual void emitBlockInfLoop(const BlockInfLoop *bl)
Emit an infinite loop structure.
Definition: printc.cc:2794
virtual void opInt2Comp(const PcodeOp *op)
Emit a INT_2COMP operator.
Definition: printc.hh:253
An enumerated Datatype object: an integer with named values.
Definition: type.hh:286
virtual bool emitScopeVarDecls(const Scope *scope, int4 cat)
Emit all the variable declarations for a given scope.
Definition: printc.cc:2214
static OpToken minusequal
The in-place subtraction operator.
Definition: printc.hh:105
void emitSymbolScope(const Symbol *symbol)
Emit tokens resolving a symbol's scope.
Definition: printc.cc:205
virtual void opIntSborrow(const PcodeOp *op)
Emit a INT_SBORROW operator.
Definition: printc.hh:252
static OpToken assignment
The assignment operator.
Definition: printc.hh:98
void pushSymbolScope(const Symbol *symbol)
Push tokens resolving a symbol's scope.
Definition: printc.cc:174
An infinite loop structure.
Definition: block.hh:632
void pushBoolConstant(uintb val, const TypeBase *ct, const Varnode *vn, const PcodeOp *op)
Push a true or false token to the RPN stack.
Definition: printc.cc:1302
static OpToken xorequal
The in-place logical xor operator.
Definition: printc.hh:110
A low-level variable or contiguous set of bytes described by an Address and a size.
Definition: varnode.hh:65
virtual void opCallind(const PcodeOp *op)
Emit a CALLIND operator.
Definition: printc.cc:552
static OpToken rightequal
The in-place right shift operator.
Definition: printc.hh:107
bool option_nocasts
Don't print a cast if true.
Definition: printc.hh:119
virtual void opFloatAdd(const PcodeOp *op)
Emit a FLOAT_ADD operator.
Definition: printc.hh:275
virtual void opIntMult(const PcodeOp *op)
Emit a INT_MULT operator.
Definition: printc.hh:261
Base class for the fundamental atomic types.
Definition: type.hh:167
A block that terminates with an unstructured (goto) branch to another block.
Definition: block.hh:444
virtual void pushSymbol(const Symbol *sym, const Varnode *vn, const PcodeOp *op)
Push a specific Symbol onto the RPN stack.
Definition: printc.cc:1670
virtual void pushType(const Datatype *ct)
Push a data-type name onto the RPN expression stack.
Definition: printc.cc:1287
void emitGlobalVarDeclsRecursive(Scope *scope)
Emit variable declarations for all global symbols under given scope.
Definition: printc.cc:2306
static OpToken divequal
The in-place division operator.
Definition: printc.hh:102
virtual void opCall(const PcodeOp *op)
Emit a CALL operator.
Definition: printc.cc:508
void opTypeCast(const PcodeOp *op)
Push the given p-code op using type-cast syntax to the RPN stack.
Definition: printc.cc:371
PrintC(Architecture *g, const string &nm="c-language")
Constructor.
Definition: printc.cc:95
virtual void resetDefaults(void)
Set printing options to their default value.
Definition: printc.cc:2031
virtual void opCpoolRefOp(const PcodeOp *op)
Emit a CPOOLREF operator.
Definition: printc.cc:953
void opBinary(const OpToken *tok, const PcodeOp *op)
Push a binary operator onto the RPN stack.
Definition: printlanguage.cc:543
Specifies subfields of a structure or what a pointer points to.
Definition: type.hh:133
virtual void opFloatTrunc(const PcodeOp *op)
Emit a FLOAT_TRUNC operator.
Definition: printc.hh:284
static OpToken not_equal
The not equal operator.
Definition: printc.hh:91
virtual void opIndirect(const PcodeOp *op)
Emit a INDIRECT operator.
Definition: printc.hh:289
virtual void opBoolXor(const PcodeOp *op)
Emit a BOOL_XOR operator.
Definition: printc.hh:267
A Symbol that holds equate information for a constant.
Definition: database.hh:270
static OpToken shift_left
The left shift operator.
Definition: printc.hh:83
A low-level machine address for labelling bytes and data.
Definition: address.hh:46
virtual void emitBlockGraph(const BlockGraph *bl)
Emit (an unspecified) list of blocks.
Definition: printc.cc:2449
void resetDefaultsPrintC(void)
Set default values for options specific to PrintC.
Definition: printc.cc:1380
virtual bool checkPrintNegation(const Varnode *vn)
Check whether a given boolean Varnode can be printed in negated form.
Definition: printc.cc:2084
void pushCharConstant(uintb val, const TypeChar *ct, const Varnode *vn, const PcodeOp *op)
Push a single character constant to the RPN stack.
Definition: printc.cc:1400
static OpToken leftequal
The in-place left shift operator.
Definition: printc.hh:106
virtual void opFloatSqrt(const PcodeOp *op)
Emit a FLOAT_SQRT operator.
Definition: printc.hh:281
Container for data structures associated with a single function.
Definition: funcdata.hh:45
The base datatype class for the decompiler.
Definition: type.hh:62
A series of blocks that execute in sequence.
Definition: block.hh:497
virtual PrintLanguage * buildLanguage(Architecture *glb)
Build the main PrintLanguage object corresponding to this capability.
Definition: printc.cc:87
void emitGotoStatement(const FlowBlock *bl, const FlowBlock *exp_bl, uint4 type)
Emit a statement representing an unstructured branch.
Definition: printc.cc:2009
Container class for all Datatype objects in an Architecture.
Definition: type.hh:396
static OpToken scope
The sub-scope/namespace operator.
Definition: printc.hh:66
virtual void emitBlockDoWhile(const BlockDoWhile *bl)
Emit a loop structure, check at bottom.
Definition: printc.cc:2761
void emitLabelStatement(const FlowBlock *bl)
Emit any required label statement for a given basic block.
Definition: printc.cc:2896
static OpToken greater_equal
The greater than or equal operator.
Definition: printc.hh:89
static OpToken andequal
The in-place logical and operator.
Definition: printc.hh:108
virtual void emitVarDeclStatement(const Symbol *sym)
Emit a variable declaration statement.
Definition: printc.cc:2206
void emitEnumDefinition(const TypeEnum *ct)
Emit the definition of an enumeration data-type.
Definition: printc.cc:1854
void emitCommentGroup(const PcodeOp *inst)
Emit comments associated with a given statement.
Definition: printc.cc:2929
virtual void pushConstant(uintb val, const Datatype *ct, const Varnode *vn, const PcodeOp *op)
Push a constant onto the RPN stack.
Definition: printc.cc:1508
string fieldname
The name of the field.
Definition: printc.hh:49
virtual void opPtradd(const PcodeOp *op)
Emit a PTRADD operator.
Definition: printc.cc:730
virtual void adjustTypeOperators(void)
Set basic data-type information for p-code operators.
Definition: printc.cc:2038
static OpToken function_call
The function call operator.
Definition: printc.hh:70
virtual void opFloatFloor(const PcodeOp *op)
Emit a FLOAT_FLOOR operator.
Definition: printc.hh:286
void emitStatement(const PcodeOp *inst)
Emit a statement in the body of a function.
Definition: printc.cc:1991
virtual string genericTypeName(const Datatype *ct)
Generate a generic name for an unnamed data-type.
Definition: printc.cc:3072
void pushEnumConstant(uintb val, const TypeEnum *ct, const Varnode *vn, const PcodeOp *op)
Push an enumerated value to the RPN stack.
Definition: printc.cc:1432
A loop structure where the condition is checked at the top.
Definition: block.hh:590
string nullToken
Token to use for 'null'.
Definition: printc.hh:122
virtual void push_integer(uintb val, int4 sz, bool sign, const Varnode *vn, const PcodeOp *op)
Push a constant with an integer data-type to the RPN stack.
Definition: printc.cc:1084
virtual void opFloatEqual(const PcodeOp *op)
Emit a FLOAT_EQUAL operator.
Definition: printc.hh:270
virtual void opFloatNotEqual(const PcodeOp *op)
Emit a FLOAT_NOTEQUAL operator.
Definition: printc.hh:271
virtual void opFloatDiv(const PcodeOp *op)
Emit a FLOAT_DIV operator.
Definition: printc.hh:276
virtual void opIntSrem(const PcodeOp *op)
Emit a INT_SREM operator.
Definition: printc.hh:265
A basic "if" block.
Definition: block.hh:555
static OpToken multequal
The in-place multiplication operator.
Definition: printc.hh:101
virtual void opBoolAnd(const PcodeOp *op)
Emit a BOOL_AND operator.
Definition: printc.hh:268
static OpToken plusequal
The in-place addition operator.
Definition: printc.hh:104
Base class for high-level language capabilities.
Definition: printlanguage.hh:39
virtual void opStore(const PcodeOp *op)
Emit a STORE operator.
Definition: printc.cc:415
static OpToken comma
The comma operator (for parameter lists)
Definition: printc.hh:99
void setCommentDelimeter(const string &start, const string &stop, bool usecommentfill)
Establish comment delimiters for the language.
Definition: printlanguage.cc:93
static OpToken new_op
The new operator.
Definition: printc.hh:100
EmitXml::syntax_highlight hilite
Highlight information for the field token.
Definition: printc.hh:50
virtual void emitBlockIf(const BlockIf *bl)
Emit an if/else style construct.
Definition: printc.cc:2575
virtual void pushPartialSymbol(const Symbol *sym, int4 off, int4 sz, const Varnode *vn, const PcodeOp *op, Datatype *outtype)
Push a variable that represents only part of a symbol onto the RPN stack.
Definition: printc.cc:1708
Classes for printing tokens in a high-level language.
bool pushPtrCodeConstant(uintb val, const TypePointer *ct, const Varnode *vn, const PcodeOp *op)
Attempt to push a function name representing a constant pointer onto the RPN stack.
Definition: printc.cc:1493
static OpToken ptr_expr
Pointer adornment for a type declaration.
Definition: printc.hh:113
virtual void opIntSlessEqual(const PcodeOp *op)
Emit a INT_SLESSEQUAL operator.
Definition: printc.hh:243
virtual void docFunction(const Funcdata *fd)
Emit the declaration (and body) of a function.
Definition: printc.cc:2339
virtual void opInsertOp(const PcodeOp *op)
Emit an INSERT operator.
Definition: printc.cc:1061
virtual void opIntSdiv(const PcodeOp *op)
Emit a INT_SDIV operator.
Definition: printc.hh:263
virtual void opBoolNegate(const PcodeOp *op)
Definition: printc.cc:703
virtual void opCallother(const PcodeOp *op)
Emit a CALLOTHER operator.
Definition: printc.cc:588
virtual void opCopy(const PcodeOp *op)
Emit a COPY operator.
Definition: printc.cc:396
static OpToken bitwise_or
The logical or operator.
Definition: printc.hh:94
The c-language token emitter.
Definition: printc.hh:63
virtual void opIntOr(const PcodeOp *op)
Emit a INT_OR operator.
Definition: printc.hh:257
static OpToken divide
The division operator.
Definition: printc.hh:79
bool printCharacterConstant(ostream &s, const Address &addr, Datatype *charType) const
Print a quoted (unicode) string at the given address.
Definition: printc.cc:1333
virtual void opCast(const PcodeOp *op)
Emit a CAST operator.
Definition: printc.hh:292
void emitCommentBlockTree(const FlowBlock *bl)
Emit any comments under the given control-flow subtree.
Definition: printc.cc:2945
virtual void printUnicode(ostream &s, int4 onechar) const
Print a single unicode character as a character constant for the high-level language.
Definition: printc.cc:1234
static OpToken bitwise_xor
The logical xor operator.
Definition: printc.hh:93
virtual void pushAnnotation(const Varnode *vn, const PcodeOp *op)
Push an address which is not in the normal data-flow.
Definition: printc.cc:1618
void emitLabel(const FlowBlock *bl)
Emit a formal label for a given control-flow block.
Definition: printc.cc:2862
static OpToken object_member
The member operator.
Definition: printc.hh:67
A structure for pushing nested fields to the RPN stack.
Definition: printc.hh:45
static OpToken pointer_member
The points to member operator.
Definition: printc.hh:68
virtual void opIntLessEqual(const PcodeOp *op)
Emit a INT_LESSEQUAL operator.
Definition: printc.hh:245
virtual void opIntLess(const PcodeOp *op)
Emit a INT_LESS operator.
Definition: printc.hh:244
CommentSorter commsorter
Container/organizer for comments in the current function.
Definition: printc.hh:123
static OpToken remequal
The in-place modulo operator.
Definition: printc.hh:103
static OpToken binary_plus
The binary addition operator.
Definition: printc.hh:81
Two conditional blocks combined into one conditional using BOOL_AND or BOOL_OR.
Definition: block.hh:518
virtual void opFloatAbs(const PcodeOp *op)
Emit a FLOAT_ABS operator.
Definition: printc.hh:280
static OpToken boolean_and
The boolean and operator.
Definition: printc.hh:95
void opHiddenFunc(const PcodeOp *op)
Push the given p-code op as a hidden token.
Definition: printc.cc:389
A function prototype.
Definition: fspec.hh:1164
bool emitInplaceOp(const PcodeOp *op)
Attempt to emit an expression rooted at an in-place operator.
Definition: printc.cc:2114
static OpToken hidden
Hidden functional (that may force parentheses)
Definition: printc.hh:65
virtual void opPopcountOp(const PcodeOp *op)
Emit a POPCOUNT operator.
Definition: printc.hh:300
virtual void opNewOp(const PcodeOp *op)
Emit a NEW operator.
Definition: printc.cc:1027
virtual void opFloatMult(const PcodeOp *op)
Emit a FLOAT_MULT operator.
Definition: printc.hh:277
virtual void emitBlockCondition(const BlockCondition *bl)
Emit a conditional statement.
Definition: printc.cc:2539
virtual void opFloatFloat2Float(const PcodeOp *op)
Emit a FLOAT_FLOAT2FLOAT operator.
Definition: printc.hh:283
A token representing an operator in the high-level language.
Definition: printlanguage.hh:81
static OpToken shift_sright
The signed right shift operator.
Definition: printc.hh:85
bool checkArrayDeref(const Varnode *vn) const
Determine whether a LOAD/STORE expression requires pointer '*' syntax.
Definition: printc.cc:325
virtual void pushUnnamedLocation(const Address &addr, const Varnode *vn, const PcodeOp *op)
Push an address as a substitute for a Symbol onto the RPN stack.
Definition: printc.cc:1699
virtual void setCommentStyle(const string &nm)
Set the way comments are displayed in decompiler output.
Definition: printc.cc:2046
The base class for a symbol in a symbol table or scope.
Definition: database.hh:152
virtual void emitVarDecl(const Symbol *sym)
Emit a variable declaration.
Definition: printc.cc:2193
virtual void opIntRem(const PcodeOp *op)
Emit a INT_REM operator.
Definition: printc.hh:264
virtual void opBranchind(const PcodeOp *op)
Emit a BRANCHIND operator.
Definition: printc.cc:497
virtual void opIntZext(const PcodeOp *op, const PcodeOp *readOp)
Emit a INT_ZEXT operator.
Definition: printc.cc:675
static OpToken type_expr_space
Type declaration involving a space (identifier or adornment)
Definition: printc.hh:111
virtual void pushMismatchSymbol(const Symbol *sym, int4 off, int4 sz, const Varnode *vn, const PcodeOp *op)
Push an identifier for a variable that mismatches with its Symbol.
Definition: printc.cc:1797
void opFunc(const PcodeOp *op)
Push a functional expression based on the given p-code op to the RPN stack.
Definition: printc.cc:347
A structured switch construction.
Definition: block.hh:649
static OpToken boolean_xor
The boolean xor operator.
Definition: printc.hh:97
This class is used to mirror the BlockBasic objects in the fixed control-flow graph for a function.
Definition: block.hh:419
static OpToken subscript
The array subscript operator.
Definition: printc.hh:69
virtual void opIntAdd(const PcodeOp *op)
Emit a INT_ADD operator.
Definition: printc.hh:248
virtual void opLoad(const PcodeOp *op)
Emit a LOAD operator.
Definition: printc.cc:402