CBMC
|
Class for encapsulating the current state of the type check. More...
#include <statement_list_typecheck.h>
Classes | |
struct | nesting_stack_entryt |
Every time branching occurs inside of a boolean expression string in STL, the current value of the RLO and OR bits are saved and put on a separate stack. More... | |
struct | stl_jump_locationt |
Holds information about the properties of a jump instruction. More... | |
struct | stl_label_locationt |
Holds information about the instruction and the nesting depth to which a label points. More... | |
Public Member Functions | |
statement_list_typecheckt (const statement_list_parse_treet &parse_tree, symbol_table_baset &symbol_table, const std::string &module, message_handlert &message_handler) | |
Creates a new instance of statement_list_typecheckt. More... | |
void | typecheck () override |
Performs the actual typecheck by using the parse tree with which the object was initialized and modifies the referenced symbol table. More... | |
Public Member Functions inherited from typecheckt | |
typecheckt (message_handlert &_message_handler) | |
virtual | ~typecheckt () |
virtual bool | typecheck_main () |
Private Types | |
using | nesting_stackt = std::vector< nesting_stack_entryt > |
using | stl_labelst = std::unordered_map< irep_idt, stl_label_locationt > |
using | label_referencest = std::unordered_map< irep_idt, std::vector< stl_jump_locationt > > |
Private Member Functions | |
void | typecheck_function_declaration (const statement_list_parse_treet::functiont &function) |
Performs a typecheck on a function declaration inside of the parse tree and adds symbols for it and its parameters to the symbol table. More... | |
void | typecheck_function_block_declaration (const statement_list_parse_treet::function_blockt &function_block) |
Performs a typecheck on a function block declaration inside of the parse tree and adds symbols for it and its parameters to the symbol table. More... | |
void | typecheck_tag_list () |
Performs a typecheck on the tag list of the referenced parse tree and adds symbols for its contents to the symbol table. More... | |
void | add_temp_rlo () |
Adds a symbol for the RLO to the symbol table. More... | |
struct_typet | create_instance_data_block_type (const statement_list_parse_treet::function_blockt &function_block) |
Creates a data block type for the given function block. More... | |
void | typecheck_function_block_var_decls (const statement_list_parse_treet::var_declarationst &var_decls, struct_union_typet::componentst &components, const irep_idt &var_property) |
Performs a typecheck on a variable declaration list and saves the result to the given component element. More... | |
void | typecheck_function_var_decls (const statement_list_parse_treet::var_declarationst &var_decls, code_typet::parameterst ¶ms, const irep_idt &function_name, const irep_idt &var_property) |
Performs a typecheck on a variable declaration list and saves the result to the given component element. More... | |
void | typecheck_temp_var_decls (const statement_list_parse_treet::tia_modulet &tia_module, symbolt &tia_symbol) |
Performs a typecheck on the temp variables of a TIA module and saves the result to the given symbol value. More... | |
void | typecheck_statement_list_networks (const statement_list_parse_treet::tia_modulet &tia_module, symbolt &tia_symbol) |
Performs a typecheck on the networks of a TIA module and saves the result to the given symbol. More... | |
void | typecheck_label_references () |
Checks if all jumps reference labels that exist. More... | |
void | typecheck_statement_list_instruction (const statement_list_parse_treet::instructiont &instruction, symbolt &tia_element) |
Performs a typecheck on a single instruction and saves the result to the given symbol body if necessary. More... | |
void | typecheck_code (const codet &instruction, symbolt &tia_element) |
Performs a typecheck for the specified instruction in code form. More... | |
void | typecheck_label (const codet &instruction, symbolt &tia_element) |
Performs a typecheck for the given label in code form. More... | |
void | typecheck_statement_list_load (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL load instruction. More... | |
void | typecheck_statement_list_transfer (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a STL transfer instruction and saves the result to the given symbol. More... | |
void | typecheck_statement_list_accu_int_add (const codet &op_code) |
Performs a typecheck on a STL accumulator add instruction for integers. More... | |
void | typecheck_statement_list_accu_int_sub (const codet &op_code) |
Performs a typecheck on a STL accumulator subtract instruction for integers. More... | |
void | typecheck_statement_list_accu_int_div (const codet &op_code) |
Performs a typecheck on a STL accumulator divide instruction for integers. More... | |
void | typecheck_statement_list_accu_int_mul (const codet &op_code) |
Performs a typecheck on a STL accumulator multiply instruction for integers. More... | |
void | typecheck_statement_list_accu_int_eq (const codet &op_code) |
Performs a typecheck on a STL accumulator equality comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_int_neq (const codet &op_code) |
Performs a typecheck on a STL accumulator inequality comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_int_gt (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_int_lt (const codet &op_code) |
Performs a typecheck on a STL accumulator less than comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_int_gte (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_int_lte (const codet &op_code) |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for integers. More... | |
void | typecheck_statement_list_accu_dint_add (const codet &op_code) |
Performs a typecheck on a STL accumulator add instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_sub (const codet &op_code) |
Performs a typecheck on a STL accumulator subtract instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_div (const codet &op_code) |
Performs a typecheck on a STL accumulator divide instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_mul (const codet &op_code) |
Performs a typecheck on a STL accumulator divide instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_eq (const codet &op_code) |
Performs a typecheck on a STL accumulator equality comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_neq (const codet &op_code) |
Performs a typecheck on a STL accumulator inequality comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_gt (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_lt (const codet &op_code) |
Performs a typecheck on a STL accumulator less than comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_gte (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_dint_lte (const codet &op_code) |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_add (const codet &op_code) |
Performs a typecheck on a STL accumulator add instruction for reals. More... | |
void | typecheck_statement_list_accu_real_sub (const codet &op_code) |
Performs a typecheck on a STL accumulator subtract instruction for reals. More... | |
void | typecheck_statement_list_accu_real_div (const codet &op_code) |
Performs a typecheck on a STL accumulator divide instruction for reals. More... | |
void | typecheck_statement_list_accu_real_mul (const codet &op_code) |
Performs a typecheck on a STL accumulator multiply instruction for reals. More... | |
void | typecheck_statement_list_accu_real_eq (const codet &op_code) |
Performs a typecheck on a STL accumulator equality comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_neq (const codet &op_code) |
Performs a typecheck on a STL accumulator inequality comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_gt (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_lt (const codet &op_code) |
Performs a typecheck on a STL accumulator less than comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_gte (const codet &op_code) |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_lte (const codet &op_code) |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for integers. More... | |
void | typecheck_statement_list_not (const codet &op_code) |
Performs a typecheck on a STL boolean NOT instruction. More... | |
void | typecheck_statement_list_and (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean And instruction. More... | |
void | typecheck_statement_list_or (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean Or instruction. More... | |
void | typecheck_statement_list_xor (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean XOR instruction. More... | |
void | typecheck_statement_list_and_not (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean And Not instruction. More... | |
void | typecheck_statement_list_or_not (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean Or Not instruction. More... | |
void | typecheck_statement_list_xor_not (const codet &op_code, const symbolt &tia_element) |
Performs a typecheck on a STL boolean XOR Not instruction. More... | |
void | typecheck_statement_list_and_before_or () |
Performs a typecheck on a STL operand-less Or instruction. More... | |
void | typecheck_statement_list_nested_and (const codet &op_code) |
Performs a typecheck on a nested And instruction. More... | |
void | typecheck_statement_list_nested_or (const codet &op_code) |
Performs a typecheck on a nested Or instruction. More... | |
void | typecheck_statement_list_nested_xor (const codet &op_code) |
Performs a typecheck on a nested XOR instruction. More... | |
void | typecheck_statement_list_nested_and_not (const codet &op_code) |
Performs a typecheck on a nested And Not instruction. More... | |
void | typecheck_statement_list_nested_or_not (const codet &op_code) |
Performs a typecheck on a nested Or Not instruction. More... | |
void | typecheck_statement_list_nested_xor_not (const codet &op_code) |
Performs a typecheck on a nested XOR Not instruction. More... | |
void | typecheck_statement_list_nesting_closed (const codet &op_code) |
Performs a typecheck on a Nesting Closed instruction. More... | |
void | typecheck_statement_list_assign (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a STL assign instruction and saves the result to the given symbol. More... | |
void | typecheck_statement_list_set_rlo (const codet &op_code) |
Performs a typecheck on a STL 'SET' instruction and modifies the RLO, OR and FC bit. More... | |
void | typecheck_statement_list_clr_rlo (const codet &op_code) |
Performs a typecheck on a STL 'CLR' instruction and modifies the RLO, OR and FC bit. More... | |
void | typecheck_statement_list_set (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a STL 'S' instruction and saves the result to the given symbol. More... | |
void | typecheck_statement_list_reset (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a STL 'R' instruction and saves the result to the given symbol. More... | |
void | typecheck_statement_list_call (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a STL Call instruction and saves the result to the given symbol. More... | |
void | typecheck_statement_list_jump_unconditional (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on an unconditional jump instruction (JU) and adds the jump to the given symbol. More... | |
void | typecheck_statement_list_jump_conditional (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a conditional jump instruction (JC) and adds it to the given symbol. More... | |
void | typecheck_statement_list_jump_conditional_not (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a inverted conditional jump instruction (JCN) and adds it to the given symbol. More... | |
stl_label_locationt | typecheck_label_location (const code_labelt &label) |
Converts the properties of the current typecheck state to a label location. More... | |
void | typecheck_jump_locations (const code_labelt &label, const stl_label_locationt &location) |
Performs a typecheck on all references for the given label. More... | |
void | typecheck_statement_list_accu_int_arith (const codet &op_code) |
Performs a typecheck on a STL Accumulator instruction for integers. More... | |
void | typecheck_statement_list_accu_dint_arith (const codet &op_code) |
Performs a typecheck on a STL Accumulator instruction for double integers. More... | |
void | typecheck_statement_list_accu_real_arith (const codet &op_code) |
Performs a typecheck on a STL Accumulator instruction for reals. More... | |
const symbol_exprt & | typecheck_instruction_with_non_const_operand (const codet &op_code) |
Performs a typecheck on a STL instruction with an additional operand that should be no constant. More... | |
void | typecheck_instruction_without_operand (const codet &op_code) |
Performs a typecheck on an operand-less STL instruction. More... | |
void | typecheck_binary_accumulator_instruction (const codet &op_code) |
Performs a typecheck on a STL instruction that uses two accumulator entries. More... | |
void | typecheck_nested_boolean_instruction (const codet &op_code, const exprt &rlo_value) |
Performs a typecheck on a STL instruction that initializes a new boolean nesting. More... | |
exprt | typecheck_simple_boolean_instruction_operand (const codet &op_code, const symbolt &tia_element, bool negate) |
Performs a typecheck on the operand of a not nested boolean instruction and returns the result. More... | |
void | typecheck_accumulator_compare_instruction (const irep_idt &comparison) |
Performs a typecheck on an STL comparison instruction. More... | |
void | typecheck_label_reference (const irep_idt &label, bool sets_fc_false) |
Checks if the given label is already present and compares the current state with it. More... | |
exprt | typecheck_identifier (const symbolt &tia_element, const irep_idt &identifier) |
Performs a typecheck on the given identifier and returns its symbol. More... | |
void | typecheck_CPROVER_assert (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a call of __CPOVER_ASSERT and saves the result to the given symbol. More... | |
void | typecheck_CPROVER_assume (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a call of __CPOVER_ASSUME and saves the result to the given symbol. More... | |
void | typecheck_called_tia_element (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a call of a TIA element and saves the result to the given symbol. More... | |
void | typecheck_called_function (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a call of a TIA function and saves the result to the given symbol. More... | |
void | typecheck_called_function_block (const codet &op_code, symbolt &tia_element) |
Performs a typecheck on a call of a TIA function block and saves the result to the given symbol. More... | |
exprt | typecheck_function_call_arguments (const std::vector< code_frontend_assignt > &assignments, const code_typet::parametert ¶m, const symbolt &tia_element) |
Checks if the given parameter is inside of the assignment list of a function call and returns the expression of the assigned variable. More... | |
exprt | typecheck_function_call_argument_rhs (const symbolt &tia_element, const exprt &rhs) |
Checks if the given assigned expression is a variable or a constant and returns the typechecked version. More... | |
exprt | typecheck_return_value_assignment (const std::vector< code_frontend_assignt > &assignments, const typet &return_type, const symbolt &tia_element) |
Checks if there is a return value assignment inside of the assignment list of a function call and returns the expression of the assigned variable. More... | |
void | add_to_or_rlo_wrapper (const exprt &op) |
Adds the given expression to the operands of the Or expression that is saved in the RLO. More... | |
void | initialize_bit_expression (const exprt &op) |
Initializes the FC, RLO an OR bits for the scenario when a new boolean instruction was encontered. More... | |
void | clear_module_state () |
Modifies the state of the typecheck to resemble the beginning of a new module. More... | |
void | clear_network_state () |
Modifies the state of the typecheck to resemble the beginning of a new network. More... | |
void | save_rlo_state (symbolt &tia_element) |
Saves the current RLO bit to a temporary variable to prevent false overrides when modifying boolean variables. More... | |
Private Attributes | |
const statement_list_parse_treet & | parse_tree |
Parse tree which is used to fill the symbol table. More... | |
symbol_table_baset & | symbol_table |
Reference to the symbol table that should be filled during the typecheck. More... | |
const irep_idt | module |
Name of the module this typecheck belongs to. More... | |
std::vector< exprt > | accumulator |
Representation of the accumulator of a TIA element. More... | |
exprt | rlo_bit = true_exprt() |
Result of Logic Operation (Part of the TIA status word). More... | |
bool | fc_bit = false |
First Check (Part of the TIA status word). More... | |
bool | or_bit = false |
Or (Part of the TIA status word). More... | |
nesting_stackt | nesting_stack |
Representation of the nesting stack. More... | |
stl_labelst | stl_labels |
Data structure that contains data about the labels of the current module. More... | |
label_referencest | label_references |
Holds associations between labels and jumps that are referencing it. More... | |
Additional Inherited Members |
Class for encapsulating the current state of the type check.
Definition at line 42 of file statement_list_typecheck.h.
|
private |
Definition at line 170 of file statement_list_typecheck.h.
|
private |
Definition at line 113 of file statement_list_typecheck.h.
|
private |
Definition at line 146 of file statement_list_typecheck.h.
statement_list_typecheckt::statement_list_typecheckt | ( | const statement_list_parse_treet & | parse_tree, |
symbol_table_baset & | symbol_table, | ||
const std::string & | module, | ||
message_handlert & | message_handler | ||
) |
Creates a new instance of statement_list_typecheckt.
parse_tree | Parse tree generated by parsing a Statement List file. | |
[out] | symbol_table | Object that shall be filled by this function. If the symbol table is not empty when calling this function, its contents are merged with the new entries. |
module | Name of the file that has been parsed. | |
message_handler | Used to provide debug information and error messages. |
Definition at line 118 of file statement_list_typecheck.cpp.
|
private |
Adds a symbol for the RLO to the symbol table.
This symbol is used by other operations to save intermediate results of the rlo expression.
Definition at line 238 of file statement_list_typecheck.cpp.
|
private |
Adds the given expression to the operands of the Or expression that is saved in the RLO.
op | Operand to be added to the Or instruction. |
Definition at line 1773 of file statement_list_typecheck.cpp.
|
private |
Modifies the state of the typecheck to resemble the beginning of a new module.
All changes to the implicit typecheck fields are close to the original TIA behaviour.
Definition at line 1808 of file statement_list_typecheck.cpp.
|
private |
Modifies the state of the typecheck to resemble the beginning of a new network.
All changes to the implicit typecheck fields are close to the original TIA behaviour.
Definition at line 1800 of file statement_list_typecheck.cpp.
|
private |
Creates a data block type for the given function block.
function_block | Function block with an interface that should be converted to a data block. |
Definition at line 248 of file statement_list_typecheck.cpp.
|
private |
Initializes the FC, RLO an OR bits for the scenario when a new boolean instruction was encontered.
op | Operand of the encountered instruction. |
Definition at line 1793 of file statement_list_typecheck.cpp.
|
private |
Saves the current RLO bit to a temporary variable to prevent false overrides when modifying boolean variables.
tia_element | Symbol representation of the TIA element. |
Definition at line 1815 of file statement_list_typecheck.cpp.
|
overridevirtual |
Performs the actual typecheck by using the parse tree with which the object was initialized and modifies the referenced symbol table.
Implements typecheckt.
Definition at line 130 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on an STL comparison instruction.
Modifies the RLO.
comparison | ID of the compare expression that should be pushed to the RLO. |
Definition at line 1403 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL instruction that uses two accumulator entries.
op_code | OP code of the instruction. |
Definition at line 1482 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a call of a TIA function and saves the result to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1643 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a call of a TIA function block and saves the result to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1687 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a call of a TIA element and saves the result to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1621 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck for the specified instruction in code form.
instruction | Code to check. | |
[out] | tia_element | Symbol representation of the TIA module. |
Definition at line 374 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a call of __CPOVER_ASSERT and saves the result to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1583 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a call of __CPOVER_ASSUME and saves the result to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1602 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a function block declaration inside of the parse tree and adds symbols for it and its parameters to the symbol table.
function_block | Function block to be checked. |
Definition at line 157 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a variable declaration list and saves the result to the given component element.
var_decls | List of declarations which should be typechecked. | |
[out] | components | List of typechecked and converted declarations. |
var_property | Type of variable declaration list (for example input, output, ...). |
Definition at line 264 of file statement_list_typecheck.cpp.
|
private |
Checks if the given assigned expression is a variable or a constant and returns the typechecked version.
tia_element | Symbol representation of the TIA element. |
rhs | Expression that the function parameter got assigned to. |
Definition at line 1730 of file statement_list_typecheck.cpp.
|
private |
Checks if the given parameter is inside of the assignment list of a function call and returns the expression of the assigned variable.
assignments | Assignment list of the function call. |
param | Parameter that should be checked. |
tia_element | Symbol representation of the TIA element. |
Definition at line 1699 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a function declaration inside of the parse tree and adds symbols for it and its parameters to the symbol table.
function | Function to be checked. |
Definition at line 204 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a variable declaration list and saves the result to the given component element.
var_decls | List of declarations which should be typechecked. | |
[out] | params | List of typechecked and converted declarations. |
function_name | Function to which the variable list belongs (used for naming). | |
var_property | Type of variable declaration list (for example input, output, ...). |
Definition at line 280 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on the given identifier and returns its symbol.
identifier | Identifier that should be checked. |
tia_element | Symbol representation of the current TIA module. |
Definition at line 1521 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL instruction with an additional operand that should be no constant.
op_code | OP code of the instruction. |
Definition at line 1459 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on an operand-less STL instruction.
op_code | OP code of the instruction. |
Definition at line 1472 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on all references for the given label.
label | Label to check. |
location | Data about the location of the label. |
Definition at line 589 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck for the given label in code form.
instruction | Label to check. | |
[out] | tia_element | Symbol representation of the TIA module. |
Definition at line 502 of file statement_list_typecheck.cpp.
|
private |
Converts the properties of the current typecheck state to a label location.
label | Label to check the properties for. |
Definition at line 540 of file statement_list_typecheck.cpp.
|
private |
Checks if the given label is already present and compares the current state with it.
If there is no entry for the label, a new jump location is added to the typecheck for later verification.
label | Label to check. |
sets_fc_false | Whether the encountered jump instruction sets the /FC bit to false. |
Definition at line 1413 of file statement_list_typecheck.cpp.
|
private |
Checks if all jumps reference labels that exist.
Definition at line 351 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL instruction that initializes a new boolean nesting.
op_code | OP code of the instruction. |
rlo_value | Value of the RLO that is pushed on the nesting stack for the case that this is the first instruction of a new bit string. |
Definition at line 1493 of file statement_list_typecheck.cpp.
|
private |
Checks if there is a return value assignment inside of the assignment list of a function call and returns the expression of the assigned variable.
assignments | Assignment list of the function call. |
return_type | Type of the return value. |
tia_element | Symbol representation of the TIA element. |
Definition at line 1745 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on the operand of a not nested boolean instruction and returns the result.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
negate | Whether the operand should be negated (e.g. for the AND NOT expression). |
Definition at line 1509 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator add instruction for double integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 756 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL Accumulator instruction for double integers.
op_code | OP code of the instruction. |
Definition at line 1365 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator divide instruction for double integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 795 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator equality comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 808 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 829 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 843 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 822 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 836 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator divide instruction for double integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 782 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator inequality comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 815 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator subtract instruction for double integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 769 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator add instruction for integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 662 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL Accumulator instruction for integers.
op_code | OP code of the instruction. |
Definition at line 1344 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator divide instruction for integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 701 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator equality comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 714 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 735 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 749 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 728 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 742 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator multiply instruction for integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 688 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator inequality comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 721 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator subtract instruction for integers.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 675 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator add instruction for reals.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 850 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL Accumulator instruction for reals.
op_code | OP code of the instruction. |
Definition at line 1387 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator divide instruction for reals.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 889 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator equality comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 902 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 923 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator greater than or equal comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 937 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 916 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator less than or equal comparison instruction for integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 930 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator multiply instruction for reals.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 876 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator inequality comparison instruction for double integers.
Modifies the RLO.
op_code | OP code of the instruction. |
Definition at line 909 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL accumulator subtract instruction for reals.
Modifies the accumulator.
op_code | OP code of the instruction. |
Definition at line 863 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean And instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 952 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL operand-less Or instruction.
Reads and modifies the RLO, OR and FC bit.
Definition at line 1083 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean And Not instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 974 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL assign instruction and saves the result to the given symbol.
Modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1201 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL Call instruction and saves the result to the given symbol.
Modifies the OR and /FC bit.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1274 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL 'CLR' instruction and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1231 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a single instruction and saves the result to the given symbol body if necessary.
instruction | Instruction that should be checked. | |
[out] | tia_element | Symbol representation of the TIA module. |
Definition at line 366 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a conditional jump instruction (JC) and adds it to the given symbol.
Modifies the /FC, RLO and OR bits.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1308 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a inverted conditional jump instruction (JCN) and adds it to the given symbol.
Modifies the /FC, RLO and OR bits.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1326 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on an unconditional jump instruction (JU) and adds the jump to the given symbol.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1295 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL load instruction.
Modifies the accumulator.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 626 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested And instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1094 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested And Not instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1102 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested Or instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1110 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested Or Not instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1118 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested XOR instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1126 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a nested XOR Not instruction.
Pushes the current program state to the nesting stack and cleans the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1134 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a Nesting Closed instruction.
Uses the latest entry on the nesting stack and modifies the RLO, OR and FC bit according to the instruction that started the nesting.
op_code | OP code of the instruction. |
Definition at line 1142 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on the networks of a TIA module and saves the result to the given symbol.
tia_module | Module containing the networks that shall be checked. | |
[out] | tia_symbol | Symbol representation of the given TIA module. |
Definition at line 329 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean NOT instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 944 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean Or instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 996 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean Or Not instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 1021 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL 'R' instruction and saves the result to the given symbol.
Modifies the OR and FC bit.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1257 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL 'S' instruction and saves the result to the given symbol.
Modifies the OR and FC bit.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 1240 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL 'SET' instruction and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
Definition at line 1222 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL transfer instruction and saves the result to the given symbol.
Modifies the accumulator.
op_code | OP code of the instruction. | |
[out] | tia_element | Symbol representation of the TIA element. |
Definition at line 647 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean XOR instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 1042 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on a STL boolean XOR Not instruction.
Reads and modifies the RLO, OR and FC bit.
op_code | OP code of the instruction. |
tia_element | Symbol representation of the TIA element. |
Definition at line 1062 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on the tag list of the referenced parse tree and adds symbols for its contents to the symbol table.
Definition at line 225 of file statement_list_typecheck.cpp.
|
private |
Performs a typecheck on the temp variables of a TIA module and saves the result to the given symbol value.
tia_module | Element whose temp declarations should be checked. | |
[out] | tia_symbol | Symbol representation of the TIA module. |
Definition at line 307 of file statement_list_typecheck.cpp.
|
private |
Representation of the accumulator of a TIA element.
Definition at line 78 of file statement_list_typecheck.h.
|
private |
First Check (Part of the TIA status word).
Gets set every time a boolean instruction is encountered and is set to false once the boolean expression as a whole is terminated (either by an assignment or other instructions).
Definition at line 89 of file statement_list_typecheck.h.
|
private |
Holds associations between labels and jumps that are referencing it.
This list should be empty after a successful typecheck. A new entry is added only if a jump is encountered that references an unknown label. It is removed once the label is encountered and the jump is valid.
Definition at line 177 of file statement_list_typecheck.h.
|
private |
Name of the module this typecheck belongs to.
Definition at line 71 of file statement_list_typecheck.h.
|
private |
Representation of the nesting stack.
Values are pushed once branching occurs and popped upon returning.
Definition at line 117 of file statement_list_typecheck.h.
|
private |
Or (Part of the TIA status word).
Helps to track all And instructions that follow an operand-less Or instruction (The so called 'And before Or').
Definition at line 94 of file statement_list_typecheck.h.
|
private |
Parse tree which is used to fill the symbol table.
Definition at line 65 of file statement_list_typecheck.h.
|
private |
Result of Logic Operation (Part of the TIA status word).
Holds the current boolean expression of the active network and is read and modified by boolean instructions.
Definition at line 83 of file statement_list_typecheck.h.
|
private |
Data structure that contains data about the labels of the current module.
Definition at line 149 of file statement_list_typecheck.h.
|
private |
Reference to the symbol table that should be filled during the typecheck.
Definition at line 68 of file statement_list_typecheck.h.