xreal ReqXRealExpr( void ) { xreal v; NormalExpr(); ConvertTo( ExprSP, TK_REAL, TM_NONE, sizeof( ExprSP->v.real ) ); v = ExprSP->v.real; PopEntry(); return( v ); }
unsigned_64 ReqU64Expr( void ) { unsigned_64 rtn; NormalExpr(); ConvertTo( ExprSP, TK_INTEGER, TM_UNSIGNED, sizeof( ExprSP->v.uint ) ); rtn = ExprSP->v.uint; PopEntry(); return( rtn ); }
void ProcAssign( void ) { char *startpos; if( !AdvMachState( ACTION_ASSIGNMENT ) ) { FlushEOC(); return; } startpos = ScanPos(); NormalExpr(); PopEntry(); ReqEOC(); RecordCommand( startpos, CMD_ASSIGN ); }
static void MemMod( mad_type_handle mth, mad_type_kind mas ) { item_mach item; item_type ops; address addr; mad_type_info mti; ops = IT_ERR | IT_INC; if( mas & MAS_IO ) { ops |= IT_IO; addr.mach.offset = ReqExpr(); } else { addr = GetDataDot(); OptMemAddr( EXPR_DATA, &addr ); } if( CurrToken == T_COMMA ) Scan(); MADTypeInfo( mth, &mti ); while( !ScanEOC() ) { if( !( ops & IT_IO ) ) { SetDataDot( addr ); } if( CurrToken != T_COMMA ) { NormalExpr(); ToItemMAD( ExprSP, &item, &mti ); PopEntry(); if( CurrToken != T_COMMA && !ScanEOC() ) { Error( ERR_LOC, LIT_ENG( ERR_WANT_EOC ) ); } ItemPutMAD( &addr, &item, ops, mth ); } if( CurrToken == T_COMMA ) { Scan(); } } if( !(ops & IT_IO) ) { DbgUpdate( UP_MEM_CHANGE | UP_CODE_ADDR_CHANGE | UP_REG_CHANGE ); } }
void ProcDo( void ) { NormalExpr(); PopEntry(); ReqEOC(); }
OVL_EXTERN void GetExprAny( void *value ) { value=value; NormalExpr(); ReqEOC(); }
void ProcCall( void ) { mad_string ctype; int parm; const char *results; address start; const char *old; location_list ll; dig_type_info ti; dig_type_info *pti; char *p; const mad_reg_info **parm_reg; if( CurrToken == T_DIV ) { Scan(); ctype = ScanCall(); if( ctype == MAD_MSTR_NIL ) { Error( ERR_LOC, LIT_ENG( ERR_BAD_CALL_TYPE ) ); } } else { ctype = DefCallType; } CallExpr( &start ); if( _IsOff( SW_HAVE_SET_CALL ) ) { FiniCall(); p = TxtBuff; *p++ = '('; parm_reg = MADCallParmRegList( ctype, start ); for( parm = 0; parm_reg[parm] != NULL; ++parm ) { if( parm > 0 ) { *p++ = ','; } p = StrCopy( parm_reg[parm]->name, p ); } *p++ = ')'; StrCopy( MADCallReturnReg( ctype, start )->name, p ); old = ReScan( TxtBuff ); DoCallSet(); ReScan( old ); } parm = 0; results = DefReturn; if( CurrToken == T_LEFT_PAREN ) { Scan(); if( CurrToken != T_RIGHT_PAREN ) { for( ; ; ) { pti = &ti; if( CurrToken == T_DIV ) { Scan(); if( CurrToken == T_DIV ) { Scan(); /* on stack */ LocationCreate( &ll, LT_INTERNAL, NULL ); pti = NULL; } else { GetLocation( &ll, pti ); } } else { if( DefParms[parm] == NULL ) { /* on stack */ LocationCreate( &ll, LT_INTERNAL, NULL ); pti = NULL; } else { old = ReScan( DefParms[parm] ); GetLocation( &ll, pti ); ReScan( old ); } } PushLocation( &ll, pti ); NormalExpr(); SwapStack( 1 ); ++parm; if( CurrToken != T_COMMA ) break; Scan(); } } Recog( T_RIGHT_PAREN ); results = ScanPos(); if( CurrToken == T_DIV ) { Scan(); } else if( ScanEOC() ) { results = DefReturn; } else { /* syntax check */ ChkPrintList(); } } ReqEOC(); FreezeRegs(); if( PerformExplicitCall( start, ctype, parm ) && results != NULL ) { old = ReScan( results ); if( Spawn( CallResults ) == 0 ) { ReScan( old ); } } UnFreezeRegs(); FreePgmStack( false ); }