Module: AdLint::Cc1::InterpreterMediator

Extended by:
Forwardable
Includes:
ArithmeticAccessor, EnumeratorTableMediator, FunctionTableMediator, InterpObjectBridge, InterpSyntaxBridge, MemoryPoolMediator, TypeTableMediator, VariableTableMediator
Included in:
InitializerInterpreter, Interpreter, SubInterpreter, ValueDomainManipulator, ValueDomainNarrowing, Exam::CBuiltin::W0023, Exam::CBuiltin::W0024, Exam::CBuiltin::W0028, Exam::CBuiltin::W0030, Exam::CBuiltin::W0066, Exam::CBuiltin::W0079, Exam::CBuiltin::W0081, Exam::CBuiltin::W0082, Exam::CBuiltin::W0093, Exam::CBuiltin::W0096, Exam::CBuiltin::W0097, Exam::CBuiltin::W0101, Exam::CBuiltin::W0102, Exam::CBuiltin::W0103, Exam::CBuiltin::W0107, Exam::CBuiltin::W0115, Exam::CBuiltin::W0116, Exam::CBuiltin::W0119, Exam::CBuiltin::W0255, Exam::CBuiltin::W0421, Exam::CBuiltin::W0422, Exam::CBuiltin::W0441, Exam::CBuiltin::W0461, Exam::CBuiltin::W0462, Exam::CBuiltin::W0534, Exam::CBuiltin::W0543, Exam::CBuiltin::W0568, Exam::CBuiltin::W0569, Exam::CBuiltin::W0570, Exam::CBuiltin::W0580, Exam::CBuiltin::W0582, Exam::CBuiltin::W0583, Exam::CBuiltin::W0584, Exam::CBuiltin::W0585, Exam::CBuiltin::W0607, Exam::CBuiltin::W0608, Exam::CBuiltin::W0611, Exam::CBuiltin::W0612, Exam::CBuiltin::W0614, Exam::CBuiltin::W0649, Exam::CBuiltin::W0650, Exam::CBuiltin::W0705, Exam::CBuiltin::W0707, Exam::CBuiltin::W0708, Exam::CBuiltin::W0719, Exam::CBuiltin::W0720, Exam::CBuiltin::W0722, Exam::CBuiltin::W0723, Exam::CBuiltin::W0728, Exam::CBuiltin::W0729, Exam::CBuiltin::W0730, Exam::CBuiltin::W0738, Exam::CBuiltin::W0739, Exam::CBuiltin::W0740, Exam::CBuiltin::W0741, Exam::CBuiltin::W0742, Exam::CBuiltin::W0743, Exam::CBuiltin::W0744, Exam::CBuiltin::W0745, Exam::CBuiltin::W0777, Exam::CBuiltin::W0780, Exam::CBuiltin::W0786, Exam::CBuiltin::W0794, Exam::CBuiltin::W0949, Exam::CBuiltin::W1047, Exam::CBuiltin::W1049, Exam::CBuiltin::W1050, Exam::CBuiltin::W1051, Exam::CBuiltin::W1052, Exam::CBuiltin::W1053, Exam::CBuiltin::W1056, Exam::CBuiltin::W1057, Exam::CBuiltin::W1058, Exam::CBuiltin::W1061, Exam::CBuiltin::W1062, Exam::CBuiltin::W1063, Exam::CBuiltin::W1066, Exam::CBuiltin::W9003
Defined in:
lib/adlint/cc1/mediator.rb

Instance Method Summary collapse

Methods included from InterpSyntaxBridge

#_interp_syntax_bridge_

Methods included from InterpObjectBridge

#_interp_object_bridge_

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

#pointee_of

Instance Method Details

#constant_expression?(expr) ⇒ Boolean

Returns:

  • (Boolean)


291
292
293
# File 'lib/adlint/cc1/mediator.rb', line 291

def constant_expression?(expr)
  expr.constant?(_interp_syntax_bridge_)
end

#current_branchObject



267
268
269
# File 'lib/adlint/cc1/mediator.rb', line 267

def current_branch
  environment.current_branch
end

#interpret(node, *opts) ⇒ Object



259
260
261
# 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) ⇒ Object



303
304
305
306
307
308
309
# 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) ⇒ Object



295
296
297
298
299
300
301
# 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) ⇒ Object



315
316
317
# File 'lib/adlint/cc1/mediator.rb', line 315

def pointer_value_of(obj)
  obj.to_pointer_value(_interp_object_bridge_)
end

#reset_environmentObject



263
264
265
# File 'lib/adlint/cc1/mediator.rb', line 263

def reset_environment
  environment.reset
end

#scalar_value_of(numeric) ⇒ Object



271
272
273
# File 'lib/adlint/cc1/mediator.rb', line 271

def scalar_value_of(numeric)
  ScalarValue.of(numeric, logical_right_shift?)
end

#scalar_value_of_arbitraryObject



287
288
289
# File 'lib/adlint/cc1/mediator.rb', line 287

def scalar_value_of_arbitrary
  ScalarValue.of_arbitrary(logical_right_shift?)
end

#scalar_value_of_falseObject



279
280
281
# File 'lib/adlint/cc1/mediator.rb', line 279

def scalar_value_of_false
  ScalarValue.of_false(logical_right_shift?)
end

#scalar_value_of_nullObject



283
284
285
# File 'lib/adlint/cc1/mediator.rb', line 283

def scalar_value_of_null
  ScalarValue.of_null(logical_right_shift?)
end

#scalar_value_of_trueObject



275
276
277
# File 'lib/adlint/cc1/mediator.rb', line 275

def scalar_value_of_true
  ScalarValue.of_true(logical_right_shift?)
end

#value_of(obj) ⇒ Object



311
312
313
# File 'lib/adlint/cc1/mediator.rb', line 311

def value_of(obj)
  obj.to_value(_interp_object_bridge_)
end