module ANTLR3::ClassMacros

Private Instance Methods

abstract( name, message = nil ) click to toggle source
# File lib/antlr3/util.rb, line 66
  def abstract( name, message = nil )
    message ||= "abstract method -- #{ self.class }::#{ name } has not been implemented"
    file, line, = caller[ 1 ].split( ':', 3 )
    class_eval( <<-END, file, line.to_i )
      def #{ name }( * )
        raise TypeError, #{ message.to_s.inspect }
      end
    END
  end
alias_accessor( alias_name, attr_name ) click to toggle source
# File lib/antlr3/util.rb, line 94
def alias_accessor( alias_name, attr_name )
  alias_method( alias_name, attr_name )
  alias_method( :"#{ alias_name }=", :"#{ attr_name }=" )
end
deprecate( name, extra_message = nil ) click to toggle source
# File lib/antlr3/util.rb, line 76
  def deprecate( name, extra_message = nil )
    hidden_name = "deprecated_#{ name }"
    method_defined?( hidden_name ) and return
    
    alias_method( hidden_name, name )
    private( hidden_name )
    
    message = "warning: method #{ self }##{ name } is deprecated"
    extra_message and message << '; ' << extra_message.to_s
    
    class_eval( <<-END )
      def #{ name }( *args, &block )
        warn( #{ message.inspect } )
        #{ hidden_name }( *args, &block )
      end
    END
  end
shared_attribute( name, *additional_members ) click to toggle source
# File lib/antlr3/util.rb, line 45
  def shared_attribute( name, *additional_members )
    attr_reader name
    
    additional_writers = additional_members.inject( '' ) do |src, attr|
      src << "@#{ attr } = value if @#{ attr }\n"
    end
    
    file, line, = caller[ 1 ].split( ':', 3 )
    class_eval( <<-END, file, line.to_i )
      def #{ name }= value
        @#{ name } = value
        
        each_delegate do |del|
          del.#{ name } = value
        end
        
        #{ additional_writers }
      end
    END
  end