1 28 29 package org.jruby; 30 31 import org.jruby.runtime.Block; 32 import org.jruby.runtime.ObjectAllocator; 33 import org.jruby.runtime.builtin.IRubyObject; 34 import org.jruby.runtime.CallbackFactory; 35 36 39 public class RubyNameError extends RubyException { 40 private IRubyObject name; 41 42 private static ObjectAllocator NAMEERROR_ALLOCATOR = new ObjectAllocator() { 43 public IRubyObject allocate(Ruby runtime, RubyClass klass) { 44 return new RubyNameError(runtime, klass); 45 } 46 }; 47 48 public static RubyClass createNameErrorClass(Ruby runtime, RubyClass standardErrorClass) { 49 RubyClass nameErrorClass = runtime.defineClass("NameError", standardErrorClass, NAMEERROR_ALLOCATOR); 50 CallbackFactory callbackFactory = runtime.callbackFactory(RubyNameError.class); 51 52 nameErrorClass.getMetaClass().defineFastMethod("new", 53 callbackFactory.getFastOptSingletonMethod("newRubyNameError")); 54 nameErrorClass.getMetaClass().defineFastMethod("exception", 55 callbackFactory.getFastOptSingletonMethod("newRubyNameError")); 56 57 nameErrorClass.defineMethod("initialize", callbackFactory.getOptMethod("initialize")); 58 nameErrorClass.defineFastMethod("name", callbackFactory.getFastMethod("name")); 59 60 return nameErrorClass; 61 } 62 63 protected RubyNameError(Ruby runtime, RubyClass exceptionClass) { 64 this(runtime, exceptionClass, exceptionClass.getName().toString()); 65 } 66 67 public RubyNameError(Ruby runtime, RubyClass exceptionClass, String message) { 68 this(runtime, exceptionClass, message, null); 69 } 70 71 public RubyNameError(Ruby runtime, RubyClass exceptionClass, String message, String name) { 72 super(runtime, exceptionClass, message); 73 this.name = name == null ? runtime.getNil() : runtime.newString(name); 74 } 75 76 public static RubyNameError newRubyNameError(IRubyObject recv, IRubyObject[] args) { 77 RubyClass klass = (RubyClass)recv; 78 79 RubyNameError newError = (RubyNameError) klass.allocate(); 80 81 newError.callInit(args, Block.NULL_BLOCK); 82 83 return newError; 84 } 85 86 public IRubyObject initialize(IRubyObject[] args, Block block) { 87 super.initialize(args, block); 88 if (args.length > 1) { 89 name = args[1]; 90 } 91 return this; 92 } 93 94 public IRubyObject name() { 95 return name; 96 } 97 } 98 | Popular Tags |