[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_gather.c,1.36,1.37
From: |
Gopal.V <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_gather.c,1.36,1.37 |
Date: |
Fri, 21 Feb 2003 07:18:51 -0500 |
Update of /cvsroot/dotgnu-pnet/pnet/cscc/csharp
In directory subversions:/tmp/cvs-serv23790/cscc/csharp
Modified Files:
cs_gather.c
Log Message:
support for async delegates in the compiler
Index: cs_gather.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_gather.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -C2 -r1.36 -r1.37
*** cs_gather.c 15 Feb 2003 02:14:53 -0000 1.36
--- cs_gather.c 21 Feb 2003 12:18:49 -0000 1.37
***************
*** 1644,1647 ****
--- 1644,1686 ----
/*
+ * Create a formal parameter with a system type
+ */
+ static ILNode_FormalParameter* CreateFormalParameter(char *systemtype,
+
char *name)
+ {
+ ILNode *param=ILNode_FormalParameter_create(
+ NULL,ILParamMod_empty,
+
ILNode_SystemType_create(systemtype),
+
ILQualIdentSimple(ILInternString(name, -1).string));
+ return (ILNode_FormalParameter*)param;
+ }
+
+ /*
+ * Append parameters in `from' to `to' , the onlyPtrs flag if enabled
+ * appends only out or ref parameters
+ */
+ static void AppendParameters(ILNode *from,ILNode_List *to,int onlyPtrs)
+ {
+ ILNode_ListIter iter;
+ ILNode_FormalParameter *node;
+ if(!yyisa(from,ILNode_List)) return;
+ ILNode_ListIter_Init(&iter,from);
+ while((node = (ILNode_FormalParameter*)ILNode_ListIter_Next(&iter))!=0)
+ {
+ if((!onlyPtrs) || (node->pmod==ILParamMod_ref ||
+ node->pmod ==
ILParamMod_out))
+ {
+ ILNode_FormalParameter *param= (ILNode_FormalParameter*)
+
ILNode_FormalParameter_create(NULL,
+
node->pmod,node->type,
+
node->name);
+ yysetfilename((ILNode*)param,yygetfilename(node));
+ yysetlinenum((ILNode*)param, yygetlinenum(node));
+ ILNode_List_Add(to,param);
+ }
+ }
+ }
+
+ /*
* Create a delegate member definition.
*/
***************
*** 1652,1655 ****
--- 1691,1695 ----
ILType *signature;
ILNode_MethodDeclaration *decl;
+ ILNode_List *params;
/* Create the delegate constructor */
***************
*** 1701,1704 ****
--- 1741,1748 ----
ILQualIdentSimple(ILInternString("Invoke", -1).string),
member->params, 0);
+
+ yysetfilename((ILNode*)decl,yygetfilename(member));
+ yysetlinenum((ILNode*)decl, yygetlinenum(member));
+
CreateMethod(info, classInfo, decl);
method = member->invokeMethod = decl->methodInfo;
***************
*** 1710,1713 ****
--- 1754,1822 ----
/* TODO: asynchronous interface for delegates */
+ /* Clone the params list */
+ params=(ILNode_List*)ILNode_List_create();
+ AppendParameters(member->params,params,0);
+
+ ILNode_List_Add(params,
+
CreateFormalParameter("AsyncCallback","callback"));
+ ILNode_List_Add(params,
+
CreateFormalParameter("Object","object"));
+
+ /* Create the "BeginInvoke" method */
+ decl = (ILNode_MethodDeclaration*) ILNode_MethodDeclaration_create
+ (0,
+ IL_META_METHODDEF_PUBLIC |
+ IL_META_METHODDEF_VIRTUAL |
+ IL_META_METHODDEF_NEW_SLOT |
+ IL_META_METHODDEF_HIDE_BY_SIG |
+ IL_META_METHODDEF_COMPILER_CONTROLLED,
+ ILNode_SystemType_create("IAsyncResult"),
+ ILQualIdentSimple(ILInternString("BeginInvoke",
-1).string),
+ (ILNode*)params,
+ 0);
+
+ yysetfilename((ILNode*)decl,yygetfilename(member));
+ yysetlinenum((ILNode*)decl, yygetlinenum(member));
+
+ CreateMethod(info, classInfo, decl);
+ method = member->beginInvokeMethod = decl->methodInfo;
+ if(method)
+ {
+ ILMethodSetImplAttrs(method, ~((ILUInt32)0),
+
IL_META_METHODIMPL_RUNTIME);
+ }
+
+ /* Clone the params list */
+ params=(ILNode_List*)ILNode_List_create();
+
+ /* Append only the managed parameters */
+ AppendParameters(member->params,params,1);
+
+ ILNode_List_Add(params,
+
CreateFormalParameter("IAsyncResult","result"));
+
+ /* Create the "EndInvoke" method */
+ decl = (ILNode_MethodDeclaration*) ILNode_MethodDeclaration_create
+ (0,
+ IL_META_METHODDEF_PUBLIC |
+ IL_META_METHODDEF_VIRTUAL |
+ IL_META_METHODDEF_NEW_SLOT |
+ IL_META_METHODDEF_HIDE_BY_SIG |
+ IL_META_METHODDEF_COMPILER_CONTROLLED,
+ member->returnType,
+ ILQualIdentSimple(ILInternString("EndInvoke",
-1).string),
+ (ILNode*)params,
+ 0);
+
+ yysetfilename((ILNode*)decl,yygetfilename(member));
+ yysetlinenum((ILNode*)decl, yygetlinenum(member));
+
+ CreateMethod(info, classInfo, decl);
+ method = member->endInvokeMethod = decl->methodInfo;
+ if(method)
+ {
+ ILMethodSetImplAttrs(method, ~((ILUInt32)0),
+
IL_META_METHODIMPL_RUNTIME);
+ }
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/cscc/csharp cs_gather.c,1.36,1.37,
Gopal.V <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: cscctest/csharp/class delegate1.cs,1.1,1.2 delegate1.il,1.2,1.3 delegate1.jerr,1.1,1.2 event1.cs,1.1,1.2 event1.il,1.4,1.5 event1.jerr,1.1,1.2
- Next by Date:
[Dotgnu-pnet-commits] CVS: cscctest ChangeLog,1.138,1.139
- Previous by thread:
[Dotgnu-pnet-commits] CVS: cscctest/csharp/class delegate1.cs,1.1,1.2 delegate1.il,1.2,1.3 delegate1.jerr,1.1,1.2 event1.cs,1.1,1.2 event1.il,1.4,1.5 event1.jerr,1.1,1.2
- Next by thread:
[Dotgnu-pnet-commits] CVS: cscctest ChangeLog,1.138,1.139
- Index(es):