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

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

[Dotgnu-pnet-commits] CVS: pnet/ilasm ilasm_build.c,1.19,1.20 ilasm_bui


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/ilasm ilasm_build.c,1.19,1.20 ilasm_build.h,1.7,1.8 ilasm_grammar.y,1.29,1.30 ilasm_scanner.l,1.10,1.11
Date: Tue, 18 Feb 2003 00:25:12 -0500

Update of /cvsroot/dotgnu-pnet/pnet/ilasm
In directory subversions:/tmp/cvs-serv8588/ilasm

Modified Files:
        ilasm_build.c ilasm_build.h ilasm_grammar.y ilasm_scanner.l 
Log Message:


Add support for Generic IL to "image", "ilasm", and "ildasm"; some
syntax extensions for Generic C#, but no semantic analysis (yet).


Index: ilasm_build.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilasm/ilasm_build.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** ilasm_build.c       15 Feb 2003 01:57:52 -0000      1.19
--- ilasm_build.c       18 Feb 2003 05:25:08 -0000      1.20
***************
*** 254,261 ****
  }
  
! void ILAsmBuildNewClass(const char *name, ILClass *parent, ILUInt32 attrs)
  {
        ILClass *info;
        char uniqueName[64];
  
        /* Set the default parent to "System.Object" if necessary */
--- 254,267 ----
  }
  
! void ILAsmBuildNewClass(const char *name, ILAsmParamInfo *genericParams,
!                                               ILClass *parent, ILUInt32 attrs)
  {
        ILClass *info;
        char uniqueName[64];
+       ILAsmParamInfo *nextGeneric;
+       ILUInt32 genericNum;
+       ILGenericPar *genPar;
+       ILProgramItem *constraint;
+       ILTypeSpec *spec;
  
        /* Set the default parent to "System.Object" if necessary */
***************
*** 333,336 ****
--- 339,381 ----
        /* Set the class attributes */
        ILClassSetAttrs(info, ~((ILUInt32)0), attrs);
+ 
+       /* Add the formal generic parameters, if necessary */
+       genericNum = 0;
+       while(genericParams != 0)
+       {
+               nextGeneric = genericParams->next;
+               genPar = ILGenericParCreate
+                               (ILAsmImage, 0, ILToProgramItem(info), 
genericNum);
+               if(!genPar)
+               {
+                       ILAsmOutOfMemory();
+               }
+               if(!ILGenericParSetName(genPar, genericParams->name))
+               {
+                       ILAsmOutOfMemory();
+               }
+               if(genericParams->type)
+               {
+                       if(ILType_IsClass(genericParams->type) ||
+                          ILType_IsValueType(genericParams->type))
+                       {
+                               constraint =
+                                       
ILToProgramItem(ILType_ToClass(genericParams->type));
+                       }
+                       else
+                       {
+                               spec = ILTypeSpecCreate(ILAsmImage, 0, 
genericParams->type);
+                               if(!spec)
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               constraint = ILToProgramItem(spec);
+                       }
+                       ILGenericParSetConstraint(genPar, constraint);
+               }
+               ILFree(genericParams);
+               genericParams = nextGeneric;
+               ++genericNum;
+       }
  
        /* Add the previous class to the class stack */

Index: ilasm_build.h
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilasm/ilasm_build.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** ilasm_build.h       13 Dec 2002 00:33:30 -0000      1.7
--- ilasm_build.h       18 Feb 2003 05:25:08 -0000      1.8
***************
*** 142,146 ****
   * Create a new class and push it onto the class stack.
   */
! void ILAsmBuildNewClass(const char *name, ILClass *parent, ILUInt32 attrs);
  
  /*
--- 142,147 ----
   * Create a new class and push it onto the class stack.
   */
! void ILAsmBuildNewClass(const char *name, ILAsmParamInfo *genericParams,
!                                               ILClass *parent, ILUInt32 
attrs);
  
  /*

Index: ilasm_grammar.y
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilasm/ilasm_grammar.y,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -r1.29 -r1.30
*** ilasm_grammar.y     30 Jan 2003 10:16:45 -0000      1.29
--- ilasm_grammar.y     18 Feb 2003 05:25:08 -0000      1.30
***************
*** 253,260 ****
--- 253,275 ----
                                                           ILType *returnType,
                                                           ILAsmParamInfo 
*params,
+                                                          ILAsmParamInfo 
*genericParams,
                                                           int freeParams)
  {
        ILType *type;
        ILAsmParamInfo *nextParam;
+       ILUInt32 numGenericParams;
+ 
+       /* Set the "generic" flag if there are generic parameters */
+       numGenericParams = 0;
+       if(genericParams)
+       {
+               callingConventions |= IL_META_CALLCONV_GENERIC;
+               nextParam = genericParams;
+               while(nextParam != 0)
+               {
+                       ++numGenericParams;
+                       nextParam = nextParam->next;
+               }
+       }
  
        /* Create the main method type block */
***************
*** 265,268 ****
--- 280,284 ----
        }
        ILTypeSetCallConv(type, (ILUInt32)callingConventions);
+       ILType_SetNumGen(type, numGenericParams);
  
        /* Add the parameters to the method signature */
***************
*** 296,299 ****
--- 312,344 ----
  
  /*
+  * Create a method specification token.
+  */
+ static ILToken CreateMethodSpec(ILToken method, ILAsmParamInfo *params)
+ {
+       ILMember *member;
+       ILType *signature;
+       ILMethodSpec *spec;
+       
+       /* Convert the method token back into a MethodDef or MemberRef */
+       member = ILMember_FromToken(ILAsmImage, method);
+       if(!member)
+       {
+               return method;
+       }
+ 
+       /* Create the method instantiation signature */
+       signature = CreateMethodSig(IL_META_CALLCONV_INSTANTIATION,
+                                                               ILType_Invalid, 
params, 0, 1);
+ 
+       /* Create the MethodSpec token */
+       spec = ILMethodSpecCreate(ILAsmImage, 0, member, signature);
+       if(!spec)
+       {
+               ILAsmOutOfMemory();
+       }
+       return ILMethodSpec_Token(spec);
+ }
+ 
+ /*
   * Add parameter definition information to a method signature.
   */
***************
*** 897,901 ****
  %type <floatValue>    Float64 InstructionFloat
  %type <byteList>      ByteList
! %type <classInfo>     ExtendsClause ClassName CatchClause
  %type <type>          Type ArrayBounds Bounds
  %type <marshType>     MarshalledType
--- 942,946 ----
  %type <floatValue>    Float64 InstructionFloat
  %type <byteList>      ByteList
! %type <classInfo>     ExtendsClause ClassName CatchClause ClassNameTypeSpec
  %type <type>          Type ArrayBounds Bounds
  %type <marshType>     MarshalledType
***************
*** 909,913 ****
--- 954,963 ----
  %type <exception>     JavaExceptionClause JavaExceptionClauses
  %type <token>         MethodReference InstanceMethodReference
+ %type <token>         GenericMethodReference
  %type <integer>               DataItemCount
+ %type <params>                FormalGenericParamsOpt FormalGenericParams
+ %type <params>                FormalGenericParam MethodRefGenericParamsOpt
+ %type <params>                MethodRefGenericParams
+ %type <type>          ActualGenericParams
  
  %expect 8
***************
*** 1178,1184 ****
  
  ClassHeading
!       : D_CLASS ClassAttributes Identifier ExtendsClause {
                                /* Create the new class */
!                               ILAsmBuildNewClass($3.string, $4, 
(ILUInt32)($2));
                                ILAsmBuildPushScope(ILAsmClass);
                        }
--- 1228,1235 ----
  
  ClassHeading
!       : D_CLASS ClassAttributes Identifier FormalGenericParamsOpt 
ExtendsClause {
                                /* Create the new class */
!                               ILAsmBuildNewClass($3.string, $4.paramFirst,
!                                                                  $5, 
(ILUInt32)($2));
                                ILAsmBuildPushScope(ILAsmClass);
                        }
***************
*** 1186,1189 ****
--- 1237,1291 ----
        ;
  
+ FormalGenericParamsOpt
+       : /* empty */                                   { $$.paramFirst = 0; 
$$.paramLast = 0; }
+       | '<' FormalGenericParams '>'   { $$ = $2; }
+       ;
+ 
+ FormalGenericParams
+       : FormalGenericParam                    { $$ = $1; }
+       | FormalGenericParams ',' FormalGenericParam    {
+                               $1.paramLast->next = $3.paramFirst;
+                               $$.paramFirst = $1.paramFirst;
+                               $$.paramLast = $3.paramLast;
+               }
+       ;
+ 
+ FormalGenericParam
+       : '(' TypeSpecification ')' Identifier  {
+                               /* Generic parameter with a type constraint */
+                               ILAsmParamInfo *param;
+                               param = (ILAsmParamInfo 
*)ILMalloc(sizeof(ILAsmParamInfo));
+                               if(!param)
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               param->type = $2.type;
+                               param->nativeType.string = "";
+                               param->nativeType.len = 0;
+                               param->parameterAttrs = 0;
+                               param->name = $4.string;
+                               param->next = 0;
+                               $$.paramFirst = param;
+                               $$.paramLast = param;
+                       }
+       | Identifier    {
+                               /* Generic parameter with no constraints */
+                               ILAsmParamInfo *param;
+                               param = (ILAsmParamInfo 
*)ILMalloc(sizeof(ILAsmParamInfo));
+                               if(!param)
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               param->type = 0;
+                               param->nativeType.string = "";
+                               param->nativeType.len = 0;
+                               param->parameterAttrs = 0;
+                               param->name = $1.string;
+                               param->next = 0;
+                               $$.paramFirst = param;
+                               $$.paramLast = param;
+                       }
+       ;
+ 
  ClassAttributes
        : /* empty */                   { $$ = 0; }
***************
*** 1230,1234 ****
                                $$ = 0;
                        }
!       | K_EXTENDS ClassName   {
                                /* Extend a named class */
                                $$ = $2;
--- 1332,1336 ----
                                $$ = 0;
                        }
!       | K_EXTENDS ClassNameTypeSpec   {
                                /* Extend a named class */
                                $$ = $2;
***************
*** 1242,1246 ****
  
  ClassNameList
!       : ClassName             {
                                if(!ILClassAddImplements(ILAsmClass, $1, 0))
                                {
--- 1344,1348 ----
  
  ClassNameList
!       : ClassNameTypeSpec             {
                                if(!ILClassAddImplements(ILAsmClass, $1, 0))
                                {
***************
*** 1248,1252 ****
                                }
                        }
!       | ClassNameList ',' ClassName   {
                                if(!ILClassAddImplements(ILAsmClass, $3, 0))
                                {
--- 1350,1354 ----
                                }
                        }
!       | ClassNameList ',' ClassNameTypeSpec   {
                                if(!ILClassAddImplements(ILAsmClass, $3, 0))
                                {
***************
*** 1334,1338 ****
  
                                /* Create a signature block for the methods */
!                               sig = CreateMethodSig($6, $7, $12.paramFirst, 
1);
  
                                /* Create a MemberRef for the first part of the 
override */
--- 1436,1440 ----
  
                                /* Create a signature block for the methods */
!                               sig = CreateMethodSig($6, $7, $12.paramFirst, 
0, 1);
  
                                /* Create a MemberRef for the first part of the 
override */
***************
*** 1725,1734 ****
  MethodHeading
        : D_METHOD MethodAttributes CallingConventions ParameterAttributes
!                       MarshalledType MethodName '(' OptSignatureArguments ')'
!                       ImplementationAttributes
                                        {
                                ILType *sig;
                                ILMethod *method;
                                ILUInt32 callConv;
  
                                /* Create the method definition */
--- 1827,1842 ----
  MethodHeading
        : D_METHOD MethodAttributes CallingConventions ParameterAttributes
!                       MarshalledType MethodName FormalGenericParamsOpt
!                       '(' OptSignatureArguments ')' ImplementationAttributes
                                        {
                                ILType *sig;
                                ILMethod *method;
                                ILUInt32 callConv;
+                               ILAsmParamInfo *genericParams;
+                               ILAsmParamInfo *nextGeneric;
+                               ILUInt32 genericNum;
+                               ILGenericPar *genPar;
+                               ILProgramItem *constraint;
+                               ILTypeSpec *spec;
  
                                /* Create the method definition */
***************
*** 1741,1750 ****
                                        callConv |= IL_META_CALLCONV_HASTHIS;
                                }
!                               sig = CreateMethodSig(callConv, $5.type, 
$8.paramFirst, 0);
                                method = ILAsmMethodCreate
                                                        (ILAsmClass, $6.string, 
$2.flags, sig);
!                               ILMethodSetImplAttrs(method, ~0, 
(ILUInt16)($10));
!                               ILAsmOutAddParams($8.paramFirst, callConv);
!                               AddMethodParams(method, $4, $5.nativeType, 
$8.paramFirst);
                                if(($2.flags & IL_META_METHODDEF_PINVOKE_IMPL) 
!= 0)
                                {
--- 1849,1859 ----
                                        callConv |= IL_META_CALLCONV_HASTHIS;
                                }
!                               sig = CreateMethodSig(callConv, $5.type, 
$9.paramFirst,
!                                                                         
$7.paramFirst, 0);
                                method = ILAsmMethodCreate
                                                        (ILAsmClass, $6.string, 
$2.flags, sig);
!                               ILMethodSetImplAttrs(method, ~0, 
(ILUInt16)($11));
!                               ILAsmOutAddParams($9.paramFirst, callConv);
!                               AddMethodParams(method, $4, $5.nativeType, 
$9.paramFirst);
                                if(($2.flags & IL_META_METHODDEF_PINVOKE_IMPL) 
!= 0)
                                {
***************
*** 1758,1761 ****
--- 1867,1911 ----
                                }
  
+                               /* Add the formal generic parameters to the 
method */
+                               genericNum = 0;
+                               genericParams = $7.paramFirst;
+                               while(genericParams != 0)
+                               {
+                                       nextGeneric = genericParams->next;
+                                       genPar = ILGenericParCreate
+                                               (ILAsmImage, 0, 
ILToProgramItem(method), genericNum);
+                                       if(!genPar)
+                                       {
+                                               ILAsmOutOfMemory();
+                                       }
+                                       if(!ILGenericParSetName(genPar, 
genericParams->name))
+                                       {
+                                               ILAsmOutOfMemory();
+                                       }
+                                       if(genericParams->type)
+                                       {
+                                               
if(ILType_IsClass(genericParams->type) ||
+                                                  
ILType_IsValueType(genericParams->type))
+                                               {
+                                                       constraint = 
ILToProgramItem
+                                                               
(ILType_ToClass(genericParams->type));
+                                               }
+                                               else
+                                               {
+                                                       spec = ILTypeSpecCreate
+                                                               (ILAsmImage, 0, 
genericParams->type);
+                                                       if(!spec)
+                                                       {
+                                                               
ILAsmOutOfMemory();
+                                                       }
+                                                       constraint = 
ILToProgramItem(spec);
+                                               }
+                                               
ILGenericParSetConstraint(genPar, constraint);
+                                       }
+                                       ILFree(genericParams);
+                                       genericParams = nextGeneric;
+                                       ++genericNum;
+                               }
+ 
                                /* The current scope is now the method */
                                ILAsmBuildPushScope(method);
***************
*** 2278,2282 ****
                        MethodName '(' OptSignatureArguments ')'        {
                                ILType *sig;
!                               sig = CreateMethodSig($1, $2, $7.paramFirst, 1);
                                $$ = ILAsmResolveMember($3.item, $5.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
--- 2428,2432 ----
                        MethodName '(' OptSignatureArguments ')'        {
                                ILType *sig;
!                               sig = CreateMethodSig($1, $2, $7.paramFirst, 0, 
1);
                                $$ = ILAsmResolveMember($3.item, $5.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
***************
*** 2284,2288 ****
        | CallingConventions Type MethodName '(' OptSignatureArguments ')' {
                                /* Reference a method in the global module 
class */
!                               ILType *sig = CreateMethodSig($1, $2, 
$5.paramFirst, 1);
                                $$ = 
ILAsmResolveMember(ILToProgramItem(ILAsmModuleClass),
                                                                            
$3.string, sig,
--- 2434,2438 ----
        | CallingConventions Type MethodName '(' OptSignatureArguments ')' {
                                /* Reference a method in the global module 
class */
!                               ILType *sig = CreateMethodSig($1, $2, 
$5.paramFirst, 0, 1);
                                $$ = 
ILAsmResolveMember(ILToProgramItem(ILAsmModuleClass),
                                                                            
$3.string, sig,
***************
*** 2291,2310 ****
        ;
  
  InstanceMethodReference
        : CallingConventions Type TypeSpecification COLON_COLON
!                       MethodName '(' OptSignatureArguments ')'        {
                                ILType *sig;
                                sig = CreateMethodSig($1 | 
IL_META_CALLCONV_HASTHIS,
!                                                                         $2, 
$7.paramFirst, 1);
                                $$ = ILAsmResolveMember($3.item, $5.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
                        }
!       | CallingConventions Type MethodName '(' OptSignatureArguments ')' {
                                /* Reference a method in the global module 
class */
!                               ILType *sig = CreateMethodSig($1 | 
IL_META_CALLCONV_HASTHIS,
!                                                                               
          $2, $5.paramFirst, 1);
                                $$ = 
ILAsmResolveMember(ILToProgramItem(ILAsmModuleClass),
                                                                            
$3.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
                        }
        ;
--- 2441,2540 ----
        ;
  
+ GenericMethodReference
+       : CallingConventions Type TypeSpecification COLON_COLON
+                       MethodName MethodRefGenericParamsOpt
+                       '(' OptSignatureArguments ')'   {
+                               ILType *sig;
+                               sig = CreateMethodSig($1, $2, $8.paramFirst, 
$6.paramFirst, 1);
+                               $$ = ILAsmResolveMember($3.item, $5.string, sig,
+                                                                       
IL_META_MEMBERKIND_METHOD);
+                               if($6.paramFirst)
+                               {
+                                       $$ = CreateMethodSpec($$, 
$6.paramFirst);
+                               }
+                       }
+       | CallingConventions Type MethodName MethodRefGenericParamsOpt
+                       '(' OptSignatureArguments ')' {
+                               /* Reference a method in the global module 
class */
+                               ILType *sig = CreateMethodSig
+                                               ($1, $2, $6.paramFirst, 
$4.paramFirst, 1);
+                               $$ = 
ILAsmResolveMember(ILToProgramItem(ILAsmModuleClass),
+                                                                           
$3.string, sig,
+                                                                       
IL_META_MEMBERKIND_METHOD);
+                               if($4.paramFirst)
+                               {
+                                       $$ = CreateMethodSpec($$, 
$4.paramFirst);
+                               }
+                       }
+       ;
+ 
  InstanceMethodReference
        : CallingConventions Type TypeSpecification COLON_COLON
!                       MethodName MethodRefGenericParamsOpt
!                       '(' OptSignatureArguments ')'   {
                                ILType *sig;
                                sig = CreateMethodSig($1 | 
IL_META_CALLCONV_HASTHIS,
!                                                                         $2, 
$8.paramFirst, $6.paramFirst, 1);
                                $$ = ILAsmResolveMember($3.item, $5.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
+                               if($6.paramFirst)
+                               {
+                                       $$ = CreateMethodSpec($$, 
$6.paramFirst);
+                               }
                        }
!       | CallingConventions Type MethodName MethodRefGenericParamsOpt
!                       '(' OptSignatureArguments ')' {
                                /* Reference a method in the global module 
class */
!                               ILType *sig = CreateMethodSig
!                                               ($1 | IL_META_CALLCONV_HASTHIS,
!                                            $2, $6.paramFirst, $4.paramFirst, 
1);
                                $$ = 
ILAsmResolveMember(ILToProgramItem(ILAsmModuleClass),
                                                                            
$3.string, sig,
                                                                        
IL_META_MEMBERKIND_METHOD);
+                               if($4.paramFirst)
+                               {
+                                       $$ = CreateMethodSpec($$, 
$4.paramFirst);
+                               }
+                       }
+       ;
+ 
+ MethodRefGenericParamsOpt
+       : /* empty */                                     { $$.paramFirst = 0; 
$$.paramLast = 0; }
+       | '<' MethodRefGenericParams '>'  { $$ = $2; }
+       ;
+ 
+ MethodRefGenericParams
+       : Type                  {
+                               ILAsmParamInfo *param;
+                               param = (ILAsmParamInfo 
*)ILMalloc(sizeof(ILAsmParamInfo));
+                               if(!param)
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               param->type = $1;
+                               param->nativeType.string = "";
+                               param->nativeType.len = 0;
+                               param->parameterAttrs = 0;
+                               param->name = 0;
+                               param->next = 0;
+                               $$.paramFirst = param;
+                               $$.paramLast = param;
+                       }
+       | MethodRefGenericParams ',' Type       {
+                               ILAsmParamInfo *param;
+                               param = (ILAsmParamInfo 
*)ILMalloc(sizeof(ILAsmParamInfo));
+                               if(!param)
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               param->type = $3;
+                               param->nativeType.string = "";
+                               param->nativeType.len = 0;
+                               param->parameterAttrs = 0;
+                               param->name = 0;
+                               param->next = 0;
+                               $1.paramLast->next = param;
+                               $$.paramFirst = $1.paramFirst;
+                               $$.paramLast = param;
                        }
        ;
***************
*** 2605,2608 ****
--- 2835,2844 ----
        ;
  
+ ClassNameTypeSpec
+       : TypeSpecification             {
+                               $$ = ILProgramItemToClass($1.item);
+                       }
+       ;
+ 
  SlashedName
        : QualifiedName                                         { $$ = $1; }
***************
*** 2653,2659 ****
                                $$ = ILTypeAddModifiers(ILAsmContext, 
modifiers, $1);
                        }
-       | '!' Integer32                                 { $$ = 
ILType_FromElement($2); }
        | K_METHOD CallingConventions Type '*' '(' OptSignatureArguments ')'    
{
!                               $$ = CreateMethodSig($2, $3, $6.paramFirst, 1);
                        }
        | K_TYPEDREF                                    { $$ = ILType_TypedRef; 
}
--- 2889,2894 ----
                                $$ = ILTypeAddModifiers(ILAsmContext, 
modifiers, $1);
                        }
        | K_METHOD CallingConventions Type '*' '(' OptSignatureArguments ')'    
{
!                               $$ = CreateMethodSig($2, $3, $6.paramFirst, 0, 
1);
                        }
        | K_TYPEDREF                                    { $$ = ILType_TypedRef; 
}
***************
*** 2677,2680 ****
--- 2912,2951 ----
        | K_STRING                      { $$ = 
ILType_FromClass(ILAsmSystemClass("String")); }
        | K_OBJECT                      { $$ = 
ILType_FromClass(ILAsmSystemClass("Object")); }
+       | '!' Integer32                                 {
+                               /* Reference to a class generic parameter */
+                               $$ = ILTypeCreateVarNum
+                                               (ILAsmContext, 
IL_TYPE_COMPLEX_VAR, (int)($2));
+                       }
+       | '!' '!' Integer32                                     {
+                               /* Reference to a method generic parameter */
+                               $$ = ILTypeCreateVarNum
+                                               (ILAsmContext, 
IL_TYPE_COMPLEX_MVAR, (int)($3));
+                       }
+       | Type '<' ActualGenericParams '>'      {
+                               /* Reference to a generic type instantiation */
+                               ($3)->un.method__.retType__ = $1;
+                               $$ = $3;
+                       }
+       ;
+ 
+ ActualGenericParams
+       : Type                  {
+                               $$ = ILTypeCreateWith(ILAsmContext, 
ILType_Invalid);
+                               if(!($$))
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               if(!ILTypeAddWithParam(ILAsmContext, $$, $1))
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                       }
+       | ActualGenericParams ',' Type  {
+                               if(!ILTypeAddWithParam(ILAsmContext, $1, $3))
+                               {
+                                       ILAsmOutOfMemory();
+                               }
+                               $$ = $1;
+                       }
        ;
  
***************
*** 3590,3594 ****
        | I_BRANCH Integer32            { ILAsmOutBranchInt($1, $2); }
        | I_BRANCH Identifier           { ILAsmOutBranch($1, $2.string); }
!       | I_METHOD MethodReference      { ILAsmOutToken($1, $2); }
        | I_IMETHOD InstanceMethodReference { ILAsmOutToken($1, $2); }
        | I_FIELD Type TypeSpecification COLON_COLON Identifier {
--- 3861,3865 ----
        | I_BRANCH Integer32            { ILAsmOutBranchInt($1, $2); }
        | I_BRANCH Identifier           { ILAsmOutBranch($1, $2.string); }
!       | I_METHOD GenericMethodReference       { ILAsmOutToken($1, $2); }
        | I_IMETHOD InstanceMethodReference { ILAsmOutToken($1, $2); }
        | I_FIELD Type TypeSpecification COLON_COLON Identifier {
***************
*** 3621,3625 ****
        | I_STRING K_BYTEARRAY Bytes    { ILAsmOutString($3); }
        | I_SIGNATURE CallingConventions Type '(' OptSignatureArguments ')'     
{
!                               ILType *sig = CreateMethodSig($2, $3, 
$5.paramFirst, 1);
                                ILStandAloneSig *stand =
                                        ILStandAloneSigCreate(ILAsmImage, 0, 
sig);
--- 3892,3896 ----
        | I_STRING K_BYTEARRAY Bytes    { ILAsmOutString($3); }
        | I_SIGNATURE CallingConventions Type '(' OptSignatureArguments ')'     
{
!                               ILType *sig = CreateMethodSig($2, $3, 
$5.paramFirst, 0, 1);
                                ILStandAloneSig *stand =
                                        ILStandAloneSigCreate(ILAsmImage, 0, 
sig);

Index: ilasm_scanner.l
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ilasm/ilasm_scanner.l,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** ilasm_scanner.l     13 Jan 2003 09:14:25 -0000      1.10
--- ilasm_scanner.l     18 Feb 2003 05:25:08 -0000      1.11
***************
*** 787,790 ****
--- 787,794 ----
                                                  return I_SWITCH; }
  
+ "ldelem"                              { OPCODE_TYPE(LDELEM); }
+ "stelem"                              { OPCODE_TYPE(STELEM); }
+ "unbox.any"                           { OPCODE_TYPE(UNBOX_ANY); }
+ 
  <JAVAMODE>"nop"                       { JOPCODE_NONE(NOP); }  /* Java opcodes 
with no args */
  <JAVAMODE>"aconst_null"       { JOPCODE_NONE(ACONST_NULL); }





reply via email to

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