Ghidra Decompiler Analysis Engine
Public Types | Public Member Functions | List of all members
TokenSplit Class Reference

A token/command object in the pretty printing stream. More...

#include <prettyprint.hh>

Collaboration diagram for TokenSplit:
Collaboration graph
[legend]

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

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...
 

Detailed Description

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).

Member Enumeration Documentation

◆ printclass

An enumeration denoting the general class of a token.

Enumerator
begin 

A token that starts a printing group.

end 

A token that ends a printing group.

tokenstring 

A token representing actual content.

tokenbreak 

White space (where line breaks can be inserted)

begin_indent 

Start of a new nesting level.

end_indent 

End of a nesting level.

begin_comment 

Start of a comment block.

end_comment 

End of a comment block.

ignore 

Mark-up that doesn't affect pretty printing.

◆ tag_type

The exhaustive list of possible token types.

Enumerator
docu_b 

Start of a document.

docu_e 

End of a document.

func_b 

Start of a function body.

func_e 

End of a function body.

bloc_b 

Start of a control-flow section.

bloc_e 

End of a control-flow section.

rtyp_b 

Start of a return type declaration.

rtyp_e 

End of a return type declaration.

vard_b 

Start of a variable declaration.

vard_e 

End of a variable declaration.

stat_b 

Start of a statement.

stat_e 

End of a statement.

prot_b 

Start of a function prototype.

prot_e 

End of a function prototype.

vari_t 

A variable identifier.

op_t 

An operator.

fnam_t 

A function identifier.

type_t 

A data-type identifier.

field_t 

A field name for a structured data-type.

comm_t 

Part of a comment block.

label_t 

A code label.

synt_t 

Other unspecified syntax.

opar_t 

Open parenthesis.

cpar_t 

Close parenthesis.

oinv_t 

Start of an arbitrary (invisible) grouping.

cinv_t 

End of an arbitrary (invisible) grouping.

spac_t 

White space.

bump_t 

Required line break.

line_t 

Required line break with one-time indent level.

Member Function Documentation

◆ beginBlock()

int4 TokenSplit::beginBlock ( const FlowBlock b)
inline

Create a "begin control-flow element" command.

Parameters
bis the block structure object associated with the section
Returns
an id associated with the section

◆ beginDocument()

int4 TokenSplit::beginDocument ( void  )
inline

Create a "begin document" command.

Returns
an id associated with the document

◆ beginFuncProto()

int4 TokenSplit::beginFuncProto ( void  )
inline

Create a "begin function prototype declaration" command.

Returns
an id associated with the prototype

◆ beginFunction()

int4 TokenSplit::beginFunction ( const Funcdata f)
inline

Create a "begin function body" command.

Returns
an id associated with the function body

◆ beginReturnType()

int4 TokenSplit::beginReturnType ( const Varnode v)
inline

Create a "begin return type declaration" command.

Parameters
v(if non-null) is the storage location for the return value
Returns
an id associated with the return type

◆ beginStatement()

int4 TokenSplit::beginStatement ( const PcodeOp o)
inline

Create a "begin source code statement" command.

Parameters
ois the root p-code operation of the statement
Returns
an id associated with the statement

◆ beginVarDecl()

int4 TokenSplit::beginVarDecl ( const Symbol sym)
inline

Create a "begin variable declaration" command.

Parameters
symis the symbol being declared
Returns
an id associated with the declaration

◆ closeGroup()

void TokenSplit::closeGroup ( int4  id)
inline

Create an "end a printing group" command.

Parameters
idis the id associated with the group (as returned by openGroup)

◆ closeParen()

void TokenSplit::closeParen ( char  c,
int4  id 
)
inline

Create a close parenthesis.

Parameters
cis the close parenthesis character to emit
idis the id associated with the matching open parenthesis (as returned by openParen)

◆ endBlock()

void TokenSplit::endBlock ( int4  id)
inline

Create an "end control-flow element" command.

Parameters
idis the id associated with the section (as returned by beginBlock)

◆ endDocument()

void TokenSplit::endDocument ( int4  id)
inline

Create an "end document" command.

Parameters
idis the id associated with the document (as returned by beginDocument)

◆ endFuncProto()

void TokenSplit::endFuncProto ( int4  id)
inline

Create an "end function prototype declaration" command.

Parameters
idis the id associated with the prototype (as returned by beginFuncProto)

◆ endFunction()

void TokenSplit::endFunction ( int4  id)
inline

Create an "end function body" command.

Parameters
idis the id associated with the function body (as returned by beginFunction)

◆ endReturnType()

void TokenSplit::endReturnType ( int4  id)
inline

Create an "end return type declaration" command.

Parameters
idis the id associated with the return type (as returned by beginReturnType)

◆ endStatement()

void TokenSplit::endStatement ( int4  id)
inline

Create an "end source code statement" command.

Parameters
idis the id associated with the statement (as returned by beginStatement)

◆ endVarDecl()

void TokenSplit::endVarDecl ( int4  id)
inline

Create an "end variable declaration" command.

Parameters
idis the id associated with the declaration (as returned by beginVarDecl)

◆ openGroup()

int4 TokenSplit::openGroup ( void  )
inline

Create a "start a printing group" command.

Returns
an id associated with the group

◆ openParen()

void TokenSplit::openParen ( char  o,
int4  id 
)
inline

Create an open parenthesis.

Parameters
ois the open parenthesis character to emit
idis an id to associate with the parenthesis

◆ print() [1/2]

void TokenSplit::print ( const char *  str,
EmitXml::syntax_highlight  h 
)
inline

Create a token for other (more unusual) syntax in source code.

Parameters
stris the character data of the syntax being emitted
hindicates how the syntax should be highlighted

◆ print() [2/2]

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.

Parameters
emitis the low-level emitter to output to

◆ spaces()

void TokenSplit::spaces ( int4  num,
int4  bump 
)
inline

Create a whitespace token.

Parameters
numis the number of space characters to emit
bumpis the number of characters to indent if the spaces force a line break

◆ startComment()

int4 TokenSplit::startComment ( void  )
inline

Create a "start a comment block" command.

Returns
an id associated with the comment block

◆ startIndent()

int4 TokenSplit::startIndent ( int4  bump)
inline

Create a "start a new indent level" command.

Parameters
bumpthe number of additional characters to indent
Returns
an id associated with the nesting

◆ stopComment()

void TokenSplit::stopComment ( int4  id)
inline

Create an "end a comment block" command.

Parameters
idis the id associated with the block (as returned by startComment)

◆ stopIndent()

void TokenSplit::stopIndent ( int4  id)
inline

Create an "end an indent level" command.

Parameters
idis the id associated with the nesting (as returned by startIndent)

◆ tagComment()

void TokenSplit::tagComment ( const char *  ptr,
EmitXml::syntax_highlight  h,
const AddrSpace s,
uintb  o 
)
inline

Create a comment string in the generated source code.

Parameters
ptris the character data for the comment
hindicates how the comment should be highlighted
sis the address space of the address where the comment is attached
ois the offset of the address where the comment is attached

◆ tagField()

void TokenSplit::tagField ( const char *  ptr,
EmitXml::syntax_highlight  h,
const Datatype ct,
int4  o 
)
inline

Create an identifier for a field within a structured data-type.

Parameters
ptris the character data for the identifier
hindicates how the identifier should be highlighted
ctis the data-type associated with the field
ois the (byte) offset of the field within its structured data-type

◆ tagFuncName()

void TokenSplit::tagFuncName ( const char *  ptr,
EmitXml::syntax_highlight  h,
const Funcdata f,
const PcodeOp o 
)
inline

Create a function identifier token.

Parameters
ptris the character data for the identifier
hindicates how the identifier should be highlighted
fis the function
ois the CALL operation associated within the syntax tree or null for a declaration

◆ tagLabel()

void TokenSplit::tagLabel ( const char *  ptr,
EmitXml::syntax_highlight  h,
const AddrSpace s,
uintb  o 
)
inline

Create a code label identifier token.

Parameters
ptris the character data of the label
hindicates how the label should be highlighted
sis the address space of the code address being labeled
ois the offset of the code address being labeled

◆ tagOp()

void TokenSplit::tagOp ( const char *  ptr,
EmitXml::syntax_highlight  h,
const PcodeOp o 
)
inline

Create an operator token.

Parameters
ptris the character data for the emitted representation
hindicates how the token should be highlighted
ois the PcodeOp object associated with the operation with the syntax tree

◆ tagType()

void TokenSplit::tagType ( const char *  ptr,
EmitXml::syntax_highlight  h,
const Datatype ct 
)
inline

Create a data-type identifier token.

Parameters
ptris the character data for the identifier
hindicates how the identifier should be highlighted
ctis the data-type description object

◆ tagVariable()

void TokenSplit::tagVariable ( const char *  ptr,
EmitXml::syntax_highlight  h,
const Varnode v,
const PcodeOp o 
)
inline

Create a variable identifier token.

Parameters
ptris the character data for the identifier
hindicates how the identifier should be highlighted
vis the Varnode representing the variable within the syntax tree
ois a p-code operation related to the use of the variable (may be null)

The documentation for this class was generated from the following files: