class ADSL::Parser::ASTOneOfObjset

Public Instance Methods

objset_has_side_effects?() click to toggle source
# 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
optimize() click to toggle source
Calls superclass method ADSL::Parser::ASTNode#optimize
# 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_adsl() click to toggle source
# File lib/adsl/parser/ast_nodes.rb, line 1099
def to_adsl
  "any_of(#{ @objsets.map(&:to_adsl).join ', ' })"
end
typecheck_and_resolve(context) click to toggle source
# 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