module AdLint::Cc1::InterpreterMediator

Public Instance Methods

constant_expression?(expr) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 291
def constant_expression?(expr)
  expr.constant?(_interp_syntax_bridge_)
end
current_branch() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 267
def current_branch
  environment.current_branch
end
interpret(node, *opts) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 259
def interpret(node, *opts)
  interpreter.execute(node, *opts)
end
object_to_pointer(obj, init_or_expr = nil) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 303
def object_to_pointer(obj, init_or_expr = nil)
  obj.to_pointer(_interp_object_bridge_).tap do |ptr|
    if init_or_expr
      notify_address_derivation_performed(init_or_expr, obj, ptr)
    end
  end
end
object_to_variable(obj, init_or_expr = nil) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 295
def object_to_variable(obj, init_or_expr = nil)
  obj.to_variable(_interp_object_bridge_).tap do |var|
    if init_or_expr && !obj.type.pointer? && var.type.pointer?
      notify_address_derivation_performed(init_or_expr, obj, var)
    end
  end
end
pointer_value_of(obj) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 315
def pointer_value_of(obj)
  obj.to_pointer_value(_interp_object_bridge_)
end
reset_environment() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 263
def reset_environment
  environment.reset
end
scalar_value_of(numeric) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 271
def scalar_value_of(numeric)
  ScalarValue.of(numeric, logical_right_shift?)
end
scalar_value_of_arbitrary() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 287
def scalar_value_of_arbitrary
  ScalarValue.of_arbitrary(logical_right_shift?)
end
scalar_value_of_false() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 279
def scalar_value_of_false
  ScalarValue.of_false(logical_right_shift?)
end
scalar_value_of_null() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 283
def scalar_value_of_null
  ScalarValue.of_null(logical_right_shift?)
end
scalar_value_of_true() click to toggle source
# File lib/adlint/cc1/mediator.rb, line 275
def scalar_value_of_true
  ScalarValue.of_true(logical_right_shift?)
end
value_of(obj) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 311
def value_of(obj)
  obj.to_value(_interp_object_bridge_)
end

Private Instance Methods

branched_eval(expr = nil, *opts, &block) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 327
def branched_eval(expr = nil, *opts, &block)
  cur_branch = environment.enter_branch(*opts)
  interpreter.notify_branch_started(cur_branch)
  cur_branch.execute(interpreter, expr, &block)
ensure
  interpreter.notify_branch_ended(cur_branch)
  environment.leave_branch_group if cur_branch.final?
  environment.leave_branch
end
resolve_unresolved_type(node) click to toggle source
# File lib/adlint/cc1/mediator.rb, line 337
def resolve_unresolved_type(node)
  interpreter.type_resolver.resolve(node) if node.type.unresolved?
end
scoped_eval() { || ... } click to toggle source
# File lib/adlint/cc1/mediator.rb, line 320
def scoped_eval(&block)
  environment.enter_scope
  yield
ensure
  environment.leave_scope
end