retdec
|
A class providing compound semantics from several different semantics. More...
#include <compound_semantics.h>
Public Member Functions | |
void | prependSemantics (ShPtr< Semantics > semantics) |
Inserts the given semantics to the beginning of the list of compound semantics that this instance provides. More... | |
void | appendSemantics (ShPtr< Semantics > semantics) |
Inserts the given semantics to the end of the list of compound semantics that this instance provides. More... | |
Semantics Interface | |
virtual std::string | getId () const override |
Returns the ID of the semantics. More... | |
virtual std::optional< std::string > | getMainFuncName () const override |
Returns the name of the main function. More... | |
virtual std::optional< std::string > | getCHeaderFileForFunc (const std::string &funcName) const override |
Returns the C header file for the given function. More... | |
virtual std::optional< bool > | funcNeverReturns (const std::string &funcName) const override |
Gets the information whether the given function never returns. More... | |
virtual std::optional< std::string > | getNameOfVarStoringResult (const std::string &funcName) const override |
Returns an appropriate name of the variable that stores the result of calls to the given function. More... | |
virtual std::optional< std::string > | getNameOfParam (const std::string &funcName, unsigned paramPos) const override |
Returns an appropriate name of the given function's parameter. More... | |
virtual std::optional< IntStringMap > | getSymbolicNamesForParam (const std::string &funcName, unsigned paramPos) const override |
Returns a mapping of integers into their symbolic names for the given parameter of the given function. More... | |
![]() | |
virtual | ~Semantics ()=default |
Static Public Member Functions | |
static ShPtr< CompoundSemantics > | create () |
Creates a new semantics. More... | |
Protected Types | |
using | SemanticsList = std::deque< ShPtr< Semantics > > |
A list of semantics. More... | |
Protected Member Functions | |
CompoundSemantics () | |
Constructs the semantics. More... | |
![]() | |
Semantics ()=default | |
Protected Attributes | |
SemanticsList | providedSemantics |
A list of provided semantics. More... | |
A class providing compound semantics from several different semantics.
For example, consider that we have semantics for the standard C library (sem1
), for the extensions to this library as defined by POSIX (sem2
), and some specific semantics for the GCC compiler version 4.8 on GNU/Linux (sem3
). Then, after creating this semantics by calling create(), we may do the following actions to set-up this compound semantics:
Then, when calling a function from the Semantics' interface, sem1
is asked first. If it knows the answer, it is returned. Otherwise, if it doesn't know the answer, sem2
is asked and so on. When none of the semantics know the answer, an "I don't know" answer is returned.
This class is not registered in SemanticsFactory.
To create an instance of it by simply providing a list of identifiers of semantics to be used, use CompoundSemanticsBuilder.
Instances of this class have reference object semantics.
|
protected |
A list of semantics.
|
protected |
Constructs the semantics.
Inserts the given semantics to the end of the list of compound semantics that this instance provides.
When the functions from the Semantics' interface are called, the newly added semantics is asked last.
|
static |
Creates a new semantics.
|
overridevirtual |
Gets the information whether the given function never returns.
true
if the given function never returns, false
if the function may return, and std::nullopt
otherwise.[in] | funcName | Name of the function. |
For example, semantics describing the standard C library may return true
for "exit"
.
Implements retdec::llvmir2hll::Semantics.
|
overridevirtual |
Returns the C header file for the given function.
"file"
if the header file is known, std::nullopt
otherwise.[in] | funcName | Name of the function. |
For example, semantics describing the standard C library may return "stdio.h"
for "printf"
.
Implements retdec::llvmir2hll::Semantics.
|
inlineoverridevirtual |
Returns the ID of the semantics.
Implements retdec::llvmir2hll::Semantics.
|
overridevirtual |
Returns the name of the main function.
Implements retdec::llvmir2hll::Semantics.
|
overridevirtual |
Returns an appropriate name of the given function's parameter.
"name"
if the name is known, std::nullopt
otherwise.[in] | funcName | Name of the function. |
[in] | paramPos | Position of the parameter. |
For example, semantics describing the standard C library may return "file_path"
for the first parameter of "fopen"
.
Implements retdec::llvmir2hll::Semantics.
|
overridevirtual |
Returns an appropriate name of the variable that stores the result of calls to the given function.
"name"
if the name is known, std::nullopt
otherwise.[in] | funcName | Name of the function. |
For example, semantics describing the standard C library may return "c"
for "getchar"
.
Implements retdec::llvmir2hll::Semantics.
|
overridevirtual |
Returns a mapping of integers into their symbolic names for the given parameter of the given function.
map
if the mapping is known, std::nullopt
otherwise.[in] | funcName | Name of the function. |
[in] | paramPos | Position of the parameter. |
For example, a semantics may return
for "flock"
and 2
.
Implements retdec::llvmir2hll::Semantics.
Inserts the given semantics to the beginning of the list of compound semantics that this instance provides.
When the functions from the Semantics' interface are called, the newly added semantics is asked first.
|
protected |
A list of provided semantics.