/[ascend]/trunk/base/generic/compiler/extcall.c
ViewVC logotype

Diff of /trunk/base/generic/compiler/extcall.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 709 by johnpye, Wed Jun 28 16:28:57 2006 UTC revision 710 by johnpye, Thu Jun 29 08:53:37 2006 UTC
# Line 36  Line 36 
36  #include "extcall.h"  #include "extcall.h"
37    
38  struct ExtCallNode *CreateExtCall(struct ExternalFunc *efunc,  struct ExtCallNode *CreateExtCall(struct ExternalFunc *efunc,
39                        struct gl_list_t *args,          struct gl_list_t *args,
40                        struct Instance *subject,          struct Instance *subject,
41                        struct Instance *data)          struct Instance *data
42  {  ){
43    struct ExtCallNode *ext;    struct ExtCallNode *ext;
44    struct Instance **hndl=NULL;    struct Instance **hndl=NULL;
45    unsigned long pos;    unsigned long pos;
# Line 48  struct ExtCallNode *CreateExtCall(struct Line 48  struct ExtCallNode *CreateExtCall(struct
48    CONSOLE_DEBUG("...");    CONSOLE_DEBUG("...");
49    int i,n;    int i,n;
50    struct Instance *inst;    struct Instance *inst;
51    char *tmp;    /* char *tmp; */
52    n = gl_length(args);    n = gl_length(args);
53    for(i = 1; i < n; ++i){    for(i = 1; i < n; ++i){
54      inst = (struct Instance *)gl_fetch(args,i);      inst = (struct Instance *)gl_fetch(args,i);
# Line 59  struct ExtCallNode *CreateExtCall(struct Line 59  struct ExtCallNode *CreateExtCall(struct
59    }    }
60    
61    ext = ASC_NEW(struct ExtCallNode);    ext = ASC_NEW(struct ExtCallNode);
62      CONSOLE_DEBUG("ASSIGNING efunc = %p TO ExtCallNode %p",efunc,ext);
63    ext->efunc = efunc;    ext->efunc = efunc;
64    ext->arglist = args;    ext->arglist = args;
65    if (data) {    if(data){
66      hndl = AddVarToTable(data,&added);  /** FIX FIX FIX **/      hndl = AddVarToTable(data,&added);  /** FIX FIX FIX **/
67    }    }
68    ext->data = hndl;    ext->data = hndl;
69    if (subject) {  
70      if(subject){
71      pos = GetSubjectIndex(args,subject);      pos = GetSubjectIndex(args,subject);
72      ext->subject = pos;      ext->subject = pos;
73    } else {    }else{
74      ext->subject = 0L;      ext->subject = 0L;
75    }    }
76    
77    ext->nodestamp = -1;    ext->nodestamp = -1;
78    return ext;    return ext;
79  }  }
80    
81  void DestroyExtCall(struct ExtCallNode *ext, struct Instance *relinst)  void DestroyExtCall(struct ExtCallNode *ext, struct Instance *relinst){
 {  
82    struct Instance *ptr;    struct Instance *ptr;
83    unsigned long len1, c1;    unsigned long len1, c1;
84    unsigned long len2, c2;    unsigned long len2, c2;
# Line 131  struct Instance *GetSubjectInstance(stru Line 133  struct Instance *GetSubjectInstance(stru
133  }  }
134    
135  unsigned long GetSubjectIndex(struct gl_list_t *arglist,  unsigned long GetSubjectIndex(struct gl_list_t *arglist,
136                     struct Instance *subject)          struct Instance *subject
137  {  ){
138    unsigned long len1,c1,len2,c2;    unsigned long len1,c1,len2,c2;
139    struct gl_list_t *branch;    struct gl_list_t *branch;
140    struct Instance *arg;    struct Instance *arg;
# Line 162  unsigned long GetSubjectIndex(struct gl_ Line 164  unsigned long GetSubjectIndex(struct gl_
164  }  }
165    
166  unsigned long CountNumberOfArgs(struct gl_list_t *arglist,  unsigned long CountNumberOfArgs(struct gl_list_t *arglist,
167                  unsigned long start, unsigned long end)          unsigned long start, unsigned long end
168  {  ){
169    unsigned long c,count=0L;    unsigned long c,count=0L;
170    struct gl_list_t *branch;    struct gl_list_t *branch;
171    
# Line 183  unsigned long CountNumberOfArgs(struct g Line 185  unsigned long CountNumberOfArgs(struct g
185  }  }
186    
187  struct gl_list_t *LinearizeArgList(struct gl_list_t *arglist,  struct gl_list_t *LinearizeArgList(struct gl_list_t *arglist,
188                     unsigned long start, unsigned long end)          unsigned long start, unsigned long end
189  {  ){
190    struct gl_list_t *result,*branch;    struct gl_list_t *result,*branch;
191    struct Instance *arg;    struct Instance *arg;
192    unsigned long c1,len2,c2;    unsigned long c1,len2,c2;
# Line 227  void DestroySpecialList(struct gl_list_t Line 229  void DestroySpecialList(struct gl_list_t
229    }    }
230  }  }
231    
232  struct gl_list_t *CopySpecialList(struct gl_list_t *list)  struct gl_list_t *CopySpecialList(struct gl_list_t *list){
 {  
233    unsigned long len1,c1,len2,c2;    unsigned long len1,c1,len2,c2;
234    struct gl_list_t *result,*branch,*tmp;    struct gl_list_t *result,*branch,*tmp;
235    struct Instance *arg;    struct Instance *arg;
# Line 256  struct gl_list_t *CopySpecialList(struct Line 257  struct gl_list_t *CopySpecialList(struct
257    return NULL;    return NULL;
258  }  }
259    
260  struct ExternalFunc *ExternalCallExtFuncF(struct ExtCallNode *ext)  struct ExternalFunc *ExternalCallExtFuncF(struct ExtCallNode *ext){
 {  
261    return ext->efunc;    return ext->efunc;
262  }  }
263    
264  struct gl_list_t *ExternalCallArgListF(struct ExtCallNode *ext)  struct gl_list_t *ExternalCallArgListF(struct ExtCallNode *ext){
 {  
265    return ext->arglist;    return ext->arglist;
266  }  }
267    
268  struct Instance *ExternalCallDataInstance(struct ExtCallNode *ext)  struct Instance *ExternalCallDataInstance(struct ExtCallNode *ext){
 {  
269    struct Instance **hndl;    struct Instance **hndl;
270    hndl = ext->data;    hndl = ext->data;
271    if(hndl!=NULL){    if(hndl!=NULL){
# Line 281  struct Instance *ExternalCallDataInstanc Line 279  struct Instance *ExternalCallDataInstanc
279    }    }
280  }  }
281    
282  int ExternalCallNodeStampF(struct ExtCallNode *ext)  int ExternalCallNodeStampF(struct ExtCallNode *ext){
 {  
283    return ext->nodestamp;    return ext->nodestamp;
284  }  }
285    
286  void SetExternalCallNodeStamp(struct ExtCallNode *ext,  void SetExternalCallNodeStamp(struct ExtCallNode *ext, int nodestamp){
                   int nodestamp)  
 {  
287    if (ext->nodestamp==-1) {    if (ext->nodestamp==-1) {
288      ext->nodestamp = nodestamp;      ext->nodestamp = nodestamp;
289    }    }
290  }  }
291    
292  unsigned long ExternalCallVarIndexF(struct ExtCallNode *ext)  unsigned long ExternalCallVarIndexF(struct ExtCallNode *ext){
 {  
293    return ext->subject;    return ext->subject;
294  }  }
295    
296  struct Instance *ExternalCallVarInstance(struct ExtCallNode *ext)  struct Instance *ExternalCallVarInstance(struct ExtCallNode *ext){
 {  
297    struct Instance *i;    struct Instance *i;
298    assert(ext->subject);    assert(ext->subject);
299    i = GetSubjectInstance(ext->arglist,ext->subject);    i = GetSubjectInstance(ext->arglist,ext->subject);

Legend:
Removed from v.709  
changed lines
  Added in v.710

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22