// <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();
	}

}
Example #3
0
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);
    }
}
Example #4
0
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 );
}
Example #5
0
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 );
}
Example #6
0
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;
  }
}
Example #7
0
void add( sampleFrame* dst, const sampleFrame* src, int frames )
{
	run<>( dst, src, frames, AddOp() );
}