Your browser does not support JavaScript and this site utilizes JavaScript to build content and provide links to additional information. You should either enable JavaScript in your browser settings or use a browser that supports JavaScript in order to take full advantage of this site.

1 /***** BEGIN LICENSE BLOCK *****2 * Version: CPL 1.0/GPL 2.0/LGPL 2.13 *4 * The contents of this file are subject to the Common Public5 * License Version 1.0 (the "License"); you may not use this file6 * except in compliance with the License. You may obtain a copy of7 * the License at http://www.eclipse.org/legal/cpl-v10.html8 *9 * Software distributed under the License is distributed on an "AS10 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or11 * implied. See the License for the specific language governing12 * rights and limitations under the License.13 *14 * Copyright (C) 2002-2004 Jan Arne Petersen <jpetersen@uni-bonn.de>15 * Copyright (C) 2004-2006 Thomas E Enebo <enebo@acm.org>16 * Copyright (C) 2004 Stefan Matthias Aust <sma@3plus4.de>17 * 18 * Alternatively, the contents of this file may be used under the terms of19 * either of the GNU General Public License Version 2 or later (the "GPL"),20 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),21 * in which case the provisions of the GPL or the LGPL are applicable instead22 * of those above. If you wish to allow use of your version of this file only23 * under the terms of either the GPL or the LGPL, and not to allow others to24 * use your version of this file under the terms of the CPL, indicate your25 * decision by deleting the provisions above and replace them with the notice26 * and other provisions required by the GPL or the LGPL. If you do not delete27 * the provisions above, a recipient may use your version of this file under28 * the terms of any one of the CPL, the GPL or the LGPL.29 ***** END LICENSE BLOCK *****/30 package org.jruby;31 32 importorg.jruby.runtime.ClassIndex;33 importorg.jruby.runtime.ObjectAllocator;34 importorg.jruby.runtime.builtin.IRubyObject;35 importorg.jruby.util.collections.SinglyLinkedList;36 37 publicclass MetaClass extendsRubyClass {38 39 public MetaClass(Ruby runtime, RubyClass superClass, ObjectAllocator allocator, SinglyLinkedList parentCRef) {40 super(runtime, runtime.getClass("Class"), superClass, allocator, parentCRef, null);41 42 this.index = ClassIndex.CLASS;43 }44 45 publicboolean isSingleton() {46 returntrue;47 }48 49 protectedRubyClass subclass() {50 throw getRuntime().newTypeError("can't make subclass of virtual class");51 }52 53 /**54 * If an object uses an anonymous class 'class << obj', then this grabs the original 55 * metaclass and not the one that get injected as a result of 'class << obj'.56 */57 publicRubyClass getRealClass() {58 return getSuperClass().getRealClass();59 }60 61 publicvoid methodAdded(RubySymbol symbol) {62 getAttachedObject().callMethod(getRuntime().getCurrentContext(), "singleton_method_added", symbol);63 }64 65 publicIRubyObject getAttachedObject() {66 // Though it may not be obvious, attachToObject is always called just after instance67 // creation. Kind of a brittle arrangement here...68 return getInstanceVariable("__attached__");69 }70 71 publicIRubyObject allocateObject() {72 throw getRuntime().newTypeError("can't create instance of virtual class");73 }74 }75