decompiler
1.0.0
|
A token/command object in the pretty printing stream. More...
#include <prettyprint.hh>
Public Types | |
enum | printclass { begin, end, tokenstring, tokenbreak, begin_indent, end_indent, begin_comment, end_comment, ignore } |
An enumeration denoting the general class of a token. More... | |
enum | tag_type { docu_b, docu_e, func_b, func_e, bloc_b, bloc_e, rtyp_b, rtyp_e, vard_b, vard_e, stat_b, stat_e, prot_b, prot_e, vari_t, op_t, fnam_t, type_t, field_t, comm_t, label_t, synt_t, opar_t, cpar_t, oinv_t, cinv_t, spac_t, bump_t, line_t } |
The exhaustive list of possible token types. More... | |
Public Member Functions | |
TokenSplit (void) | |
Constructor. | |
int4 | beginDocument (void) |
Create a "begin document" command. More... | |
void | endDocument (int4 id) |
Create an "end document" command. More... | |
int4 | beginFunction (const Funcdata *f) |
Create a "begin function body" command. More... | |
void | endFunction (int4 id) |
Create an "end function body" command. More... | |
int4 | beginBlock (const FlowBlock *b) |
Create a "begin control-flow element" command. More... | |
void | endBlock (int4 id) |
Create an "end control-flow element" command. More... | |
int4 | beginReturnType (const Varnode *v) |
Create a "begin return type declaration" command. More... | |
void | endReturnType (int4 id) |
Create an "end return type declaration" command. More... | |
int4 | beginVarDecl (const Symbol *sym) |
Create a "begin variable declaration" command. More... | |
void | endVarDecl (int4 id) |
Create an "end variable declaration" command. More... | |
int4 | beginStatement (const PcodeOp *o) |
Create a "begin source code statement" command. More... | |
void | endStatement (int4 id) |
Create an "end source code statement" command. More... | |
int4 | beginFuncProto (void) |
Create a "begin function prototype declaration" command. More... | |
void | endFuncProto (int4 id) |
Create an "end function prototype declaration" command. More... | |
void | tagVariable (const char *ptr, EmitXml::syntax_highlight h, const Varnode *v, const PcodeOp *o) |
Create a variable identifier token. More... | |
void | tagOp (const char *ptr, EmitXml::syntax_highlight h, const PcodeOp *o) |
Create an operator token. More... | |
void | tagFuncName (const char *ptr, EmitXml::syntax_highlight h, const Funcdata *f, const PcodeOp *o) |
Create a function identifier token. More... | |
void | tagType (const char *ptr, EmitXml::syntax_highlight h, const Datatype *ct) |
Create a data-type identifier token. More... | |
void | tagField (const char *ptr, EmitXml::syntax_highlight h, const Datatype *ct, int4 o) |
Create an identifier for a field within a structured data-type. More... | |
void | tagComment (const char *ptr, EmitXml::syntax_highlight h, const AddrSpace *s, uintb o) |
Create a comment string in the generated source code. More... | |
void | tagLabel (const char *ptr, EmitXml::syntax_highlight h, const AddrSpace *s, uintb o) |
Create a code label identifier token. More... | |
void | print (const char *str, EmitXml::syntax_highlight h) |
Create a token for other (more unusual) syntax in source code. More... | |
void | openParen (char o, int4 id) |
Create an open parenthesis. More... | |
void | closeParen (char c, int4 id) |
Create a close parenthesis. More... | |
int4 | openGroup (void) |
Create a "start a printing group" command. More... | |
void | closeGroup (int4 id) |
Create an "end a printing group" command. More... | |
int4 | startIndent (int4 bump) |
Create a "start a new indent level" command. More... | |
void | stopIndent (int4 id) |
Create an "end an indent level" command. More... | |
int4 | startComment (void) |
Create a "start a comment block" command. More... | |
void | stopComment (int4 id) |
Create an "end a comment block" command. More... | |
void | spaces (int4 num, int4 bump) |
Create a whitespace token. More... | |
void | tagLine (void) |
Create a line break token. | |
void | tagLine (int4 indent) |
Create a line break token with special indentation. | |
void | print (EmitXml *emit) const |
Send this token to emitter. More... | |
int4 | getIndentBump (void) const |
Get the extra indent after a line break. | |
int4 | getNumSpaces (void) const |
Get the number of characters of whitespace. | |
int4 | getSize (void) const |
Get the number of content characters. | |
void | setSize (int4 sz) |
Set the number of content characters. | |
printclass | getClass (void) const |
Get the print class of this. | |
tag_type | getTag (void) const |
Get this tag type. | |
Private Attributes | |
tag_type | tagtype |
Type of token. | |
printclass | delimtype |
The general class of the token. | |
string | tok |
Characters of token (if any) | |
EmitXml::syntax_highlight | hl |
Highlighting for token. | |
const PcodeOp * | op |
Pcode-op associated with this token. | |
union { | |
const Varnode * vn | |
Associated Varnode. | |
const FlowBlock * bl | |
Associated Control-flow. | |
const Funcdata * fd | |
Associated Function. | |
const Datatype * ct | |
Associated Data-type. | |
const AddrSpace * spc | |
Associated Address. | |
const Symbol * symbol | |
Associated Symbol being displayed. | |
} | ptr_second |
Additional markup associated with the token. | |
uintb | off |
Offset associated either with address or field markup. | |
int4 | indentbump |
Amount to indent if a line breaks. | |
int4 | numspaces |
Number of spaces in a whitespace token (tokenbreak) | |
int4 | size |
Number of content characters or other size information. | |
int4 | count |
Associated id (for matching begin/end pairs) | |
Static Private Attributes | |
static int4 | countbase = 0 |
Static counter for uniquely assigning begin/end pair ids. | |
A token/command object in the pretty printing stream.
The pretty printing algorithm (see EmitPrettyPrint) works on the stream of tokens, constituting the content actually being output, plus additional embedded commands made up begin/end or open/close pairs that delimit the (hierarchy of) groups of tokens that should be printed as a unit. Instances of this class represent all the possible elements of this stream.
All instances exhibit a broad printclass that generally reflects whether the token is one of the begin/end delimiters or is actual content. Instances also have a tag_type that indicate the specific function of the token within the stream, which mirror the begin/end/open/close/tag methods on the emitter classes (EmitXml).
An enumeration denoting the general class of a token.
enum TokenSplit::tag_type |
The exhaustive list of possible token types.
|
inline |
Create a "begin control-flow element" command.
b | is the block structure object associated with the section |
References bloc_b, count, countbase, delimtype, ignore, ptr_second, and tagtype.
Referenced by EmitPrettyPrint::beginBlock().
|
inline |
|
inline |
|
inline |
Create a "begin function body" command.
References begin, count, countbase, delimtype, func_b, ptr_second, size, and tagtype.
Referenced by EmitPrettyPrint::beginFunction().
|
inline |
Create a "begin return type declaration" command.
v | (if non-null) is the storage location for the return value |
References begin, count, countbase, delimtype, ptr_second, rtyp_b, and tagtype.
Referenced by EmitPrettyPrint::beginReturnType().
|
inline |
|
inline |
Create a "begin variable declaration" command.
sym | is the symbol being declared |
References begin, count, countbase, delimtype, ptr_second, tagtype, and vard_b.
Referenced by EmitPrettyPrint::beginVarDecl().
|
inline |
|
inline |
Create a close parenthesis.
c | is the close parenthesis character to emit |
id | is the id associated with the matching open parenthesis (as returned by openParen) |
References count, cpar_t, delimtype, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::closeParen().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Create an open parenthesis.
o | is the open parenthesis character to emit |
id | is an id to associate with the parenthesis |
References count, delimtype, opar_t, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::openParen().
|
inline |
Create a token for other (more unusual) syntax in source code.
str | is the character data of the syntax being emitted |
h | indicates how the syntax should be highlighted |
References delimtype, hl, size, synt_t, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::checkbreak(), EmitPrettyPrint::checkend(), and EmitPrettyPrint::print().
void TokenSplit::print | ( | EmitXml * | emit | ) | const |
Send this token to emitter.
Emit markup or content corresponding to this token on a low-level emitter. The API method matching the token type is called, feeding it content contained in the object.
emit | is the low-level emitter to output to |
|
inline |
Create a whitespace token.
num | is the number of space characters to emit |
bump | is the number of characters to indent if the spaces force a line break |
References delimtype, indentbump, numspaces, spac_t, tagtype, and tokenbreak.
Referenced by EmitPrettyPrint::checkstart(), EmitPrettyPrint::checkstring(), and EmitPrettyPrint::spaces().
|
inline |
Create a "start a comment block" command.
References begin_comment, count, countbase, delimtype, oinv_t, and tagtype.
Referenced by EmitPrettyPrint::startComment().
|
inline |
Create a "start a new indent level" command.
bump | the number of additional characters to indent |
References begin_indent, bump_t, count, countbase, delimtype, indentbump, size, and tagtype.
Referenced by EmitPrettyPrint::startIndent().
|
inline |
Create an "end a comment block" command.
id | is the id associated with the block (as returned by startComment) |
References cinv_t, count, delimtype, end_comment, and tagtype.
Referenced by EmitPrettyPrint::stopComment().
|
inline |
Create an "end an indent level" command.
id | is the id associated with the nesting (as returned by startIndent) |
References bump_t, count, delimtype, end_indent, size, and tagtype.
Referenced by EmitPrettyPrint::stopIndent().
|
inline |
Create a comment string in the generated source code.
ptr | is the character data for the comment |
h | indicates how the comment should be highlighted |
s | is the address space of the address where the comment is attached |
o | is the offset of the address where the comment is attached |
References comm_t, delimtype, hl, off, ptr_second, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::tagComment().
|
inline |
Create an identifier for a field within a structured data-type.
ptr | is the character data for the identifier |
h | indicates how the identifier should be highlighted |
ct | is the data-type associated with the field |
o | is the (byte) offset of the field within its structured data-type |
References ct, delimtype, field_t, hl, off, ptr_second, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::tagField().
|
inline |
Create a function identifier token.
ptr | is the character data for the identifier |
h | indicates how the identifier should be highlighted |
f | is the function |
o | is the CALL operation associated within the syntax tree or null for a declaration |
References delimtype, fnam_t, hl, op, ptr_second, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::tagFuncName().
|
inline |
Create a code label identifier token.
ptr | is the character data of the label |
h | indicates how the label should be highlighted |
s | is the address space of the code address being labeled |
o | is the offset of the code address being labeled |
References delimtype, hl, label_t, off, ptr_second, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::tagLabel().
|
inline |
Create an operator token.
ptr | is the character data for the emitted representation |
h | indicates how the token should be highlighted |
o | is the PcodeOp object associated with the operation with the syntax tree |
References delimtype, hl, op, op_t, size, tagtype, tok, and tokenstring.
Referenced by EmitPrettyPrint::tagOp().
|
inline |
Create a data-type identifier token.
ptr | is the character data for the identifier |
h | indicates how the identifier should be highlighted |
ct | is the data-type description object |
References ct, delimtype, hl, ptr_second, size, tagtype, tok, tokenstring, and type_t.
Referenced by EmitPrettyPrint::tagType().
|
inline |
Create a variable identifier token.
ptr | is the character data for the identifier |
h | indicates how the identifier should be highlighted |
v | is the Varnode representing the variable within the syntax tree |
o | is a p-code operation related to the use of the variable (may be null) |
References delimtype, hl, op, ptr_second, size, tagtype, tok, tokenstring, and vari_t.
Referenced by EmitPrettyPrint::tagVariable().