module Exception2MessageMapper

def Raise(err = nil, *rest)


rest: message arguments
err: exception
Fail(err, *rest)
def Raise(err = nil, *rest)
  E2MM.Raise(self, err, *rest)
end

def bind(cl)

def bind(cl)
  self.module_eval "#{<<-"begin;"}\n#{<<-"end;"}", __FILE__, __LINE__+1
  begin;
    def Raise(err = nil, *rest)
      Exception2MessageMapper.Raise(self.class, err, *rest)
    end
    alias Fail Raise
    class << self
      undef included
    end
    def self.included(mod)
      mod.extend Exception2MessageMapper
    end
  end;
end

def def_e2message(c, m)


define exception c with message m.
m: message_form
c: exception
def_e2message(c, m)
def def_e2message(c, m)
  E2MM.def_e2message(self, c, m)
end

def def_exception(n, m, s = StandardError)


define exception named ``c'' with message m.
s: superclass(default: StandardError)
m: message_form
n: exception_name
def_exception(n, m, s)
def def_exception(n, m, s = StandardError)
  E2MM.def_exception(self, n, m, s)
end