Sha256: 669e0859bb147d4bf0ba7770945edcca55626269ef06551a204d9ad95d51f27c

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module Nydp::Builtin
  module Base
    @@reraise_errors = []
    include Nydp::Helper

    def self.ignore_errors kla
      @@reraise_errors << kla
    end

    ignore_errors Nydp::Error

    def handle_error e, *args
      case e
      when *@@reraise_errors
        raise e
      else
        arg_msg = args.map { |a| "#{a._nydp_inspect}"}.join("\n").split(/\n/).map { |s| "  #{s}"}.join("\n")
        new_msg = "Called #{self._nydp_inspect}\nwith args\n#{arg_msg}"
        raise new_msg
      end
    end

    def call *args
      builtin_call *args
    rescue => e
      handle_error e, *args
    end

    alias _nydp_call call

    def name
      cname = self.class.name.split("::").last
      cname = cname.gsub(/([a-z])([A-Z])/) { |m| "#{m[0]}-#{m[1].downcase}" }
      cname = cname.gsub(/^([A-Z])/) { |m|  m.downcase }
      cname
    end

    def inspect   ; "builtin/#{name}" ; end
    def to_s      ; name              ; end
    def nydp_type ; "fn"              ; end
  end
end

Dir[File.join(File.dirname(__FILE__), "builtin", "**/*.rb")].each {|f|
  require f
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nydp-0.6.0 lib/nydp/builtin.rb