[Top][All Lists]
[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)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ChangeLog engine/cvm.h engine/cvm_ptr.c en...,
Klaus Treichel <=