Class: Udb::Constraint

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/udb/condition.rb

Overview

wrapper around an IDL function containing constraints

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(idl, input_file:, input_line:, cfg_arch:, reason: nil)

Parameters:

  • idl (String)
  • input_file (Pathname, nil)
  • input_line (Integer, nil)
  • cfg_arch (ConfiguredArchitecture)
  • reason (String, nil) (defaults to: nil)


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/udb/condition.rb', line 53

def initialize(idl, input_file:, input_line:, cfg_arch:, reason: nil)
  @cfg_arch = cfg_arch
  symtab = cfg_arch.symtab.global_clone
  begin
    @ast = @cfg_arch.idl_compiler.compile_constraint(
      idl, symtab,
      input_file: input_file || "[CONSTRAINT]",
      input_line: input_line || 0
    )
  rescue SyntaxError
    Udb.logger.error "Could not compile IDL constraint: \n#{idl}"
    raise
  end
  symtab.release
  @reason = reason
end

Instance Attribute Details

#reasonString? (readonly)

Returns:

  • (String, nil)


42
43
44
# File 'lib/udb/condition.rb', line 42

def reason
  @reason
end

Instance Method Details

#eval(symtab) ⇒ Boolean

Parameters:

  • symtab (Idl::SymbolTable)

Returns:

  • (Boolean)


71
72
73
# File 'lib/udb/condition.rb', line 71

def eval(symtab)
  @ast.satisfied?(symtab)
end

#to_hHash{String => T.untyped}, Boolean

convert into a pure UDB condition

Returns:

  • (Hash{String => T.untyped}, Boolean)


77
78
79
80
81
82
83
# File 'lib/udb/condition.rb', line 77

def to_h
  symtab = @cfg_arch.symtab.global_clone
  h = @ast.to_udb_h(symtab)
  symtab.release

  h
end

#to_logic_tree_internalLogicNode

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



95
96
97
# File 'lib/udb/condition.rb', line 95

def to_logic_tree_internal
  Condition.new(to_h, @cfg_arch).to_logic_tree_internal
end

#to_yamlString

convert into a pure UDB condition

Returns:

  • (String)


87
88
89
# File 'lib/udb/condition.rb', line 87

def to_yaml
  YAML.dump(to_h)
end