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

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

[Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_stmt.tc,1.33,1.34


From: Gopal.V <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_stmt.tc,1.33,1.34
Date: Sat, 31 May 2003 01:47:26 -0400

Update of /cvsroot/dotgnu-pnet/pnet/cscc/csharp
In directory subversions:/tmp/cvs-serv29717/cscc/csharp

Modified Files:
        cs_stmt.tc 
Log Message:
Improve enumerator detection code


Index: cs_stmt.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_stmt.tc,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -r1.33 -r1.34
*** cs_stmt.tc  24 May 2003 07:52:47 -0000      1.33
--- cs_stmt.tc  31 May 2003 05:47:24 -0000      1.34
***************
*** 259,268 ****
        ILNode_MethodDeclaration *method;
        ILType *type;
! //ForeachCollection
        ILMethod *getEnumerator=NULL;
        ILProperty *property=NULL;
        ILMethod *getCurrent=NULL;
        ILMethod *moveNext=NULL;
-       ILType * const args[1]={ILType_Void};
        ILType *retType;
        ILType *enumerator;
--- 259,267 ----
        ILNode_MethodDeclaration *method;
        ILType *type;
!       /* ForeachCollection */
        ILMethod *getEnumerator=NULL;
        ILProperty *property=NULL;
        ILMethod *getCurrent=NULL;
        ILMethod *moveNext=NULL;
        ILType *retType;
        ILType *enumerator;
***************
*** 362,382 ****
                                                                                
                        GetDefaultScope(info),
                                                                                
                        "GetEnumerator",
!                                                                               
                        (ILType**)args, 0);
                }
!               else if(ILTypeImplements(info, node->arrayType,
!                               
ILFindNonSystemType(info,"IEnumerable","System.Collections")))
!               {
!                       getEnumerator = ILResolveInstanceMethod(info, 
arrayClass,
                                                                                
                        GetDefaultScope(info),
!                                                                               
                        "IEnumerable.GetEnumerator",
!                                                                               
                        (ILType**)args, 0);
                }       
-               else
-               {
-                       CCErrorOnLine(yygetfilename(node), yygetlinenum(node),
-                "'%s' does not have a 'GetEnumerator' or 
'IEnumerable.GetEnumerator'"
-                        ,CSTypeToName(node->arrayType));
-                       getEnumerator = 0;
-               }
                if(getEnumerator)
                {
--- 361,380 ----
                                                                                
                        GetDefaultScope(info),
                                                                                
                        "GetEnumerator",
!                                                                               
                        NULL, 0);
                }
!               if(getEnumerator==NULL &&
!                       ILTypeImplements(info, node->arrayType,
!                       
ILFindNonSystemType(info,"IEnumerable","System.Collections")))
!               {
!                       ILClass * enumerable = ILTypeToClass(info,
!                                                                       
ILFindNonSystemType(info,"IEnumerable",
!                                                                               
                        "System.Collections"));
!                       enumerable = ILClassResolve(enumerable);
! 
!                       getEnumerator = ILResolveInstanceMethod(info, 
enumerable,
                                                                                
                        GetDefaultScope(info),
!                                                                               
                        "GetEnumerator",
!                                                                               
                        NULL, 0);
                }       
                if(getEnumerator)
                {
***************
*** 386,418 ****
                                                        GetDefaultScope(info),
                                                        "Current");
-                       if(!property)
-                       {
-                               property=ILResolveProperty(info,
-                                                       
ILType_ToClass(enumerator),
-                                                       GetDefaultScope(info),
-                                                       "IEnumerator.Current");
-                       }
                        
                        getCurrent=(property ? ILProperty_Getter(property) : 0);
                        moveNext=ILResolveInstanceMethod(info,
                                                ILType_ToClass(enumerator),
                                                GetDefaultScope(info),
!                                               "MoveNext",
!                                               (ILType**)args,
!                                        0);
!                       if(!moveNext)
!                       {
!                               moveNext=ILResolveInstanceMethod(info,
!                                               ILType_ToClass(enumerator),
!                                               GetDefaultScope(info),
!                                               "IEnumerator.MoveNext",
!                                               (ILType**)args,
!                                        0);
!                       }
                        if(!property) 
                        {
                                CCErrorOnLine(yygetfilename(node), 
yygetlinenum(node),
!                 "Cannot locate 'Current' or 'IEnumerator.Current' property in 
'%s'",
!                                         CSTypeToName(enumerator));
                        }
                        else if(!getCurrent)
--- 384,400 ----
                                                        GetDefaultScope(info),
                                                        "Current");
                        
                        getCurrent=(property ? ILProperty_Getter(property) : 0);
+ 
                        moveNext=ILResolveInstanceMethod(info,
                                                ILType_ToClass(enumerator),
                                                GetDefaultScope(info),
!                                               "MoveNext",     NULL, 0);
! 
                        if(!property) 
                        {
                                CCErrorOnLine(yygetfilename(node), 
yygetlinenum(node),
!                                               "Could not locate 'Current' or 
'IEnumerator.Current'"
!                                               "property in '%s'", 
CSTypeToName(enumerator));
                        }
                        else if(!getCurrent)
***************
*** 471,474 ****
--- 453,463 ----
                                                getCurrent);
                        }
+               }
+               else
+               {
+                       CCErrorOnLine(yygetfilename(node), yygetlinenum(node),
+                        "Could not locate a 'GetEnumerator' or "
+                        "'IEnumerable.GetEnumerator' in '%s'"
+                        ,CSTypeToName(node->arrayType));
                }
        }





reply via email to

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