class AdLint::Cc1::SwitchStatement
Attributes
expression[R]
statement[R]
Public Class Methods
new(expr, stmt)
click to toggle source
Calls superclass method
AdLint::Cc1::Statement::new
# File lib/adlint/cc1/syntax.rb, line 3557 def initialize(expr, stmt) super() @expression = expr @statement = stmt derive_clause_conditions end
Public Instance Methods
inspect(indent = 0)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3571 def inspect(indent = 0) " " * indent + "#{short_class_name}\n" + @expression.inspect(indent + 1) + "\n" + @statement.inspect(indent + 1) end
location()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3567 def location head_location end
Private Instance Methods
derive_clause_conditions()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3577 def derive_clause_conditions case_exprs = [] default_stmt = nil @statement.block_items.each do |item| case item when GenericLabeledStatement item = item.statement redo when CaseLabeledStatement item.normalized_expression = equal_to_expression(@expression, item.expression, item.location) case_exprs.push(item.normalized_expression) item = item.statement redo when DefaultLabeledStatement default_stmt = item item = item.statement redo end end if default_stmt default_stmt.normalized_expression = derive_default_clause_condition(case_exprs, default_stmt.location) end end
derive_default_clause_condition(case_exprs, loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3605 def derive_default_clause_condition(case_exprs, loc) if case_exprs.empty? equal_to_expression(@expression, @expression, loc) else case_exprs.map { |expr| not_equal_to_expression(expr.lhs_operand, expr.rhs_operand, loc) }.reduce { |cond, expr| logical_and_expression(cond, expr, loc) } end end
equal_to_expression(lhs, rhs, loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3615 def equal_to_expression(lhs, rhs, loc) EqualityExpression.new(equal_to_operator(loc), lhs, rhs) end
equal_to_operator(loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3627 def equal_to_operator(loc) Token.new("==", "==", loc) end
logical_and_expression(lhs, rhs, loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3623 def logical_and_expression(lhs, rhs, loc) LogicalAndExpression.new(logical_and_operator(loc), lhs, rhs) end
logical_and_operator(loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3635 def logical_and_operator(loc) Token.new("&&", "&&", loc) end
not_equal_to_expression(lhs, rhs, loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3619 def not_equal_to_expression(lhs, rhs, loc) EqualityExpression.new(not_equal_to_operator(loc), lhs, rhs) end
not_equal_to_operator(loc)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 3631 def not_equal_to_operator(loc) Token.new("!=", "!=", loc) end