#define _CLASS_ #include "tok.h" structteg *searchteg=NULL; int destructor=FALSE; void notclassname(char *name) { char buf[90]; sprintf(buf,"'%s' not class name",name); preerror(buf); nexttok(); //пропуск :: nexttok(); } void notclassproc(char *classname, char* procname) { char buf[160]; sprintf(buf,"'%s' not member class '%s'",procname,classname); preerror(buf); } void AddThis() { int lsize=(am32==TRUE?4:2); localrec *lrec=addlocalvar("this",(am32==TRUE?tk_dwordvar:tk_wordvar),paramsize); lrec->rec.recsize=lsize; lrec->rec.type=tp_paramvar; lrec->fuse=USEDVAR; paramsize+=lsize; } void doclassproc(unsigned int tproc) { int type=itok.rm; //тип возврата unsigned int flag=itok.flag; unsigned int npointr=itok.npointr; char classname[IDLENGTH]; if((searchteg=FindTeg(TRUE,itok.name))!=NULL){ strcpy(classname,itok.name); nexttok(); //пропуск :: if(tok2==tk_tilda){ nexttok(); destructor=TRUE; flag|=fs_destructor; type=tk_void; } nexttok(); char *tn; char name[IDLENGTH]; strcpy(name,itok.name); if((tn=strchr(name,'@'))!=NULL)*tn=0; if(strcmp(classname,name)==0&&(flag&fs_destructor)==0)flag|=fs_constructor; if((tok!=tk_declare&&tok!=tk_undefproc)||(itok.flag&f_classproc)==0){ notclassproc(classname,name); searchteg=NULL; define_procedure(); return; } if(tproc==0){ if(CidOrID()==tk_ID)tproc=tk_fastcall; else tproc=(comfile==file_w32?tk_stdcall:tk_pascal); } flag|=(tproc-tk_pascal)*2; if(type==tokens)type=am32==FALSE?tk_word:tk_dword; if(flag!=itok.flag||type!=itok.rm||(unsigned short)npointr!=itok.npointr){ // printf("flag %08X - %08X\n",flag,itok.flag); // printf("type %u - %u\n",type,itok.rm); redeclare(name); } if(dynamic_flag){ dynamic_proc(); searchteg=NULL; return; } // if(itok.flag&f_static)searchteg=NULL; if(AlignProc!=FALSE)AlignCD(CS,alignproc); if(dbg)AddLine(); setproc(1); } else{ notclassname(itok.name); setproc(0); } dopoststrings(); }