Class: AdLint::Cc1::SwitchStatementInterpreter
- Inherits:
-
SubInterpreter
- Object
- SyntaxTreeVisitor
- SubInterpreter
- AdLint::Cc1::SwitchStatementInterpreter
- Includes:
- BranchGroupOptions, BranchOptions
- Defined in:
- lib/adlint/cc1/interp.rb
Constant Summary
Constants included from BranchGroupOptions
BranchGroupOptions::COMPLETE, BranchGroupOptions::ITERATION
Constants included from BranchOptions
BranchOptions::COMPLEMENTAL, BranchOptions::FINAL, BranchOptions::FIRST, BranchOptions::IMPLICIT_COND, BranchOptions::NARROWING, BranchOptions::SMOTHER_BREAK, BranchOptions::WIDENING
Constants included from InterpreterOptions
InterpreterOptions::QUIET, InterpreterOptions::WITHOUT_SIDE_EFFECTS
Instance Attribute Summary
Attributes inherited from SubInterpreter
Instance Method Summary collapse
-
#initialize(owner) ⇒ SwitchStatementInterpreter
constructor
A new instance of SwitchStatementInterpreter.
- #visit_switch_statement(node) ⇒ Object
Methods included from LogUtil
#log_debug, #log_error, #log_fatal, #log_info, #log_warn
Methods included from MonitorUtil
#checkpoint, #monitored_region
Methods included from Conversion
#do_conversion, #do_default_argument_promotion, #do_integer_promotion, #do_usual_arithmetic_conversion, #untyped_pointer_conversion?
Methods included from InterpreterMediator
#constant_expression?, #current_branch, #interpret, #object_to_pointer, #object_to_variable, #pointer_value_of, #reset_environment, #scalar_value_of, #scalar_value_of_arbitrary, #scalar_value_of_false, #scalar_value_of_null, #scalar_value_of_true, #value_of
Methods included from InterpSyntaxBridge
Methods included from InterpObjectBridge
Methods included from ArithmeticAccessor
#arithmetic, #logical_right_shift?
Methods included from FunctionTableMediator
#declare_explicit_function, #declare_implicit_function, #define_anonymous_function, #define_explicit_function
Methods included from VariableTableMediator
#create_tmpvar, #local_variables
Methods included from MemoryPoolMediator
Methods inherited from SyntaxTreeVisitor
#visit_abbreviated_function_declarator, #visit_additive_expression, #visit_address_expression, #visit_alignof_expression, #visit_alignof_type_expression, #visit_and_expression, #visit_ansi_function_declarator, #visit_ansi_function_definition, #visit_array_abstract_declarator, #visit_array_declarator, #visit_array_subscript_expression, #visit_bit_access_by_pointer_expression, #visit_bit_access_by_value_expression, #visit_break_statement, #visit_c99_for_statement, #visit_case_labeled_statement, #visit_cast_expression, #visit_comma_separated_expression, #visit_compound_assignment_expression, #visit_compound_literal_expression, #visit_compound_statement, #visit_conditional_expression, #visit_constant_specifier, #visit_continue_statement, #visit_declaration, #visit_declaration_specifiers, #visit_default_labeled_statement, #visit_do_statement, #visit_enum_specifier, #visit_enum_type_declaration, #visit_enumerator, #visit_equality_expression, #visit_error_expression, #visit_error_statement, #visit_exclusive_or_expression, #visit_expression_statement, #visit_for_statement, #visit_function_abstract_declarator, #visit_function_call_expression, #visit_function_declaration, #visit_generic_labeled_statement, #visit_goto_statement, #visit_grouped_abstract_declarator, #visit_grouped_declarator, #visit_grouped_expression, #visit_identifier_declarator, #visit_if_else_statement, #visit_if_statement, #visit_inclusive_or_expression, #visit_indirection_expression, #visit_init_declarator, #visit_initializer, #visit_kandr_function_declarator, #visit_kandr_function_definition, #visit_logical_and_expression, #visit_logical_or_expression, #visit_member_access_by_pointer_expression, #visit_member_access_by_value_expression, #visit_member_declaration, #visit_multiplicative_expression, #visit_null_constant_specifier, #visit_object_specifier, #visit_parameter_declaration, #visit_parameter_definition, #visit_parameter_type_list, #visit_pointer_abstract_declarator, #visit_postfix_decrement_expression, #visit_postfix_increment_expression, #visit_prefix_decrement_expression, #visit_prefix_increment_expression, #visit_relational_expression, #visit_return_statement, #visit_shift_expression, #visit_simple_assignment_expression, #visit_sizeof_expression, #visit_sizeof_type_expression, #visit_specifier_qualifier_list, #visit_standard_type_specifier, #visit_string_literal_specifier, #visit_struct_declaration, #visit_struct_declarator, #visit_struct_specifier, #visit_struct_type_declaration, #visit_translation_unit, #visit_type_name, #visit_typedef_declaration, #visit_typedef_type_specifier, #visit_typeof_type_specifier, #visit_unary_arithmetic_expression, #visit_union_specifier, #visit_union_type_declaration, #visit_variable_declaration, #visit_variable_definition, #visit_while_statement
Constructor Details
#initialize(owner) ⇒ SwitchStatementInterpreter
Returns a new instance of SwitchStatementInterpreter.
1462 1463 1464 |
# File 'lib/adlint/cc1/interp.rb', line 1462 def initialize(owner) super(owner, SwitchStatement) end |
Instance Method Details
#visit_switch_statement(node) ⇒ Object
1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 |
# File 'lib/adlint/cc1/interp.rb', line 1466 def visit_switch_statement(node) checkpoint(node.location) node.executed = true notify_switch_stmt_started(node) ctrlexpr = node.expression ctrlexpr_var = object_to_variable(interpret(ctrlexpr), ctrlexpr) notify_switch_ctrlexpr_evaled(node, ctrlexpr_var) notify_variable_value_referred(ctrlexpr, ctrlexpr_var) execute_switch_body(ctrlexpr_var, node.statement) notify_switch_stmt_ended(node) end |