Ghidra Decompiler Analysis Engine
|
Go to the documentation of this file.
19 #ifndef __PRINT_LANGUAGE__
20 #define __PRINT_LANGUAGE__
40 static vector<PrintLanguageCapability *> thelist;
45 const string &getName(
void)
const {
return name; }
239 vector<uint4> modstack;
240 vector<const Scope *> scopestack;
241 vector<ReversePolish> revpol;
242 vector<NodePending> nodepend;
244 int4 line_commentindent;
257 bool isStackEmpty(
void)
const {
return (nodepend.empty()&&revpol.empty()); }
258 bool isModStackEmpty(
void)
const {
return modstack.empty(); }
261 bool isSet(uint4 m)
const {
return ((
mods & m)!=0); }
262 void pushScope(
const Scope *sc) { scopestack.push_back(sc);
curscope = sc; }
264 void pushMod(
void) { modstack.push_back(
mods); }
265 void popMod(
void) {
mods = modstack.back(); modstack.pop_back(); }
266 void setMod(uint4 m) {
mods |= m; }
267 void unsetMod(uint4 m) {
mods &= ~m; }
275 void emitOp(
const ReversePolish &entry);
278 bool escapeCharacterData(ostream &s,
const uint1 *buf,int4 count,int4 charsize,
bool bigend)
const;
282 int4 getPending(
void)
const {
return pending; }
291 virtual void printUnicode(ostream &s,int4 onechar)
const=0;
412 const string &getName(
void)
const {
return name; }
414 ostream *getOutputStream(
void)
const {
return emit->getOutputStream(); }
415 void setOutputStream(ostream *t) {
emit->setOutputStream(t); }
420 bool usecommentfill);
432 virtual void clear(
void);
const Varnode * vn
The implied Varnode.
Definition: printlanguage.hh:187
virtual void opFloatMult(const PcodeOp *op)=0
Emit a FLOAT_MULT operator.
const Datatype * ct
A type associated with the token.
Definition: printlanguage.hh:209
@ only_branch
Print only the branch instruction.
Definition: printlanguage.hh:146
The base class API for emitting a high-level language.
Definition: printlanguage.hh:134
namespace_strategy namespc_strategy
How should namespace tokens be displayed.
Definition: printlanguage.hh:255
virtual ~PrintLanguage(void)
Destructor.
Definition: printlanguage.cc:70
virtual void opIntSrem(const PcodeOp *op)=0
Emit a INT_SREM operator.
virtual void opIntAnd(const PcodeOp *op)=0
Emit a INT_AND operator.
virtual void opIntScarry(const PcodeOp *op)=0
Emit a INT_SCARRY operator.
A control-flow block built out of sub-components.
Definition: block.hh:271
string name
Unique identifier for language capability.
Definition: printlanguage.hh:42
virtual void opFloatAbs(const PcodeOp *op)=0
Emit a FLOAT_ABS operator.
@ typetoken
Emit atom as operator.
Definition: printlanguage.hh:160
OpToken * negate
The token representing the negation of this token.
Definition: printlanguage.hh:99
@ space
No explicitly printed token.
Definition: printlanguage.hh:89
static PrintLanguageCapability * getDefault(void)
Retrieve the default language capability.
Definition: printlanguage.cc:25
virtual void emitBlockCopy(const BlockCopy *bl)=0
Emit a basic block (with any labels)
virtual void opFloatEqual(const PcodeOp *op)=0
Emit a FLOAT_EQUAL operator.
@ no_branch
Do not print branch instruction.
Definition: printlanguage.hh:145
virtual bool emitScopeVarDecls(const Scope *scope, int4 cat)=0
Emit all the variable declarations for a given scope.
virtual void opIntRight(const PcodeOp *op)=0
Emit a INT_RIGHT operator.
virtual void opInt2Comp(const PcodeOp *op)=0
Emit a INT_2COMP operator.
virtual void opIntSub(const PcodeOp *op)=0
Emit a INT_SUB operator.
virtual void emitBlockLs(const BlockList *bl)=0
Emit a sequence of blocks.
@ hide_thisparam
Do not print the 'this' parameter in argument lists.
Definition: printlanguage.hh:152
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl)
Construct a token with no associated data-flow annotations.
Definition: printlanguage.hh:214
virtual void emitLineComment(int4 indent, const Comment *comm)
Emit a comment line.
Definition: printlanguage.cc:586
virtual void opBoolXor(const PcodeOp *op)=0
Emit a BOOL_XOR operator.
virtual void pushSymbol(const Symbol *sym, const Varnode *vn, const PcodeOp *op)=0
Push a specific Symbol onto the RPN stack.
A loop structure where the condition is checked at the bottom.
Definition: block.hh:618
virtual bool checkPrintNegation(const Varnode *vn)=0
Check whether a given boolean Varnode can be printed in negated form.
@ unary_prefix
Unary operator form (printed before its input)
Definition: printlanguage.hh:86
virtual void emitBlockGoto(const BlockGoto *bl)=0
Emit a block ending with a goto statement.
virtual void opCpoolRefOp(const PcodeOp *op)=0
Emit a CPOOLREF operator.
static void formatBinary(ostream &s, uintb val)
Print a number in binary form.
Definition: printlanguage.cc:767
void emitAtom(const Atom &atom)
Send an variable token from the RPN to the emitter.
Definition: printlanguage.cc:380
virtual void setIntegerFormat(const string &nm)
Set the default integer format.
Definition: printlanguage.cc:685
syntax_highlight
Possible types of syntax highlighting.
Definition: prettyprint.hh:88
static bool unicodeNeedsEscape(int4 codepoint)
Determine if the given codepoint needs to be escaped.
Definition: printlanguage.cc:415
@ comma_separate
Statements within condition.
Definition: printlanguage.hh:147
virtual void opFloatDiv(const PcodeOp *op)=0
Emit a FLOAT_DIV operator.
Architecture * glb
The Architecture owning the language emitter.
Definition: printlanguage.hh:248
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl, const Datatype *c)
Construct a token for a data-type name.
Definition: printlanguage.hh:218
void opUnary(const OpToken *tok, const PcodeOp *op)
Push a unary operator onto the RPN stack.
Definition: printlanguage.cc:563
static int4 mostNaturalBase(uintb val)
Determine the most natural base for an integer.
Definition: printlanguage.cc:705
virtual void opFloatNan(const PcodeOp *op)=0
Emit a FLOAT_NAN operator.
void recurse(void)
Emit from the RPN stack as much as possible.
Definition: printlanguage.cc:516
virtual void opIntCarry(const PcodeOp *op)=0
Emit a INT_CARRY operator.
virtual void opPiece(const PcodeOp *op)=0
Emit a PIECE operator.
virtual void opCall(const PcodeOp *op)=0
Emit a CALL operator.
const Funcdata * fd
A function associated with the token.
Definition: printlanguage.hh:208
virtual void opFloatTrunc(const PcodeOp *op)=0
Emit a FLOAT_TRUNC operator.
API and specific strategies for applying type casts.
@ binary
Binary operator form (printed between its inputs)
Definition: printlanguage.hh:85
const char * print
Printing characters for the token.
Definition: printlanguage.hh:92
virtual void opIntSright(const PcodeOp *op)=0
Emit a INT_SRIGHT operator.
bool associative
True if the operator is associative.
Definition: printlanguage.hh:95
virtual void emitBlockIf(const BlockIf *bl)=0
Emit an if/else style construct.
virtual void emitBlockWhileDo(const BlockWhileDo *bl)=0
Emit a loop structure, check at top.
virtual void setCommentStyle(const string &nm)=0
Set the way comments are displayed in decompiler output.
virtual void opInsertOp(const PcodeOp *op)=0
Emit an INSERT operator.
A single non-operator token emitted by the decompiler.
Definition: printlanguage.hh:201
virtual void emitBlockDoWhile(const BlockDoWhile *bl)=0
Emit a loop structure, check at bottom.
virtual void opBranch(const PcodeOp *op)=0
Emit a BRANCH operator.
virtual void opFloatSqrt(const PcodeOp *op)=0
Emit a FLOAT_SQRT operator.
A collection of Symbol objects within a single (namespace or functional) scope.
Definition: database.hh:402
An entry on the reverse polish notation (RPN) stack.
Definition: printlanguage.hh:173
@ blanktoken
For anonymous types.
Definition: printlanguage.hh:162
void resetDefaultsInternal(void)
Reset options to default for PrintLanguage.
Definition: printlanguage.cc:572
bool parentheses(const OpToken *op2)
Determine if the given token should be emitted in its own parenthetic expression.
Definition: printlanguage.cc:274
virtual void opIntRem(const PcodeOp *op)=0
Emit a INT_REM operator.
tokentype type
The basic token type.
Definition: printlanguage.hh:96
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl, const Datatype *c, int4 off)
Construct a token for a field name.
Definition: printlanguage.hh:222
virtual void emitFunctionDeclaration(const Funcdata *fd)=0
Emit a function declaration.
virtual void opConstructor(const PcodeOp *op, bool withNew)=0
Emit an operator constructing an object.
virtual void adjustTypeOperators(void)=0
Set basic data-type information for p-code operators.
virtual void opFloatLessEqual(const PcodeOp *op)=0
Emit a FLOAT_LESSEQUAL operator.
virtual void opBranchind(const PcodeOp *op)=0
Emit a BRANCHIND operator.
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl, const PcodeOp *o)
Construct a token with an associated PcodeOp.
Definition: printlanguage.hh:226
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl, const PcodeOp *o, const Funcdata *f)
Construct a token for a function name.
Definition: printlanguage.hh:234
A basic block for p-code operations.
Definition: block.hh:365
bool isdefault
Set to true to treat this as the default language.
Definition: printlanguage.hh:43
virtual void opNewOp(const PcodeOp *op)=0
Emit a NEW operator.
const PcodeOp * op
A p-code operation associated with the token.
Definition: printlanguage.hh:205
void popScope(void)
Pop to the previous symbol scope.
Definition: printlanguage.cc:108
virtual void opFloatLess(const PcodeOp *op)=0
Emit a FLOAT_LESS operator.
Lowest level operation of the p-code language.
Definition: op.hh:58
virtual void opFloatAdd(const PcodeOp *op)=0
Emit a FLOAT_ADD operator.
Manager for all the major decompiler subsystems.
Definition: architecture.hh:119
tagtype
Possible types of Atom.
Definition: printlanguage.hh:155
virtual void opIntSlessEqual(const PcodeOp *op)=0
Emit a INT_SLESSEQUAL operator.
virtual void opFloatNeg(const PcodeOp *op)=0
Emit a FLOAT_NEG operator.
virtual void opIntOr(const PcodeOp *op)=0
Emit a INT_OR operator.
virtual void setMaxLineSize(int4 mls)
Provide a maximum line size to the pretty printer.
Definition: prettyprint.hh:180
@ postsurround
Function or array operator form.
Definition: printlanguage.hh:87
virtual void opIntLeft(const PcodeOp *op)=0
Emit a INT_LEFT operator.
int4 precedence
Precedence level of this token (higher binds more tightly)
Definition: printlanguage.hh:94
CastStrategy * castStrategy
The strategy for emitting explicit case operations.
Definition: printlanguage.hh:250
A pending data-flow node; waiting to be placed on the reverse polish notation stack.
Definition: printlanguage.hh:186
@ force_scinote
Force scientific notation for floats.
Definition: printlanguage.hh:141
virtual void opExtractOp(const PcodeOp *op)=0
Emit an EXTRACT operator.
virtual void opIntZext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_ZEXT operator.
Infrastructure for discovering code extensions to the decompiler.
@ functoken
Emit atom as function name.
Definition: printlanguage.hh:158
int4 spacing
Spaces to print around operator.
Definition: printlanguage.hh:97
virtual void opFloatNotEqual(const PcodeOp *op)=0
Emit a FLOAT_NOTEQUAL operator.
tokentype
The possible types of operator token.
Definition: printlanguage.hh:84
Atom(const string &nm, tagtype t, EmitXml::syntax_highlight hl, const PcodeOp *o, const Varnode *v)
Construct a token with an associated PcodeOp and Varnode.
Definition: printlanguage.hh:230
void setIndentIncrement(int4 val)
Set the number of characters indented per level of nesting.
Definition: prettyprint.hh:216
An infinite loop structure.
Definition: block.hh:632
@ fieldtoken
Emit atom as structure field.
Definition: printlanguage.hh:161
void pushOp(const OpToken *tok, const PcodeOp *op)
Push an operator token onto the RPN stack.
Definition: printlanguage.cc:124
const Scope * curscope
The current symbol scope.
Definition: printlanguage.hh:249
A low-level variable or contiguous set of bytes described by an Address and a size.
Definition: varnode.hh:65
Routines for emitting high-level (C) language syntax in a well formatted way.
virtual void opStore(const PcodeOp *op)=0
Emit a STORE operator.
@ force_pointer
Force '*' notation for pointers.
Definition: printlanguage.hh:142
const string & name
The actual printed characters of the token.
Definition: printlanguage.hh:202
@ nofallthru
Fall-thru no longer exists.
Definition: printlanguage.hh:150
virtual void opCbranch(const PcodeOp *op)=0
Emit a CBRANCH operator.
virtual void emitExpression(const PcodeOp *op)=0
Emit a full expression.
uint4 instr_comment_type
Type of instruction comments to display.
Definition: printlanguage.hh:253
virtual void pushPartialSymbol(const Symbol *sym, int4 off, int4 sz, const Varnode *vn, const PcodeOp *op, Datatype *outtype)=0
Push a variable that represents only part of a symbol onto the RPN stack.
EmitXml::syntax_highlight highlight
The type of highlighting to use when emitting the token.
Definition: printlanguage.hh:204
virtual void resetDefaults(void)
Set printing options to their default value.
Definition: printlanguage.cc:658
A block that terminates with an unstructured (goto) branch to another block.
Definition: block.hh:444
void emitOp(const ReversePolish &entry)
Send an operator token from the RPN to the emitter.
Definition: printlanguage.cc:333
virtual void opIntSdiv(const PcodeOp *op)=0
Emit a INT_SDIV operator.
virtual void clear(void)
Clear the RPN stack and the low-level emitter.
Definition: printlanguage.cc:665
virtual void emitBlockCondition(const BlockCondition *bl)=0
Emit a conditional statement.
virtual void pushType(const Datatype *ct)=0
Push a data-type name onto the RPN expression stack.
@ optoken
Emit atom as operator.
Definition: printlanguage.hh:159
virtual bool emitsXml(void) const
Determine if this is an XML markup emitter.
Definition: prettyprint.hh:198
A strategy for applying type casts.
Definition: cast.hh:40
virtual void opCopy(const PcodeOp *op)=0
Emit a COPY operator.
@ force_hex
Force printing of hex.
Definition: printlanguage.hh:138
void opBinary(const OpToken *tok, const PcodeOp *op)
Push a binary operator onto the RPN stack.
Definition: printlanguage.cc:543
uint4 head_comment_type
Type of header comments to display.
Definition: printlanguage.hh:254
virtual void emitBlockGraph(const BlockGraph *bl)=0
Emit (an unspecified) list of blocks.
virtual void docSingleGlobal(const Symbol *sym)=0
Emit the declaration for a single (global) Symbol.
namespace_strategy
Strategies for displaying namespace tokens.
Definition: printlanguage.hh:166
A Symbol that holds equate information for a constant.
Definition: database.hh:270
@ force_dec
Force printing of dec.
Definition: printlanguage.hh:139
virtual void opCast(const PcodeOp *op)=0
Emit a CAST operator.
virtual void pushUnnamedLocation(const Address &addr, const Varnode *vn, const PcodeOp *op)=0
Push an address as a substitute for a Symbol onto the RPN stack.
A low-level machine address for labelling bytes and data.
Definition: address.hh:46
virtual void opSubpiece(const PcodeOp *op)=0
Emit a SUBPIECE operator.
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
void pushVnImplied(const Varnode *vn, const PcodeOp *op, uint4 m)
Push an implied variable onto the RPN stack.
Definition: printlanguage.cc:192
virtual void emitVarDecl(const Symbol *sym)=0
Emit a variable declaration.
virtual void emitVarDeclStatement(const Symbol *sym)=0
Emit a variable declaration statement.
void pushAtom(const Atom &atom)
Push a variable token onto the RPN stack.
Definition: printlanguage.cc:157
Container class for all Datatype objects in an Architecture.
Definition: type.hh:396
NodePending(const Varnode *v, const PcodeOp *o, uint4 m)
Construct a pending data-flow node.
Definition: printlanguage.hh:192
virtual void opReturn(const PcodeOp *op)=0
Emit a RETURN operator.
@ syntax
Emit atom as syntax.
Definition: printlanguage.hh:156
int4 stage
Additional elements consumed from the RPN stack when emitting this token.
Definition: printlanguage.hh:93
virtual void opFloatFloat2Float(const PcodeOp *op)=0
Emit a FLOAT_FLOAT2FLOAT operator.
Class for automatically registering extension points to the decompiler.
Definition: capability.hh:36
virtual void pushAnnotation(const Varnode *vn, const PcodeOp *op)=0
Push an address which is not in the normal data-flow.
virtual void docAllGlobals(void)=0
Emit declarations of global variables.
virtual void opFloatRound(const PcodeOp *op)=0
Emit a FLOAT_ROUND operator.
virtual void opIntLess(const PcodeOp *op)=0
Emit a INT_LESS operator.
int4 offset
The offset (within the parent structure) for a field token.
Definition: printlanguage.hh:211
const PcodeOp * op
The PcodeOp associated with the operator token.
Definition: printlanguage.hh:177
virtual void pushMismatchSymbol(const Symbol *sym, int4 off, int4 sz, const Varnode *vn, const PcodeOp *op)=0
Push an identifier for a variable that mismatches with its Symbol.
@ negatetoken
Print the token representing the negation of current token.
Definition: printlanguage.hh:151
int4 id2
The id of the token group this surrounds (for surround operator tokens)
Definition: printlanguage.hh:179
A loop structure where the condition is checked at the top.
Definition: block.hh:590
virtual void opFloatFloor(const PcodeOp *op)=0
Emit a FLOAT_FLOOR operator.
virtual bool pushEquate(uintb val, int4 sz, const EquateSymbol *sym, const Varnode *vn, const PcodeOp *op)=0
Push a constant marked up by and EquateSymbol onto the RPN stack.
tagtype type
The type of Atom.
Definition: printlanguage.hh:203
virtual void opPtradd(const PcodeOp *op)=0
Emit a PTRADD operator.
virtual void opLoad(const PcodeOp *op)=0
Emit a LOAD operator.
virtual void opPopcountOp(const PcodeOp *op)=0
Emit a POPCOUNT operator.
union PrintLanguage::Atom::@34 ptr_second
Other meta-data associated with the token.
Base class (and interface) for pretty printing and XML markup of tokens.
Definition: prettyprint.hh:76
virtual void opIntMult(const PcodeOp *op)=0
Emit a INT_MULT operator.
A basic "if" block.
Definition: block.hh:555
virtual void opMultiequal(const PcodeOp *op)=0
Emit a MULTIEQUAL operator.
virtual void opIntSless(const PcodeOp *op)=0
Emit a INT_SLESS operator.
virtual void emitBlockSwitch(const BlockSwitch *bl)=0
Emit a switch structure.
virtual PrintLanguage * buildLanguage(Architecture *glb)=0
Build the main PrintLanguage object corresponding to this capability.
virtual void opIntAdd(const PcodeOp *op)=0
Emit a INT_ADD operator.
virtual void opFloatCeil(const PcodeOp *op)=0
Emit a FLOAT_CEIL operator.
Base class for high-level language capabilities.
Definition: printlanguage.hh:39
virtual void opIntXor(const PcodeOp *op)=0
Emit a INT_XOR operator.
@ falsebranch
Print the false branch (for flat)
Definition: printlanguage.hh:149
void setCommentDelimeter(const string &start, const string &stop, bool usecommentfill)
Establish comment delimiters for the language.
Definition: printlanguage.cc:93
virtual void opIntNotEqual(const PcodeOp *op)=0
Emit a INT_NOTEQUAL operator.
virtual void opPtrsub(const PcodeOp *op)=0
Emit a PTRSUB operator.
bool paren
True if parentheses are required.
Definition: printlanguage.hh:176
virtual void opIntNegate(const PcodeOp *op)=0
Emit a INT_NEGATE operator.
@ flat
Do not print block structure.
Definition: printlanguage.hh:148
virtual void opIndirect(const PcodeOp *op)=0
Emit a INDIRECT operator.
virtual void opFloatSub(const PcodeOp *op)=0
Emit a FLOAT_SUB operator.
modifiers
Possible context sensitive modifiers to how tokens get emitted.
Definition: printlanguage.hh:137
virtual void emitBlockBasic(const BlockBasic *bb)=0
Emit statements in a basic block.
@ bestfit
Decide on most aesthetic form.
Definition: printlanguage.hh:140
virtual void docFunction(const Funcdata *fd)=0
Emit the declaration (and body) of a function.
@ vartoken
Emit atom as variable.
Definition: printlanguage.hh:157
void setFlat(bool val)
Set whether nesting code structure should be emitted.
Definition: printlanguage.cc:649
int4 id
The id of the token group which this belongs to.
Definition: printlanguage.hh:178
virtual void emitBlockInfLoop(const BlockInfLoop *bl)=0
Emit an infinite loop structure.
virtual void docTypeDefinitions(const TypeFactory *typegrp)=0
Emit definitions of data-types.
PrintLanguage(Architecture *g, const string &nm)
Constructor.
Definition: printlanguage.cc:57
virtual void pushConstant(uintb val, const Datatype *ct, const Varnode *vn, const PcodeOp *op)=0
Push a constant onto the RPN stack.
virtual void printUnicode(ostream &s, int4 onechar) const =0
Print a single unicode character as a character constant for the high-level language.
uint4 vnmod
Printing modifications to enforce on the expression.
Definition: printlanguage.hh:189
const PcodeOp * op
The single operator consuming value from the implied Varnode.
Definition: printlanguage.hh:188
void setLineCommentIndent(int4 val)
Set the number of characters to indent comment lines.
Definition: printlanguage.cc:79
virtual void opIntSext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_SEXT operator.
void setXML(bool val)
Set whether the low-level emitter, emits XML markup.
Definition: printlanguage.cc:640
virtual void opIntEqual(const PcodeOp *op)=0
Emit a INT_EQUAL operator.
@ MINIMAL_NAMESPACES
(default) Print just enough namespace info to fully resolve symbol
Definition: printlanguage.hh:167
static PrintLanguageCapability * findCapability(const string &name)
Find a language capability by name.
Definition: printlanguage.cc:44
virtual void opSegmentOp(const PcodeOp *op)=0
Emit a SEGMENTOP operator.
virtual void opBoolAnd(const PcodeOp *op)=0
Emit a BOOL_AND operator.
virtual void opIntSborrow(const PcodeOp *op)=0
Emit a INT_SBORROW operator.
void pushVnExplicit(const Varnode *vn, const PcodeOp *op)
Push an explicit variable onto the RPN stack.
Definition: printlanguage.cc:213
virtual void initialize(void)
Complete initialization of an extension point.
Definition: printlanguage.cc:33
virtual void opIntDiv(const PcodeOp *op)=0
Emit a INT_DIV operator.
Two conditional blocks combined into one conditional using BOOL_AND or BOOL_OR.
Definition: block.hh:518
@ ALL_NAMESPACES
Always print all namespace information.
Definition: printlanguage.hh:169
const Varnode * vn
A Varnode associated with the token.
Definition: printlanguage.hh:207
virtual void opCallother(const PcodeOp *op)=0
Emit a CALLOTHER operator.
@ presurround
Modifier form (like a cast operation)
Definition: printlanguage.hh:88
A token representing an operator in the high-level language.
Definition: printlanguage.hh:81
void pushVnLHS(const Varnode *vn, const PcodeOp *op)
Push a variable as the left-hand side of an expression.
Definition: printlanguage.cc:248
The base class for a symbol in a symbol table or scope.
Definition: database.hh:152
virtual void opIntLessEqual(const PcodeOp *op)=0
Emit a INT_LESSEQUAL operator.
@ print_load_value
Hide pointer deref for load with other ops.
Definition: printlanguage.hh:143
virtual void opFloatInt2Float(const PcodeOp *op)=0
Emit a FLOAT_INT2FLOAT operator.
@ NO_NAMESPACES
Never print namespace information.
Definition: printlanguage.hh:168
int4 visited
The current stage of printing for the operator.
Definition: printlanguage.hh:175
@ print_store_value
Hide pointer deref for store with other ops.
Definition: printlanguage.hh:144
int4 bump
Spaces to indent if we break here.
Definition: printlanguage.hh:98
bool escapeCharacterData(ostream &s, const uint1 *buf, int4 count, int4 charsize, bool bigend) const
Emit a byte buffer to the stream as unicode characters.
Definition: printlanguage.cc:500
const OpToken * tok
The operator token.
Definition: printlanguage.hh:174
uint4 mods
Currently active printing modifications.
Definition: printlanguage.hh:252
EmitXml * emit
The low-level token emitter.
Definition: printlanguage.hh:251
virtual void opBoolOr(const PcodeOp *op)=0
Emit a BOOL_OR operator.
A structured switch construction.
Definition: block.hh:649
@ hiddenfunction
Operation that isn't explicitly printed.
Definition: printlanguage.hh:90
virtual void opBoolNegate(const PcodeOp *op)=0
Emit a BOOL_NEGATE operator.
virtual void opCallind(const PcodeOp *op)=0
Emit a CALLIND operator.
This class is used to mirror the BlockBasic objects in the fixed control-flow graph for a function.
Definition: block.hh:419