Class: ADSL::Parser::ASTOneOfObjset
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
#[], #and, #binary_op, #binary_op_with_any_number_of_params, #equiv, #exists, #false, #forall, #handle_quantifier, #implies, #in_formula_builder, #not, #or, #true
#classname_for_classname, #infer_classname_from_varname, #t
Instance Method Details
#objset_has_side_effects? ⇒ 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
|
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
|
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
|