// <math_expression> ::= <math_term> [<add_op> <math_term>]* void Expression(CPU *cpu, Files file){ Term(cpu, file); while(IsAddOp(file)){ cpu->PushValue(); AddOp(cpu, file); } }
void Simple_Exp() { Term(); while((!strcmp(string[TokenCounter],"+"))||(!strcmp(string[TokenCounter],"-"))) { AddOp(); Term(); } }
void Parser::SimExpr(int &type) { int type1, op; Term(type); while (la->kind == 3 || la->kind == 4) { AddOp(op); Term(type1); if (type != integer || type1 != integer) Err(L"integer type expected"); gen->Emit(op); } }
void DoPlus( void ) { stack_entry *left; left = StkEntry( 1 ); LRValue( left ); RValue( ExprSP ); switch( ExprSP->info.kind ) { case TK_POINTER: case TK_ADDRESS: /* get the pointer as the left operand */ left = ExprSP; SwapStack( 1 ); } AddOp( left, ExprSP ); switch( left->info.kind ) { case TK_BOOL: case TK_ENUM: case TK_CHAR: case TK_INTEGER: U64Add( &left->v.uint, &ExprSP->v.uint, &left->v.uint ); break; case TK_POINTER: case TK_ADDRESS: switch( ExprSP->info.kind ) { case TK_BOOL: case TK_ENUM: case TK_CHAR: case TK_INTEGER: break; default: Error( ERR_NONE, LIT_ENG( ERR_ILL_TYPE ) ); } if( (left->info.modifier & TM_MOD_MASK) == TM_NEAR ) { //NYI: 64 bit offsets left->v.addr.mach.offset += U32FetchTrunc( ExprSP->v.uint ); } else { //NYI: 64 bit offsets left->v.addr = AddrAdd( left->v.addr, U32FetchTrunc( ExprSP->v.uint ) ); } break; case TK_REAL: LDAdd( &left->v.real, &ExprSP->v.real, &left->v.real ); break; case TK_COMPLEX: LDAdd( &left->v.cmplx.re, &ExprSP->v.cmplx.re, &left->v.cmplx.re ); LDAdd( &left->v.cmplx.im, &ExprSP->v.cmplx.im, &left->v.cmplx.im ); break; default: Error( ERR_NONE, LIT_ENG( ERR_ILL_TYPE ) ); break; } CombineEntries( left, left, ExprSP ); }
void DoMinus( void ) { stack_entry *left; left = StkEntry( 1 ); LRValue( left ); RValue( ExprSP ); AddOp( left, ExprSP ); switch( left->info.kind ) { case TK_BOOL: case TK_ENUM: case TK_CHAR: case TK_INTEGER: U64Sub( &left->v.uint, &ExprSP->v.uint, &left->v.uint ); left->info.modifier = TM_SIGNED; break; case TK_POINTER: case TK_ADDRESS: switch( ExprSP->info.kind ) { case TK_BOOL: case TK_CHAR: case TK_ENUM: case TK_INTEGER: //NYI: 64 bit offsets left->v.addr = AddrAdd( left->v.addr, -U32FetchTrunc( ExprSP->v.uint ) ); break; case TK_POINTER: case TK_ADDRESS: I32ToI64( AddrDiff( left->v.addr, ExprSP->v.addr ), &left->v.sint ); left->info.kind = TK_INTEGER; left->info.modifier = TM_SIGNED; left->info.size = sizeof( signed_64 ); left->th = NULL; break; default: Error( ERR_NONE, LIT_ENG( ERR_ILL_TYPE ) ); } break; case TK_REAL: LDSub( &left->v.real, &ExprSP->v.real, &left->v.real ); break; case TK_COMPLEX: LDSub( &left->v.cmplx.re, &ExprSP->v.cmplx.re, &left->v.cmplx.re ); LDSub( &left->v.cmplx.im, &ExprSP->v.cmplx.im, &left->v.cmplx.im ); break; default: Error( ERR_NONE, LIT_ENG( ERR_ILL_TYPE ) ); break; } CombineEntries( left, left, ExprSP ); }
sBool PageWin::OnCommand(sU32 cmd) { sMenuFrame *mf; // ToolObject *to; ViewWin *view; switch(cmd) { case CMD_POPUP: mf = new sMenuFrame; mf->AddMenu("Add",CMD_POPADD,'a'); mf->AddMenu("Add Misc",CMD_POPMISC,'1'); mf->AddMenu("Add Texture",CMD_POPTEX,'2'); mf->AddMenu("Add Mesh",CMD_POPMESH,'3'); mf->AddMenu("Add Scene",CMD_POPSCENE,'4'); mf->AddMenu("Add Material",CMD_POPMAT,'5'); mf->AddMenu("Add FXChain",CMD_POPFX,'6'); mf->AddSpacer(); mf->AddMenu("Normal Mode",' ',' '); mf->AddMenu("Select Rect",'r','r'); mf->AddMenu("Pick",'p','p'); mf->AddMenu("Duplicate",'d','d'); mf->AddMenu("Width",'w','w'); mf->AddMenu("Move",'m','m'); mf->AddSpacer(); mf->AddMenu("Show",CMD_SHOW,'s'); mf->AddSpacer(); mf->AddMenu("Delete",CMD_DELETE,sKEY_DELETE); mf->AddMenu("Cut",CMD_CUT,'x'); mf->AddMenu("Copy",CMD_COPY,'c'); mf->AddMenu("Paste",CMD_PASTE,'v'); mf->AddBorder(new sNiceBorder); mf->SendTo = this; sGui->AddPopup(mf); return sTRUE; case CMD_SHOW: view = (ViewWin *) App->FindActiveWindow(sCID_TOOL_VIEWWIN); if(EditOp && view && EditOp->Class->OutputCID) { view->SetObject(EditOp); } if(EditOp && view && (EditOp->Class->Flags & POCF_STORE)) // store { view->SetObject(EditOp); } if(Doc) Doc->UpdatePage(); return sTRUE; case CMD_POPADD: AddOps(AddOpClass); return sTRUE; case CMD_POPMISC: AddOpClass = 0; AddOps(AddOpClass); return sTRUE; case CMD_POPTEX: AddOpClass = sCID_GENBITMAP; AddOps(AddOpClass); return sTRUE; case CMD_POPMESH: AddOpClass = sCID_GENMESH; AddOps(AddOpClass); return sTRUE; case CMD_POPSCENE: AddOpClass = sCID_GENSCENE; AddOps(AddOpClass); return sTRUE; case CMD_POPMAT: AddOpClass = sCID_GENMATERIAL; AddOps(AddOpClass); return sTRUE; case CMD_POPFX: AddOpClass = sCID_GENFXCHAIN; AddOps(AddOpClass); return sTRUE; case ' ': case 'r': case 'p': case 'd': case 'w': case 'm': OnKey(cmd); return sTRUE; case CMD_DELETE: if(Doc) Doc->Delete(); return sTRUE; case CMD_CUT: if(Doc) { Doc->Copy(); Doc->Delete(); } return sTRUE; case CMD_COPY: if(Doc) Doc->Copy(); return sTRUE; case CMD_PASTE: if(Doc) Doc->Paste(CursorX,CursorY); return sTRUE; default: if(cmd>=1024 && cmd<2048) { if(App->ClassList[cmd-1024].Name) AddOp(&App->ClassList[cmd-1024]); return sTRUE; } return sFALSE; } }
void add( sampleFrame* dst, const sampleFrame* src, int frames ) { run<>( dst, src, frames, AddOp() ); }