/* * Process a function definition. */ cfunc() { register char *cb; register sloc; sloc = isn; isn += 2; outcode("BBS", PROG, RLABEL, funcsym->name); regvar = 5; autolen = STAUTO; maxauto = STAUTO; blklev = 1; cb = locbase; declist(ARG); outcode("B", SAVE); if (proflg) outcode("BNS", PROFIL, isn++, funcsym->name); funchead(); branch(sloc); label(sloc+1); retlab = isn++; blklev = 0; if ((peeksym = symbol()) != LBRACE) error("Compound statement required"); statement(); outcode("BNB", LABEL, retlab, RETRN); label(sloc); /* add STAUTO; overlay bug fix, coupled with section in c11.c */ outcode("BN", SETSTK, -maxauto+STAUTO); branch(sloc+1); locbase = cb; }
POGEL::OBJECT * GetObject( const std::string& simname, Object* pyobjreff ) { if( PyString_CheckExact( pyobjreff ) ) { const char* objname = PyString_AsString( pyobjreff ); POGEL::OBJECT* ret = (POGEL::OBJECT*)Renderer::Physics::getObject( simname, std::string( objname ) ); objname = NULL; return ret; } if( PyTuple_CheckExact( pyobjreff ) ) { int tlen = PyTuple_Size( pyobjreff ); ClassList< std::string > declist( tlen ); for( int i = 0; i < tlen; ++i ) { Object * curpydec = PyTuple_GetItem( pyobjreff, i ); if( !curpydec || !PyString_CheckExact( curpydec ) ) { declist.clear(); return NULL; } const char * dec = PyString_AsString( curpydec ); //char * dec = (char*)memcpy( (void*)new char[strlen(tdec)], (const void *)tdec, strlen(tdec) ); //tdec = NULL; declist += std::string(dec); dec = NULL; //delete [] dec; } POGEL::OBJECT * ret = Renderer::Physics::getObject( simname, declist ); declist.clear(); return ret; } return NULL; }
blkhed() { extern symbol, cval, declare, peeksym, paraml[], parame[]; extern error, length, rlength, setstk, defvec, isn, defstat; extern stack, hshtab[], hshsiz, pssiz; int o, al, pl, cs[], hl; declist(); stack = al = -2; pl = 4; while(paraml) { *parame = 0; paraml = *(cs = paraml); cs[2] = pl; *cs = 10; pl =+ rlength(cs[1]); } cs = hshtab; hl = hshsiz; while(hl--) { if (cs[4]) switch(cs[0]) { /* sort unmentioned */ case 0177776: /* -2 */ cs[0] = 5; /* auto */ /* auto */ case 5: if (cs[3]) { /* vector */ al =- (cs[3]*length(cs[1]-020)+1) & 077776; setstk(al); defvec(al); } cs[2] = al; al =- rlength(cs[1]); goto loop; /* parameter */ case 10: cs[0] = 5; goto loop; /* static */ case 7: cs[2] = isn++; defstat(cs); goto loop; loop:; } cs = cs+pssiz; } setstk(al); }
function() { extern declare, blkhed, blkend; extern printf, statement, peeksym, cval, symbol, retseq; extern paraml; auto o; printf(".text; 1:mov r5,-(sp); mov sp,r5\n"); declare(8); declist(); statement(1); retseq(); }