Пример #1
0
/*
 * 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;
}
Пример #2
0
 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;
 }
Пример #3
0
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);
}
Пример #4
0
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();
}