1 28 package org.jruby.runtime.callback; 29 30 import org.jruby.Ruby; 31 import org.jruby.runtime.Arity; 32 import org.jruby.runtime.Block; 33 import org.jruby.runtime.builtin.IRubyObject; 34 import org.jruby.exceptions.RaiseException; 35 import org.jruby.exceptions.JumpException; 36 import org.jruby.exceptions.ThreadKill; 37 import org.jruby.exceptions.MainExitException; 38 39 42 public abstract class InvocationCallback implements Callback { 43 private Arity arity; 44 45 public IRubyObject execute(IRubyObject recv, IRubyObject[] oargs, Block block) { 46 Ruby runtime = recv.getRuntime(); 47 arity.checkArity(runtime, oargs); 48 try { 49 return call(recv,oargs,block); 50 } catch(RaiseException e) { 51 throw e; 52 } catch(JumpException e) { 53 throw e; 54 } catch(ThreadKill e) { 55 throw e; 56 } catch(MainExitException e) { 57 throw e; 58 } catch(Exception e) { 59 runtime.getJavaSupport().handleNativeException(e); 60 return runtime.getNil(); 61 } 62 } 63 64 public abstract IRubyObject call(Object receiver, Object [] args, Block block); 65 66 public void setArity(Arity arity) { 67 this.arity = arity; 68 } 69 70 public Arity getArity() { 71 return arity; 72 } 73 } | Popular Tags |