From: <fd...@us...> - 2009-12-11 17:49:14
|
Revision: 5696 http://jnode.svn.sourceforge.net/jnode/?rev=5696&view=rev Author: fduminy Date: 2009-12-11 17:49:06 +0000 (Fri, 11 Dec 2009) Log Message: ----------- - before, VmType and BaseMagicHelper had both definition of magic classes. now, it's centralized in BaseMagicHelper - moved BaseMagicHelper from org.jnode.vm.x86.compiler to org.jnode.vm.classmgr to avoid that classmgr depends on x86 compiler Modified Paths: -------------- trunk/core/src/core/org/jnode/vm/VmMagic.java trunk/core/src/core/org/jnode/vm/classmgr/VmType.java trunk/core/src/core/org/jnode/vm/x86/compiler/BaseX86MagicHelper.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/MagicHelper.java trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/MagicHelper.java trunk/core/src/vmmagic/org/vmmagic/unboxed/Address.java trunk/core/src/vmmagic/org/vmmagic/unboxed/Extent.java trunk/core/src/vmmagic/org/vmmagic/unboxed/Offset.java trunk/core/src/vmmagic/org/vmmagic/unboxed/Word.java Added Paths: ----------- trunk/core/src/core/org/jnode/vm/classmgr/BaseMagicHelper.java Removed Paths: ------------- trunk/core/src/core/org/jnode/vm/compiler/BaseMagicHelper.java Modified: trunk/core/src/core/org/jnode/vm/VmMagic.java =================================================================== --- trunk/core/src/core/org/jnode/vm/VmMagic.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/VmMagic.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -36,8 +36,8 @@ * Methods in this class can also be called from inside JNode. * * @author Ewout Prangsma (ep...@us...) - * @see {@link org.jnode.vm.compiler.BaseMagicHelper.MagicClass} to get the list of "magic" classes (including this class). - * @see {@link org.jnode.vm.compiler.BaseMagicHelper.MagicMethod} to get the list of "magic" methods. + * @see {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicClass} to get the list of "magic" classes (including this class). + * @see {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod} to get the list of "magic" methods. */ @MagicPermission public final class VmMagic { Copied: trunk/core/src/core/org/jnode/vm/classmgr/BaseMagicHelper.java (from rev 5693, trunk/core/src/core/org/jnode/vm/compiler/BaseMagicHelper.java) =================================================================== --- trunk/core/src/core/org/jnode/vm/classmgr/BaseMagicHelper.java (rev 0) +++ trunk/core/src/core/org/jnode/vm/classmgr/BaseMagicHelper.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -0,0 +1,321 @@ +/* + * $Id$ + * + * Copyright (C) 2003-2009 JNode.org + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; If not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jnode.vm.classmgr; + +import java.util.Map; + +import org.jnode.util.BootableHashMap; +import org.jnode.annotation.SharedStatics; + +/** + * @author Ewout Prangsma (ep...@us...) + */ +public class BaseMagicHelper { + + /** + * Enum of all magic classes. + * + * @author Ewout Prangsma (ep...@us...) + */ + @SharedStatics + public enum MagicClass { + ADDRESS("org.vmmagic.unboxed.Address"), + EXTENT("org.vmmagic.unboxed.Extent"), + OBJECTREFERENCE("org.vmmagic.unboxed.ObjectReference"), + OFFSET("org.vmmagic.unboxed.Offset"), + WORD("org.vmmagic.unboxed.Word"), + ADDRESSARRAY("org.vmmagic.unboxed.AddressArray"), + EXTENTARRAY("org.vmmagic.unboxed.ExtentArray"), + OBJECTREFERENCEARRAY("org.vmmagic.unboxed.ObjectReferenceArray"), + OFFSETARRAY("org.vmmagic.unboxed.OffsetArray"), + WORDARRAY("org.vmmagic.unboxed.WordArray"), + VMMAGIC("org.jnode.vm.VmMagic"); + + /** + * Name of the class + */ + private final String name; + + /** + * Lookup table + */ + private static final Map<String, MagicClass> nameToClass; + + /** + * Initialize this instance. + * + * @param name + */ + private MagicClass(String name) { + this.name = name; + } + + /** + * Initialize the lookup table + */ + static { + nameToClass = new BootableHashMap<String, MagicClass>(); + for (MagicClass mc : values()) { + nameToClass.put(mc.name, mc); + } + } + + /** + * Gets the MagicClass instance for the given type. + * + * @param type + * @return a MagicClass instance + * @throws InternalError When type is no magic type. + */ + public static MagicClass get(VmType<?> type) { + MagicClass mc = nameToClass.get(type.getName()); + if (mc == null) { + throw new InternalError("Unknown magic type " + type.getName()); + } else { + return mc; + } + } + + /** + * Indicate if the given class name corresponds to a magic class. + * + * @param name Name of a class. + * @return true if the class is magic. + */ + static boolean isMagic(String name) { + boolean magic = false; + for (MagicClass mc : values()) { + if (mc.name.equals(name)) { + magic = true; + break; + } + } + return magic; + } + } + + /** + * Enum of all methods in all magic classes. + * + * @author Ewout Prangsma (ep...@us...) + */ + @SharedStatics + public enum MagicMethod { + ADD("add", false), + AND("and", false), + OR("or", false), + NOT("not", false), + SUB("sub", false), + XOR("xor", false), + ZERO("zero", false), + MAX("max", false), + ONE("one", false), + TOINT("toInt", false), + TOLONG("toLong", false), + TOWORD("toWord", false), + TOADDRESS("toAddress", true), + TOEXTENT("toExtent", false), + TOOFFSET("toOffset", false), + TOOBJECTREFERENCE("toObjectReference", true), + EQUALS("equals", false), + ISZERO("isZero", false), + ISMAX("isMax", false), + ISNULL("isNull", false), + EQ("EQ", false), + NE("NE", false), + GT("GT", false), + GE("GE", false), + LT("LT", false), + LE("LE", false), + SGT("sGT", false), + SGE("sGE", false), + SLT("sLT", false), + SLE("sLE", false), + FROMINT("fromInt", false), + FROMINTSIGNEXTEND("fromIntSignExtend", false), + FROMINTZEROEXTEND("fromIntZeroExtend", false), + FROMLONG("fromLong", false), + LSH("lsh", false), + RSHL("rshl", false), + RSHA("rsha", false), + LOADBYTE("loadByte", true, "()B"), + LOADBYTE_OFS("loadByte", true, "(Lorg/vmmagic/unboxed/Offset;)B"), + LOADCHAR("loadChar", true, "()C"), + LOADCHAR_OFS("loadChar", true, "(Lorg/vmmagic/unboxed/Offset;)C"), + LOADSHORT("loadShort", true, "()S"), + LOADSHORT_OFS("loadShort", true, "(Lorg/vmmagic/unboxed/Offset;)S"), + LOADINT("loadInt", true, "()I"), + LOADINT_OFS("loadInt", true, "(Lorg/vmmagic/unboxed/Offset;)I"), + LOADFLOAT("loadFloat", true, "()F"), + LOADFLOAT_OFS("loadFloat", true, "(Lorg/vmmagic/unboxed/Offset;)F"), + LOADLONG("loadLong", true, "()J"), + LOADLONG_OFS("loadLong", true, "(Lorg/vmmagic/unboxed/Offset;)J"), + LOADDOUBLE("loadDouble", true, "()D"), + LOADDOUBLE_OFS("loadDouble", true, "(Lorg/vmmagic/unboxed/Offset;)D"), + LOADADDRESS("loadAddress", true, "()Lorg/vmmagic/unboxed/Address;"), + LOADADDRESS_OFS("loadAddress", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Address;"), + LOADWORD("loadWord", true, "()Lorg/vmmagic/unboxed/Word;"), + LOADWORD_OFS("loadWord", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Word;"), + LOADOBJECTREFERENCE("loadObjectReference", true, "()Lorg/vmmagic/unboxed/ObjectReference;"), + LOADOBJECTREFERENCE_OFS("loadObjectReference", true, + "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/ObjectReference;"), + SIZE("size", false), + STOREBYTE("store", true, "(B)V"), + STOREBYTE_OFS("store", true, "(BLorg/vmmagic/unboxed/Offset;)V"), + STORECHAR("store", true, "(C)V"), + STORECHAR_OFS("store", true, "(CLorg/vmmagic/unboxed/Offset;)V"), + STORESHORT("store", true, "(S)V"), + STORESHORT_OFS("store", true, "(SLorg/vmmagic/unboxed/Offset;)V"), + STOREINT("store", true, "(I)V"), + STOREINT_OFS("store", true, "(ILorg/vmmagic/unboxed/Offset;)V"), + STOREFLOAT("store", true, "(F)V"), + STOREFLOAT_OFS("store", true, "(FLorg/vmmagic/unboxed/Offset;)V"), + STORELONG("store", true, "(J)V"), + STORELONG_OFS("store", true, "(JLorg/vmmagic/unboxed/Offset;)V"), + STOREDOUBLE("store", true, "(D)V"), + STOREDOUBLE_OFS("store", true, "(DLorg/vmmagic/unboxed/Offset;)V"), + STOREADDRESS("store", true, "(Lorg/vmmagic/unboxed/Address;)V"), + STOREADDRESS_OFS("store", true, "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Offset;)V"), + STOREWORD("store", true, "(Lorg/vmmagic/unboxed/Word;)V"), + STOREWORD_OFS("store", true, "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Offset;)V"), + STOREOBJECTREFERENCE("store", true, "(Lorg/vmmagic/unboxed/ObjectReference;)V"), + STOREOBJECTREFERENCE_OFS("store", true, "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/Offset;)V"), + PREPAREINT("prepareInt", true, "()I"), + PREPAREINT_OFS("prepareInt", true, "(Lorg/vmmagic/unboxed/Offset;)I"), + PREPAREADDRESS("prepareAddress", true, "()Lorg/vmmagic/unboxed/Address;"), + PREPAREADDRESS_OFS("prepareAddress", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Address;"), + PREPAREWORD("prepareWord", true, "()Lorg/vmmagic/unboxed/Word;"), + PREPAREWORD_OFS("prepareWord", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Word;"), + PREPAREOBJECTREFERENCE("prepareObjectReference", true, "()Lorg/vmmagic/unboxed/ObjectReference;"), + PREPAREOBJECTREFERENCE_OFS("prepareObjectReference", true, + "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/ObjectReference;"), + ATTEMPTINT("attempt", true, "(II)Z"), + ATTEMPTINT_OFS("attempt", true, "(IILorg/vmmagic/unboxed/Offset;)Z"), + ATTEMPTADDRESS("attempt", true, "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;)Z"), + ATTEMPTADDRESS_OFS("attempt", true, + "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Offset;)Z"), + ATTEMPTOBJECTREFERENCE("attempt", true, + "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/ObjectReference;)Z"), + ATTEMPTOBJECTREFERENCE_OFS("attempt", true, + "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/ObjectReference;" + + "Lorg/vmmagic/unboxed/Offset;)Z"), + ATTEMPTWORD("attempt", true, "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z"), + ATTEMPTWORD_OFS("attempt", true, + "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Offset;)Z"), + FROMOBJECT("fromObject", true), + FROMADDRESS("fromAddress", true), + GETOBJECTTYPE("getObjectType", true), + GETTIB("getTIB", true), + GETOBJECTFLAGS("getObjectFlags", true), + SETOBJECTFLAGS("setObjectFlags", true), + TOOBJECT("toObject", true), + GETARRAYDATA("getArrayData", true), + GETOBJECTCOLOR("getObjectColor", true), + ISFINALIZED("isFinalized", true), + ATOMICADD("atomicAdd", true), + ATOMICAND("atomicAnd", true), + ATOMICOR("atomicOr", true), + ATOMICSUB("atomicSub", true), + GETCURRENTFRAME("getCurrentFrame", true), + GETTIMESTAMP("getTimeStamp", true), + INTBITSTOFLOAT("intBitsToFloat", false), + FLOATTORAWINTBITS("floatToRawIntBits", false), + LONGBITSTODOUBLE("longBitsToDouble", false), + DOUBLETORAWLONGBITS("doubleToRawLongBits", false), + BREAKPOINT("breakPoint", true), + DIFF("diff", false), + NULLREFERENCE("nullReference", false), + CURRENTPROCESSOR("currentProcessor", true, "()Lorg/jnode/vm/scheduler/VmProcessor;"), + GETSHAREDSTATICSFIELDADDRESS("getSharedStaticFieldAddress", true), + GETISOLATEDSTATICSFIELDADDRESS("getIsolatedStaticFieldAddress", true), + ISRUNNINGJNODE("isRunningJNode", false, "()Z"), + + // Array classes + ARR_CREATE("create", true), + ARR_GET("get", true), + ARR_SET("set", true), + ARR_LENGTH("length", false); + + private final String name; + private final String signature; + private final boolean permissionRequired; + private static BootableHashMap<VmMethod, MagicMethod> methods = new BootableHashMap<VmMethod, MagicMethod>(); + + private MagicMethod(String name, boolean permissionRequired) { + this.name = name; + this.signature = null; + this.permissionRequired = permissionRequired; + } + + private MagicMethod(String name, boolean permissionRequired, String signature) { + this.name = name; + this.permissionRequired = permissionRequired; + this.signature = signature; + } + + public static MagicMethod get(VmMethod method) { + MagicMethod mm = methods.get(method); + if (mm != null) { + return mm; + } + final String mname = method.getName(); + final String msignature = method.getSignature(); + + for (MagicMethod m : values()) { + if (m.name.equals(mname)) { + if ((m.signature == null) || m.signature.equals(msignature)) { + methods.put(method, m); + return m; + } + + } + } + throw new InternalError("Unknown method " + mname + '#' + msignature + " in " + + method.getDeclaringClass().getName()); + } + + /** + * Is MagicPermission required for this method. + * + * @return + */ + final boolean isPermissionRequired() { + return this.permissionRequired; + } + } + + /** + * Is the given method allowed to call magic code. + * + * @param caller + */ + public static void testMagicPermission(MagicMethod callee, VmMethod caller) + throws SecurityException { + if (callee.isPermissionRequired()) { + if (!caller.getDeclaringClass().isMagicPermissionGranted()) { + System.out.println("MagicPermission is not granted for type: " + + caller.getDeclaringClass().getName()); + // throw new SecurityException("MagicPermission is not granted + // for method: " + caller.getFullName()); + } + } + } +} Modified: trunk/core/src/core/org/jnode/vm/classmgr/VmType.java =================================================================== --- trunk/core/src/core/org/jnode/vm/classmgr/VmType.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/classmgr/VmType.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -302,18 +302,8 @@ throw new IllegalArgumentException("name contains '/'"); } - final String pkg = VMClassHelper.getPackagePortion(name); - if (pkg.equals("org.vmmagic.unboxed") || pkg.equals("org.jnode.vm")) { - final String cname = VMClassHelper.getClassNamePortion(name); - if (cname.equals("Address") || cname.equals("AddressArray") - || cname.equals("Extent") || cname.equals("ExtentArray") - || cname.equals("ObjectReference") - || cname.equals("ObjectReferenceArray") - || cname.equals("Offset") || cname.equals("OffsetArray") - || cname.equals("Word") || cname.equals("WordArray") - | cname.equals("VmMagic")) { - modifiers |= Modifier.ACC_MAGIC; - } + if (BaseMagicHelper.MagicClass.isMagic(name)) { + modifiers |= Modifier.ACC_MAGIC; } this.name = InternString.internString(name); Deleted: trunk/core/src/core/org/jnode/vm/compiler/BaseMagicHelper.java =================================================================== --- trunk/core/src/core/org/jnode/vm/compiler/BaseMagicHelper.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/compiler/BaseMagicHelper.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -1,306 +0,0 @@ -/* - * $Id$ - * - * Copyright (C) 2003-2009 JNode.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; If not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package org.jnode.vm.compiler; - -import java.util.Map; - -import org.jnode.util.BootableHashMap; -import org.jnode.vm.classmgr.VmMethod; -import org.jnode.vm.classmgr.VmType; -import org.jnode.annotation.SharedStatics; - -/** - * @author Ewout Prangsma (ep...@us...) - */ -public class BaseMagicHelper { - - /** - * Enum of all magic classes. - * - * @author Ewout Prangsma (ep...@us...) - */ - @SharedStatics - public enum MagicClass { - ADDRESS("org.vmmagic.unboxed.Address"), - EXTENT("org.vmmagic.unboxed.Extent"), - OBJECTREFERENCE("org.vmmagic.unboxed.ObjectReference"), - OFFSET("org.vmmagic.unboxed.Offset"), - WORD("org.vmmagic.unboxed.Word"), - ADDRESSARRAY("org.vmmagic.unboxed.AddressArray"), - EXTENTARRAY("org.vmmagic.unboxed.ExtentArray"), - OBJECTREFERENCEARRAY("org.vmmagic.unboxed.ObjectReferenceArray"), - OFFSETARRAY("org.vmmagic.unboxed.OffsetArray"), - WORDARRAY("org.vmmagic.unboxed.WordArray"), - VMMAGIC("org.jnode.vm.VmMagic"); - - /** - * Name of the class - */ - private final String name; - - /** - * Lookup table - */ - private static final Map<String, MagicClass> nameToClass; - - /** - * Initialize this instance. - * - * @param name - */ - private MagicClass(String name) { - this.name = name; - } - - /** - * Initialize the lookup table - */ - static { - nameToClass = new BootableHashMap<String, MagicClass>(); - for (MagicClass mc : values()) { - nameToClass.put(mc.name, mc); - } - } - - /** - * Gets the MagicClass instance for the given type. - * - * @param type - * @return a MagicClass instance - * @throws InternalError When type is no magic type. - */ - public static MagicClass get(VmType<?> type) { - MagicClass mc = nameToClass.get(type.getName()); - if (mc == null) { - throw new InternalError("Unknown magic type " + type.getName()); - } else { - return mc; - } - } - } - - /** - * Enum of all methods in all magic classes. - * - * @author Ewout Prangsma (ep...@us...) - */ - @SharedStatics - public enum MagicMethod { - ADD("add", false), - AND("and", false), - OR("or", false), - NOT("not", false), - SUB("sub", false), - XOR("xor", false), - ZERO("zero", false), - MAX("max", false), - ONE("one", false), - TOINT("toInt", false), - TOLONG("toLong", false), - TOWORD("toWord", false), - TOADDRESS("toAddress", true), - TOEXTENT("toExtent", false), - TOOFFSET("toOffset", false), - TOOBJECTREFERENCE("toObjectReference", true), - EQUALS("equals", false), - ISZERO("isZero", false), - ISMAX("isMax", false), - ISNULL("isNull", false), - EQ("EQ", false), - NE("NE", false), - GT("GT", false), - GE("GE", false), - LT("LT", false), - LE("LE", false), - SGT("sGT", false), - SGE("sGE", false), - SLT("sLT", false), - SLE("sLE", false), - FROMINT("fromInt", false), - FROMINTSIGNEXTEND("fromIntSignExtend", false), - FROMINTZEROEXTEND("fromIntZeroExtend", false), - FROMLONG("fromLong", false), - LSH("lsh", false), - RSHL("rshl", false), - RSHA("rsha", false), - LOADBYTE("loadByte", true, "()B"), - LOADBYTE_OFS("loadByte", true, "(Lorg/vmmagic/unboxed/Offset;)B"), - LOADCHAR("loadChar", true, "()C"), - LOADCHAR_OFS("loadChar", true, "(Lorg/vmmagic/unboxed/Offset;)C"), - LOADSHORT("loadShort", true, "()S"), - LOADSHORT_OFS("loadShort", true, "(Lorg/vmmagic/unboxed/Offset;)S"), - LOADINT("loadInt", true, "()I"), - LOADINT_OFS("loadInt", true, "(Lorg/vmmagic/unboxed/Offset;)I"), - LOADFLOAT("loadFloat", true, "()F"), - LOADFLOAT_OFS("loadFloat", true, "(Lorg/vmmagic/unboxed/Offset;)F"), - LOADLONG("loadLong", true, "()J"), - LOADLONG_OFS("loadLong", true, "(Lorg/vmmagic/unboxed/Offset;)J"), - LOADDOUBLE("loadDouble", true, "()D"), - LOADDOUBLE_OFS("loadDouble", true, "(Lorg/vmmagic/unboxed/Offset;)D"), - LOADADDRESS("loadAddress", true, "()Lorg/vmmagic/unboxed/Address;"), - LOADADDRESS_OFS("loadAddress", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Address;"), - LOADWORD("loadWord", true, "()Lorg/vmmagic/unboxed/Word;"), - LOADWORD_OFS("loadWord", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Word;"), - LOADOBJECTREFERENCE("loadObjectReference", true, "()Lorg/vmmagic/unboxed/ObjectReference;"), - LOADOBJECTREFERENCE_OFS("loadObjectReference", true, - "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/ObjectReference;"), - SIZE("size", false), - STOREBYTE("store", true, "(B)V"), - STOREBYTE_OFS("store", true, "(BLorg/vmmagic/unboxed/Offset;)V"), - STORECHAR("store", true, "(C)V"), - STORECHAR_OFS("store", true, "(CLorg/vmmagic/unboxed/Offset;)V"), - STORESHORT("store", true, "(S)V"), - STORESHORT_OFS("store", true, "(SLorg/vmmagic/unboxed/Offset;)V"), - STOREINT("store", true, "(I)V"), - STOREINT_OFS("store", true, "(ILorg/vmmagic/unboxed/Offset;)V"), - STOREFLOAT("store", true, "(F)V"), - STOREFLOAT_OFS("store", true, "(FLorg/vmmagic/unboxed/Offset;)V"), - STORELONG("store", true, "(J)V"), - STORELONG_OFS("store", true, "(JLorg/vmmagic/unboxed/Offset;)V"), - STOREDOUBLE("store", true, "(D)V"), - STOREDOUBLE_OFS("store", true, "(DLorg/vmmagic/unboxed/Offset;)V"), - STOREADDRESS("store", true, "(Lorg/vmmagic/unboxed/Address;)V"), - STOREADDRESS_OFS("store", true, "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Offset;)V"), - STOREWORD("store", true, "(Lorg/vmmagic/unboxed/Word;)V"), - STOREWORD_OFS("store", true, "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Offset;)V"), - STOREOBJECTREFERENCE("store", true, "(Lorg/vmmagic/unboxed/ObjectReference;)V"), - STOREOBJECTREFERENCE_OFS("store", true, "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/Offset;)V"), - PREPAREINT("prepareInt", true, "()I"), - PREPAREINT_OFS("prepareInt", true, "(Lorg/vmmagic/unboxed/Offset;)I"), - PREPAREADDRESS("prepareAddress", true, "()Lorg/vmmagic/unboxed/Address;"), - PREPAREADDRESS_OFS("prepareAddress", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Address;"), - PREPAREWORD("prepareWord", true, "()Lorg/vmmagic/unboxed/Word;"), - PREPAREWORD_OFS("prepareWord", true, "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/Word;"), - PREPAREOBJECTREFERENCE("prepareObjectReference", true, "()Lorg/vmmagic/unboxed/ObjectReference;"), - PREPAREOBJECTREFERENCE_OFS("prepareObjectReference", true, - "(Lorg/vmmagic/unboxed/Offset;)Lorg/vmmagic/unboxed/ObjectReference;"), - ATTEMPTINT("attempt", true, "(II)Z"), - ATTEMPTINT_OFS("attempt", true, "(IILorg/vmmagic/unboxed/Offset;)Z"), - ATTEMPTADDRESS("attempt", true, "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;)Z"), - ATTEMPTADDRESS_OFS("attempt", true, - "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Offset;)Z"), - ATTEMPTOBJECTREFERENCE("attempt", true, - "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/ObjectReference;)Z"), - ATTEMPTOBJECTREFERENCE_OFS("attempt", true, - "(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/ObjectReference;" + - "Lorg/vmmagic/unboxed/Offset;)Z"), - ATTEMPTWORD("attempt", true, "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;)Z"), - ATTEMPTWORD_OFS("attempt", true, - "(Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Offset;)Z"), - FROMOBJECT("fromObject", true), - FROMADDRESS("fromAddress", true), - GETOBJECTTYPE("getObjectType", true), - GETTIB("getTIB", true), - GETOBJECTFLAGS("getObjectFlags", true), - SETOBJECTFLAGS("setObjectFlags", true), - TOOBJECT("toObject", true), - GETARRAYDATA("getArrayData", true), - GETOBJECTCOLOR("getObjectColor", true), - ISFINALIZED("isFinalized", true), - ATOMICADD("atomicAdd", true), - ATOMICAND("atomicAnd", true), - ATOMICOR("atomicOr", true), - ATOMICSUB("atomicSub", true), - GETCURRENTFRAME("getCurrentFrame", true), - GETTIMESTAMP("getTimeStamp", true), - INTBITSTOFLOAT("intBitsToFloat", false), - FLOATTORAWINTBITS("floatToRawIntBits", false), - LONGBITSTODOUBLE("longBitsToDouble", false), - DOUBLETORAWLONGBITS("doubleToRawLongBits", false), - BREAKPOINT("breakPoint", true), - DIFF("diff", false), - NULLREFERENCE("nullReference", false), - CURRENTPROCESSOR("currentProcessor", true, "()Lorg/jnode/vm/scheduler/VmProcessor;"), - GETSHAREDSTATICSFIELDADDRESS("getSharedStaticFieldAddress", true), - GETISOLATEDSTATICSFIELDADDRESS("getIsolatedStaticFieldAddress", true), - ISRUNNINGJNODE("isRunningJNode", false, "()Z"), - - // Array classes - ARR_CREATE("create", true), - ARR_GET("get", true), - ARR_SET("set", true), - ARR_LENGTH("length", false); - - private final String name; - private final String signature; - private final boolean permissionRequired; - private static BootableHashMap<VmMethod, MagicMethod> methods = new BootableHashMap<VmMethod, MagicMethod>(); - - private MagicMethod(String name, boolean permissionRequired) { - this.name = name; - this.signature = null; - this.permissionRequired = permissionRequired; - } - - private MagicMethod(String name, boolean permissionRequired, String signature) { - this.name = name; - this.permissionRequired = permissionRequired; - this.signature = signature; - } - - public static MagicMethod get(VmMethod method) { - MagicMethod mm = methods.get(method); - if (mm != null) { - return mm; - } - final String mname = method.getName(); - final String msignature = method.getSignature(); - - for (MagicMethod m : values()) { - if (m.name.equals(mname)) { - if ((m.signature == null) || m.signature.equals(msignature)) { - methods.put(method, m); - return m; - } - - } - } - throw new InternalError("Unknown method " + mname + '#' + msignature + " in " - + method.getDeclaringClass().getName()); - } - - /** - * Is MagicPermission required for this method. - * - * @return - */ - final boolean isPermissionRequired() { - return this.permissionRequired; - } - } - - /** - * Is the given method allowed to call magic code. - * - * @param caller - */ - public static void testMagicPermission(MagicMethod callee, VmMethod caller) - throws SecurityException { - if (callee.isPermissionRequired()) { - if (!caller.getDeclaringClass().isMagicPermissionGranted()) { - System.out.println("MagicPermission is not granted for type: " - + caller.getDeclaringClass().getName()); - // throw new SecurityException("MagicPermission is not granted - // for method: " + caller.getFullName()); - } - } - } -} Modified: trunk/core/src/core/org/jnode/vm/x86/compiler/BaseX86MagicHelper.java =================================================================== --- trunk/core/src/core/org/jnode/vm/x86/compiler/BaseX86MagicHelper.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/x86/compiler/BaseX86MagicHelper.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -23,7 +23,7 @@ import org.jnode.assembler.x86.X86Constants; import org.jnode.assembler.x86.X86Operation; import org.jnode.vm.JvmType; -import org.jnode.vm.compiler.BaseMagicHelper; +import org.jnode.vm.classmgr.BaseMagicHelper; /** * @author Ewout Prangsma (ep...@us...) Modified: trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/MagicHelper.java =================================================================== --- trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/MagicHelper.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/x86/compiler/l1a/MagicHelper.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -20,12 +20,12 @@ package org.jnode.vm.x86.compiler.l1a; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.ATTEMPTINT; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.FROMINTZEROEXTEND; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.INTBITSTOFLOAT; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LOADCHAR; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LOADCHAR_OFS; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LONGBITSTODOUBLE; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.ATTEMPTINT; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.FROMINTZEROEXTEND; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.INTBITSTOFLOAT; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LOADCHAR; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LOADCHAR_OFS; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LONGBITSTODOUBLE; import org.jnode.assembler.x86.X86Assembler; import org.jnode.assembler.x86.X86Constants; Modified: trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/MagicHelper.java =================================================================== --- trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/MagicHelper.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/core/org/jnode/vm/x86/compiler/l1b/MagicHelper.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -20,12 +20,12 @@ package org.jnode.vm.x86.compiler.l1b; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.ATTEMPTINT; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.FROMINTZEROEXTEND; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.INTBITSTOFLOAT; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LOADCHAR; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LOADCHAR_OFS; -import static org.jnode.vm.compiler.BaseMagicHelper.MagicMethod.LONGBITSTODOUBLE; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.ATTEMPTINT; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.FROMINTZEROEXTEND; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.INTBITSTOFLOAT; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LOADCHAR; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LOADCHAR_OFS; +import static org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod.LONGBITSTODOUBLE; import org.jnode.assembler.x86.X86Assembler; import org.jnode.assembler.x86.X86Constants; Modified: trunk/core/src/vmmagic/org/vmmagic/unboxed/Address.java =================================================================== --- trunk/core/src/vmmagic/org/vmmagic/unboxed/Address.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/vmmagic/org/vmmagic/unboxed/Address.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -24,9 +24,9 @@ * methods that are interpreted by the VM itself, instead of being executed * as normal java methods. The actual method bodies are not used. <br/> * For further details, see the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicClass list of "magic" classes} + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicClass list of "magic" classes} * and the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicMethod list of "magic" methods}. + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod list of "magic" methods}. * * @author Daniel Frampton */ Modified: trunk/core/src/vmmagic/org/vmmagic/unboxed/Extent.java =================================================================== --- trunk/core/src/vmmagic/org/vmmagic/unboxed/Extent.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/vmmagic/org/vmmagic/unboxed/Extent.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -18,9 +18,9 @@ * methods that are interpreted by the VM itself, instead of being executed * as normal java methods. The actual method bodies are not used. <br/> * For further details, see the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicClass list of "magic" classes} + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicClass list of "magic" classes} * and the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicMethod list of "magic" methods}. + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod list of "magic" methods}. * * @author Daniel Frampton */ Modified: trunk/core/src/vmmagic/org/vmmagic/unboxed/Offset.java =================================================================== --- trunk/core/src/vmmagic/org/vmmagic/unboxed/Offset.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/vmmagic/org/vmmagic/unboxed/Offset.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -19,9 +19,9 @@ * methods that are interpreted by the VM itself, instead of being executed * as normal java methods. The actual method bodies are not used. <br/> * For further details, see the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicClass list of "magic" classes} + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicClass list of "magic" classes} * and the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicMethod list of "magic" methods}. + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod list of "magic" methods}. * * @author Ewout Prangsma (ep...@us...) * @author Daniel Frampton Modified: trunk/core/src/vmmagic/org/vmmagic/unboxed/Word.java =================================================================== --- trunk/core/src/vmmagic/org/vmmagic/unboxed/Word.java 2009-12-11 00:14:12 UTC (rev 5695) +++ trunk/core/src/vmmagic/org/vmmagic/unboxed/Word.java 2009-12-11 17:49:06 UTC (rev 5696) @@ -22,9 +22,9 @@ * methods that are interpreted by the VM itself, instead of being executed * as normal java methods. The actual method bodies are not used. <br/> * For further details, see the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicClass list of "magic" classes} + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicClass list of "magic" classes} * and the - * {@link org.jnode.vm.compiler.BaseMagicHelper.MagicMethod list of "magic" methods}. + * {@link org.jnode.vm.classmgr.BaseMagicHelper.MagicMethod list of "magic" methods}. * * @author Ewout Prangsma (ep...@us...) * @author Daniel Frampton This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |