Class: ADSL::Parser::ASTOneOfObjset

Inherits:
ASTNode show all
Defined in:
lib/adsl/parser/ast_nodes.rb

Instance Method Summary collapse

Methods inherited from ASTNode

#==, #adsl_ast, #adsl_ast_size, #block_replace, #dup, #hash, is_formula?, is_objset?, is_statement?, node_type, #preorder_traverse

Methods included from Verification::FormulaGenerators

#[], #and, #binary_op, #binary_op_with_any_number_of_params, #equiv, #exists, #false, #forall, #handle_quantifier, #implies, #in_formula_builder, #not, #or, #true

Methods included from Verification::Utils

#classname_for_classname, #infer_classname_from_varname, #t

Instance Method Details

#objset_has_side_effects?Boolean

Returns:

  • (Boolean)


1069
1070
1071
# File 'lib/adsl/parser/ast_nodes.rb', line 1069

def objset_has_side_effects?
  @objsets.nil? ? false : @objsets.map{ |o| o.objset_has_side_effects? }.include?(true)
end

#optimizeObject



1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
# File 'lib/adsl/parser/ast_nodes.rb', line 1085

def optimize
  until_no_change super do |o|
    if !o.is_a?(ASTOneOfObjset)
      o
    elsif o.objsets.empty?
      ASTEmptyObjset.new
    elsif o.objsets.length == 1
      o.objsets.first
    else
      ASTOneOfObjset.new(:objsets => o.objsets.uniq)
    end
  end
end

#to_adslObject



1099
1100
1101
# File 'lib/adsl/parser/ast_nodes.rb', line 1099

def to_adsl
  "any_of(#{ @objsets.map(&:to_adsl).join ', ' })"
end

#typecheck_and_resolve(context) ⇒ Object



1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
# File 'lib/adsl/parser/ast_nodes.rb', line 1073

def typecheck_and_resolve(context)
  objsets = @objsets.map{ |o| o.typecheck_and_resolve context }
  common_type = ADSL::DS::DSClass.common_supertype objsets.reject{ |o| o.type.nil? }
  if objsets.length == 0
    ADSL::DS::DSEmptyObjset.new
  elsif objsets.length == 1
    objsets.first
  else
    ADSL::DS::DSOneOfObjset.new :objsets => objsets
  end
end