Class: ADSL::Parser::ASTAnd

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, #objset_has_side_effects?, #optimize, #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

#to_adslObject



1296
1297
1298
# File 'lib/adsl/parser/ast_nodes.rb', line 1296

def to_adsl
  "and(#{ @subformulae.map(&:to_adsl).join ", " })"
end

#typecheck_and_resolve(context) ⇒ Object



1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
# File 'lib/adsl/parser/ast_nodes.rb', line 1280

def typecheck_and_resolve(context)
  subformulae = @subformulae.map{ |o| o.typecheck_and_resolve context }
  subformulae.each do |subformula|
    raise "Substatement not a formula on line #{subformula.lineno}" unless subformula.type == :formula  
  end
  flattened_subformulae = []
  subformulae.each do |subformula|
    if subformula.is_a? ADSL::DS::DSAnd
      flattened_subformulae += subformula.subformulae
    else
      flattened_subformulae << subformula
    end
  end
  return ADSL::DS::DSAnd.new :subformulae => flattened_subformulae
end