dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] pnet ChangeLog engine/cvm.h engine/cvm_ptr.c en...


From: Klaus Treichel
Subject: [dotgnu-pnet-commits] pnet ChangeLog engine/cvm.h engine/cvm_ptr.c en...
Date: Fri, 17 Aug 2007 19:18:28 +0000

CVSROOT:        /cvsroot/dotgnu-pnet
Module name:    pnet
Changes by:     Klaus Treichel <ktreichel>      07/08/17 19:18:27

Modified files:
        .              : ChangeLog 
        engine         : cvm.h cvm_ptr.c cvm_stack.c cvmc.c cvmc_obj.c 
                         cvmc_ptr.c jitc.c jitc_call.c jitc_obj.c 
                         jitc_ptr.c null_coder.c 
        include        : il_coder.h 

Log message:
        Implement the new coder functions to support the .NET 2.0 constained 
prefix.
        (Ivan De Jesus Deras Tabora)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3486&r2=1.3487
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvm.h?cvsroot=dotgnu-pnet&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvm_ptr.c?cvsroot=dotgnu-pnet&r1=1.50&r2=1.51
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvm_stack.c?cvsroot=dotgnu-pnet&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvmc.c?cvsroot=dotgnu-pnet&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvmc_obj.c?cvsroot=dotgnu-pnet&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvmc_ptr.c?cvsroot=dotgnu-pnet&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc.c?cvsroot=dotgnu-pnet&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_call.c?cvsroot=dotgnu-pnet&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_obj.c?cvsroot=dotgnu-pnet&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_ptr.c?cvsroot=dotgnu-pnet&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/null_coder.c?cvsroot=dotgnu-pnet&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/pnet/include/il_coder.h?cvsroot=dotgnu-pnet&r1=1.54&r2=1.55

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3486
retrieving revision 1.3487
diff -u -b -r1.3486 -r1.3487
--- ChangeLog   15 Aug 2007 18:55:17 -0000      1.3486
+++ ChangeLog   17 Aug 2007 19:18:25 -0000      1.3487
@@ -1,3 +1,42 @@
+2007-08-17  Ivan de Jesus Deras Tabora  <address@hidden>
+
+       * engine/cvm.h: Define the new cvm opcode COP_PREFIX_REPL_WORD_N to
+       replace a word on the stack with the stacktop.
+
+       * engine/cvm_ptr.c: Handle generic types in CanCastClass.
+
+       * engine/cvm_stack.c: Implement the new cvm opcode 
COP_PREFIX_REPL_WORD_N.
+
+       * engine/cvmc.c: Add the new coder functions PtrDeref and BoxPtr to the
+       cvm coder structure.
+
+       * engine/cvmc_obj.c: Add the function CVMCoder_BoxPtr to box a value
+       referenced by a pointer somewhere on the stack and replace the reference
+       with the boxed valuetype.
+
+       * engine/cvmc_ptr.c: Add the function CVMCoder_PtrDeref to dereference a
+       pointer somewhere on the stack.
+
+       * engine/jitc.c: Handle creation of jitFunctions for instanciations of
+       generic methods. Add the new coder functions PtrDeref and BoxPtr to the
+       jit coder structure.
+
+       * engine/jitc_call.c: Handle creation of jitFunctions for 
instanciations of
+       generic methods.
+
+       * engine/jitc_obj.c: Add the function JITCoder_BoxPtr to box a value
+       referenced by a pointer somewhere on the stack and replace the reference
+       with the boxed valuetype.
+
+       * engine/jitc_ptr.c: Add the function JITCoder_PtrDeref to dereference a
+       pointer somewhere on the stack.
+
+       * engine/null_coder.c: Add the new coder functions PtrDeref and BoxPtr 
to
+       the null coder structure and the stubs for the new functions.
+
+       * include/il_coder.h:  Add the new coder functions PtrDeref and BoxPtr 
to
+       the coder structure and the helper macros for the new functions.
+
 2007-08-15  Klaus Treichel  <address@hidden>
 
        * image/program.h: Add the member refInfo to the ILTypeSpec. The
@@ -169,7 +208,7 @@
        * image/meta_writer.c: Add a function to sort the generic parameters.
        Set the major metadata version to 2 if the IL_VERSION_MAJOR is > 1.
 
-2007-07-01  Ivan de Jesus Daras Tabora  <address@hidden>
+2007-07-01  Ivan de Jesus Deras Tabora  <address@hidden>
 
        * csdoc/il2doc.c: Replace the code for printing the generic parameters
        with a call to ILAsmDumpGenericParams.

Index: engine/cvm.h
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvm.h,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- engine/cvm.h        17 Mar 2007 19:11:37 -0000      1.55
+++ engine/cvm.h        17 Aug 2007 19:18:26 -0000      1.56
@@ -577,6 +577,11 @@
 #define COP_PREFIX_UNROLL_STACK_RETURN         0x8C
 
 /*
+* Replace a word in the stack.
+*/
+#define COP_PREFIX_REPL_WORD_N                 0x8D
+
+/*
  * Definition of a CVM stack word which can hold
  * either 32-bit quantities or pointers.
  */

Index: engine/cvm_ptr.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvm_ptr.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- engine/cvm_ptr.c    7 Jan 2007 16:28:53 -0000       1.50
+++ engine/cvm_ptr.c    17 Aug 2007 19:18:26 -0000      1.51
@@ -84,6 +84,12 @@
                        return ILTypeAssignCompatibleNonBoxing
                          (image, ILTypeGetElemType(fromType), 
ILTypeGetElemType(toType));
                }
+               else if(ILType_IsWith(fromType) && ILType_IsWith(toType))
+               {
+                       /* TODO: perform a real check of assignment 
compatibility as
+                          described in ECMA 334 Version 4 Partition I 8.7 */
+                       return ILTypeIdentical(fromType, toType);
+               }
                else
                {
                        return 0;

Index: engine/cvm_stack.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvm_stack.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- engine/cvm_stack.c  17 Jun 2004 17:38:25 -0000      1.12
+++ engine/cvm_stack.c  17 Aug 2007 19:18:26 -0000      1.13
@@ -436,4 +436,29 @@
 }
 VMBREAK(COP_PREFIX_LOCAL_ALLOC);
 
+/**
+ * <opcode name="repl_word_n" group="Stack manipulation">
+ *   <operation>Replace a stack word that is <i>N</i> words
+ *                             down the stack with the value at top of the 
stack</operation>
+ *
+ *   <format>prefix<fsep/>repl_word_n</format>
+ *   <dformat>{repl_word_n}</dformat>
+ *
+ *   <form name="repl_word_n" code="COP_REPL_WORD_N"/>
+ *
+ *   <before>..., value, word1, ..., wordN-1, wordN</before>
+ *   <after>..., wordN, word1, ..., wordN-1</after>
+ *
+ *   <description>Replace the <i>value</i> that is <i>N</i> words
+ *   down the stack with the value on top of the stack and then pop 
stack.</description>
+ * </opcode>
+ */
+VMCASE(COP_PREFIX_REPL_WORD_N):
+{
+       tempNum = ((ILInt32)CVMP_ARG_WORD) + 1;
+       stacktop[-tempNum] = stacktop[-1];
+       MODIFY_PC_AND_STACK(CVMP_LEN_WORD, -1);
+}
+VMBREAK(COP_PREFIX_REPL_WORD_N);
+
 #endif /* IL_CVM_PREFIX */

Index: engine/cvmc.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- engine/cvmc.c       17 Mar 2007 19:11:37 -0000      1.55
+++ engine/cvmc.c       17 Aug 2007 19:18:26 -0000      1.56
@@ -532,6 +532,7 @@
        CVMCoder_Pop,
        CVMCoder_ArrayAccess,
        CVMCoder_PtrAccess,
+       CVMCoder_PtrDeref,
        CVMCoder_PtrAccessManaged,
        CVMCoder_Branch,
        CVMCoder_SwitchStart,
@@ -556,6 +557,7 @@
        CVMCoder_InitObject,
        CVMCoder_InitBlock,
        CVMCoder_Box,
+       CVMCoder_BoxPtr,
        CVMCoder_BoxSmaller,
        CVMCoder_Unbox,
        CVMCoder_MakeTypedRef,

Index: engine/cvmc_obj.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc_obj.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- engine/cvmc_obj.c   16 Jan 2007 06:46:08 -0000      1.21
+++ engine/cvmc_obj.c   17 Aug 2007 19:18:26 -0000      1.22
@@ -1046,6 +1046,21 @@
        }
 }
 
+static void CVMCoder_BoxPtr(ILCoder *coder, ILClass *boxClass,
+                                                       ILUInt32 size, ILUInt32 
pos)
+{
+       if(pos == 0)
+       {
+               CVM_OUT_WIDE_PTR(COP_BOX_PTR, size, boxClass);
+       }
+       else
+       {
+               CVM_OUT_WIDE(COP_DUP_WORD_N, pos);
+               CVM_OUT_WIDE_PTR(COP_BOX_PTR, size, boxClass);
+               CVMP_OUT_WORD(COP_PREFIX_REPL_WORD_N, pos+1);           
+       }
+}
+
 static void CVMCoder_Unbox(ILCoder *coder, ILClass *boxClass)
 {
        /* We don't have to do anything here: the object reference

Index: engine/cvmc_ptr.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc_ptr.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- engine/cvmc_ptr.c   23 Aug 2005 10:45:52 -0000      1.12
+++ engine/cvmc_ptr.c   17 Aug 2007 19:18:26 -0000      1.13
@@ -537,6 +537,23 @@
 }
 
 /*
++ * Handle a pointer indirection opcode.
++ */
+void CVMCoder_PtrDeref(ILCoder *coder, int pos)
+{
+       if(pos == 0)
+       {
+               CVMCoder_PtrAccess(coder, IL_OP_LDIND_REF);
+       }
+       else
+       {
+               CVM_OUT_WIDE(COP_DUP_WORD_N, pos);
+               CVMCoder_PtrAccess(coder, IL_OP_LDIND_REF);
+               CVMP_OUT_WORD(COP_PREFIX_REPL_WORD_N, pos+1);
+       }
+}
+
+/*
  * Handle a pointer indirection opcode for a managed value.
  */
 static void CVMCoder_PtrAccessManaged(ILCoder *coder, int opcode,

Index: engine/jitc.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- engine/jitc.c       3 Aug 2007 09:16:11 -0000       1.72
+++ engine/jitc.c       17 Aug 2007 19:18:26 -0000      1.73
@@ -1637,6 +1637,12 @@
                        return ILTypeAssignCompatibleNonBoxing
                          (image, ILTypeGetElemType(fromType), 
ILTypeGetElemType(toType));
                }
+               else if(ILType_IsWith(fromType) && ILType_IsWith(toType))
+               {
+                       /* TODO: perform a real check of assignment 
compatibility as
+                          described in ECMA 334 Version 4 Partition I 8.7 */
+                       return ILTypeIdentical(fromType, toType);
+               }
                else
                {
                        return 0;
@@ -4141,6 +4147,15 @@
                        return 0;
                }
                jitFunction = ILJitFunctionFromILMethod(method);
+               if(!jitFunction)
+               {
+                       /* This can be a generic method instance. */
+                       if(!ILJitFunctionCreate(thread->process->coder, method))
+                       {
+                               return 0;
+                       }
+                       jitFunction = ILJitFunctionFromILMethod(method);
+               }
        }
 
        if(!jit_function_apply(jitFunction, jitArgs, result))
@@ -4620,6 +4635,7 @@
        JITCoder_Pop,
        JITCoder_ArrayAccess,
        JITCoder_PtrAccess,
+       JITCoder_PtrDeref,
        JITCoder_PtrAccessManaged,
        JITCoder_Branch,
        JITCoder_SwitchStart,
@@ -4644,6 +4660,7 @@
        JITCoder_InitObject,
        JITCoder_InitBlock,
        JITCoder_Box,
+       JITCoder_BoxPtr,
        JITCoder_BoxSmaller,
        JITCoder_Unbox,
        JITCoder_MakeTypedRef,

Index: engine/jitc_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_call.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- engine/jitc_call.c  10 Mar 2007 21:54:57 -0000      1.39
+++ engine/jitc_call.c  17 Aug 2007 19:18:27 -0000      1.40
@@ -464,6 +464,15 @@
                        return;
                }
                jitFunction = ILJitFunctionFromILMethod(methodInfo);
+               if(!jitFunction)
+               {
+                       /* This can be a generic method instance. */
+                       
if(!ILJitFunctionCreate(ILExecThreadCurrent()->process->coder, methodInfo))
+                       {
+                               return;
+                       }
+                       jitFunction = ILJitFunctionFromILMethod(methodInfo);
+               }
        }
 
 #if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS) && 
defined(_IL_JIT_ENABLE_DEBUG)
@@ -986,6 +995,15 @@
                        return;
                }
                func = ILJitFunctionFromILMethod(methodInfo);
+               if(!func)
+               {
+                       /* This can be a generic method instance. */
+                       
if(!ILJitFunctionCreate(ILExecThreadCurrent()->process->coder, methodInfo))
+                       {
+                               return;
+                       }
+                       func = ILJitFunctionFromILMethod(methodInfo);
+               }
        }
 
 #ifdef IL_JIT_THREAD_IN_SIGNATURE

Index: engine/jitc_obj.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_obj.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- engine/jitc_obj.c   11 Feb 2007 14:34:32 -0000      1.28
+++ engine/jitc_obj.c   17 Aug 2007 19:18:27 -0000      1.29
@@ -929,9 +929,9 @@
                                                                                
         boxClass);
                value = jit_insn_load_relative(jitCoder->jitFunction, ptr, 0, 
jitType);
        }
-#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
        else
        {
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
                if (jitCoder->flags & IL_CODER_FLAG_STATS)
                {
                        ILMutexLock(globalTraceMutex);
@@ -941,9 +941,9 @@
                                size);
                        ILMutexUnlock(globalTraceMutex);
                }
+#endif
                value = _ILJitStackItemValue(stackItem);
        }
-#endif
 
        /* Allocate the object. */
        newObj = _ILJitAllocObjectGen(jitCoder->jitFunction, boxClass);
@@ -961,6 +961,41 @@
        _ILJitStackPushNotNullValue(jitCoder, newObj);
 }
 
+static void JITCoder_BoxPtr(ILCoder *coder, ILClass *boxClass,
+                                                       ILUInt32 size, ILUInt32 
pos)
+{
+       ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+       ILJitStackItem *stackItem;
+       ILJitValue ptr;
+       ILJitValue newObj;
+       ILJitValue jitSize = 
jit_value_create_nint_constant(jitCoder->jitFunction,
+                                                                               
                                _IL_JIT_TYPE_NINT,
+                                                                               
                                (jit_nint)size);
+
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
+       if (jitCoder->flags & IL_CODER_FLAG_STATS)
+       {
+               ILMutexLock(globalTraceMutex);
+               fprintf(stdout,
+                               "BoxPtr: %s Size: %i\n", 
+                               ILClass_Name(boxClass),
+                               size);
+               ILMutexUnlock(globalTraceMutex);
+       }
+#endif
+       stackItem = _ILJitStackItemGetTop(jitCoder, pos);
+       ptr = _ILJitStackItemValue(*stackItem);
+
+       /* Allocate the object. */
+       newObj = _ILJitAllocObjectGen(jitCoder->jitFunction, boxClass);
+
+       /* replace the pointer on the stack with the boxed value. */
+       _ILJitStackItemInitWithNotNullValue(*stackItem, newObj);
+
+       /* and copy the value to the boxed representation */
+       _ILJitStackItemMemCpy(jitCoder, *stackItem, ptr, jitSize);
+}
+
 static void JITCoder_BoxSmaller(ILCoder *coder, ILClass *boxClass,
                                                            ILEngineType 
valueType, ILType *smallerType)
 {

Index: engine/jitc_ptr.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_ptr.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- engine/jitc_ptr.c   17 Oct 2006 12:24:18 -0000      1.17
+++ engine/jitc_ptr.c   17 Aug 2007 19:18:27 -0000      1.18
@@ -238,6 +238,40 @@
 }
 
 /*
+ * Handle a pointer indirection opcode.
+ */
+static void JITCoder_PtrDeref(ILCoder *coder, int pos)
+{
+       ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+       ILJitStackItem *stackItem;
+       ILJitValue obj;
+
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
+       if (jitCoder->flags & IL_CODER_FLAG_STATS)
+       {
+               ILMutexLock(globalTraceMutex);
+               fprintf(stdout,
+                               "PtrDeref: %i\n",
+                               pos);
+               ILMutexUnlock(globalTraceMutex);
+       }
+#endif
+       stackItem = _ILJitStackItemGetTop(jitCoder, pos);
+
+       /* Do a check for Null even if this shouldn't be needed here. */
+       _ILJitStackItemCheckNull(jitCoder, *stackItem);
+
+       /* Dereference the pointer */
+       obj = jit_insn_load_relative(jitCoder->jitFunction,
+                                                                
_ILJitStackItemValue(*stackItem),
+                                                                (jit_nint)0,
+                                                                
_IL_JIT_TYPE_VPTR);
+
+       /* And replace the pointer with the dereferenced object reference. */
+       _ILJitStackItemInitWithValue(*stackItem, obj);
+}
+
+/*
  * Handle a pointer indirection opcode for a managed value.
  */
 static void JITCoder_PtrAccessManaged(ILCoder *coder, int opcode,

Index: engine/null_coder.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/null_coder.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- engine/null_coder.c 11 Feb 2007 14:34:32 -0000      1.29
+++ engine/null_coder.c 17 Aug 2007 19:18:27 -0000      1.30
@@ -133,6 +133,9 @@
 static void Coder_PtrAccess(ILCoder *coder, int opcode)
 {
 }
+static void Coder_PtrDeref(ILCoder *coder, int pos)
+{
+}
 static void Coder_PtrAccessManaged(ILCoder *coder, int opcode,
                                                                   ILClass 
*classInfo)
 {
@@ -226,6 +229,10 @@
                                          ILEngineType valueType, ILUInt32 size)
 {
 }
+static void Coder_BoxPtr(ILCoder *coder, ILClass *boxClass,
+                                            ILUInt32 size, ILUInt32 pos)
+{
+}
 static void Coder_BoxSmaller(ILCoder *coder, ILClass *boxClass,
                                                         ILEngineType 
valueType, ILType *smallerType)
 {
@@ -463,6 +470,7 @@
        Coder_Pop,
        Coder_ArrayAccess,
        Coder_PtrAccess,
+       Coder_PtrDeref,
        Coder_PtrAccessManaged,
        Coder_Branch,
        Coder_SwitchStart,
@@ -487,6 +495,7 @@
        Coder_InitObject,
        Coder_InitBlock,
        Coder_Box,
+       Coder_BoxPtr,
        Coder_BoxSmaller,
        Coder_Unbox,
        Coder_MakeTypedRef,

Index: include/il_coder.h
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/include/il_coder.h,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- include/il_coder.h  11 Feb 2007 14:34:32 -0000      1.54
+++ include/il_coder.h  17 Aug 2007 19:18:27 -0000      1.55
@@ -335,6 +335,11 @@
        void (*ptrAccess)(ILCoder *coder, int opcode);
 
        /*
+        * Access a value by dereferencing a pointer at the specified position.
+        */
+       void (*ptrDeref)(ILCoder *coder, int pos);
+
+       /*
         * Access a managed value by dereferencing a pointer.
         */
        void (*ptrAccessManaged)(ILCoder *coder, int opcode,
@@ -493,6 +498,11 @@
                                ILEngineType valueType, ILUInt32 size);
 
        /*
+        * Box a ptr value which is already in its natural representation.
+        */
+       void (*boxPtr)(ILCoder *coder, ILClass *boxClass,
+                                  ILUInt32 size, ILUInt32 pos);
+       /*
         * Box a value which needs to be converted into a smaller
         * representation before being copied to the final object.
         * "smallerType" will be one of "ILType_Int8", "ILType_Int16",
@@ -912,6 +922,8 @@
 #define        ILCoderArrayAccess(coder,opcode,itype,etype)    \
                        ((*((coder)->classInfo->arrayAccess))((coder), 
(opcode), \
                                                                                
                  (itype), (etype)))
+#define        ILCoderPtrDeref(coder,pos)      \
+                       ((*((coder)->classInfo->ptrDeref))((coder), (pos)))
 #define        ILCoderPtrAccess(coder,opcode)  \
                        ((*((coder)->classInfo->ptrAccess))((coder), (opcode)))
 #define        ILCoderPtrAccessManaged(coder,opcode,_classInfo)        \
@@ -981,6 +993,9 @@
 #define        ILCoderBox(coder,boxClass,valueType,size) \
                        ((*((coder)->classInfo->box))((coder), (boxClass), \
                                                                                
  (valueType), (size)))
+#define        ILCoderBoxPtr(coder,boxClass,size,pos) \
+                       ((*((coder)->classInfo->boxPtr))((coder), (boxClass), \
+                                                                               
     (size), (pos)))
 #define        ILCoderBoxSmaller(coder,boxClass,valueType,smallerType) \
                        ((*((coder)->classInfo->boxSmaller))((coder), 
(boxClass), \
                                                                                
         (valueType), (smallerType)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]