|
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.
|