class ADSL::Parser::ASTDereferenceCreate

Public Instance Methods

objset_has_side_effects?() click to toggle source
# File lib/adsl/parser/ast_nodes.rb, line 1141
def objset_has_side_effects?; true; end
to_adsl() click to toggle source
# File lib/adsl/parser/ast_nodes.rb, line 1163
def to_adsl
  "derefcreate(#{@objset.to_adsl}.#{@rel_name.text})"
end
typecheck_and_resolve(context) click to toggle source
# File lib/adsl/parser/ast_nodes.rb, line 1143
def typecheck_and_resolve(context)
  objset = @objset.typecheck_and_resolve context
  klass = objset.type
  raise ADSLError, 'Cannot create an object on an empty objset' if klass.nil?
  relation = context.find_relation klass, @rel_name.text, @rel_name.lineno
 
  create_objset = ASTCreateObjset.new(
    :class_name => ASTIdent.new(:text => relation.to_class.name)
  )
  
  assoc_builder = (@empty_first ? ASTSetTup : ASTCreateTup).new(
    :objset1 => @objset,
    :rel_name => @rel_name,
    :objset2 => create_objset
  )
  context.pre_stmts << assoc_builder.typecheck_and_resolve(context)

  create_objset.typecheck_and_resolve(context)
end