static unsigned MechPush_n_Pop( unsigned select, unsigned parm ) { location_list ll; dip_type_info ti; unsigned result; const static unsigned TypeTbl[] = { TI_CREATE( TK_VOID, TM_NONE, 0 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 1 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 1 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 2 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 2 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 4 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 4 ), TI_CREATE( TK_REAL, TM_NONE, 4 ), TI_CREATE( TK_REAL, TM_NONE, 8 ), TI_CREATE( TK_COMPLEX, TM_NONE, 8 ), TI_CREATE( TK_COMPLEX, TM_NONE, 16 ), }; result = FALSE; switch( select ) { case 0: PushInt( parm ); break; case 1: PushAddr( GetDotAddr() ); break; case 2: ParseRegSet( TRUE, &ll, &ti ); if( ti.size != 0 ) { if( ti.kind == TK_NONE ) Error( ERR_NONE, LIT( ERR_ILL_TYPE ) ); PushLocation( &ll, &ti ); result = TRUE; } break; case 3: if( CurrToken == T_INT_NUM ) { PushNum64( IntNumVal() ); Scan(); result = TRUE; } else if( CurrToken == T_REAL_NUM ) { PushRealNum( RealNumVal() ); Scan(); result = TRUE; } else { result = FALSE; } break; case 4: BasicType( TypeTbl[ parm ] ); break; case 5: DupStack(); break; case 6: PopEntry(); break; case 7: PushString(); break; case 8: /* here because old debuggers will always return FALSE */ switch( parm & SSL_VERSION_MAJOR_MASK ) { case SSL_VERSION_MAJOR_CURR: break; default: return( FALSE ); } #if SSL_VERSION_MINOR_CURR != 0 if( (parm & SSL_VERSION_MINOR_MASK) > SS_MINOR_VERSION_CURR ) { return( FALSE ); } #endif result = TRUE; break; case 9: BasicType( parm ); break; } return( result ); }
static ssl_value MechPush_n_Pop( unsigned select, ssl_value parm ) { location_list ll; dig_type_info ti; ssl_value result; static const unsigned TypeTbl[] = { TI_CREATE( TK_VOID, TM_NONE, 0 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 1 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 1 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 2 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 2 ), TI_CREATE( TK_INTEGER, TM_UNSIGNED, 4 ), TI_CREATE( TK_INTEGER, TM_SIGNED, 4 ), TI_CREATE( TK_REAL, TM_NONE, 4 ), TI_CREATE( TK_REAL, TM_NONE, 8 ), TI_CREATE( TK_COMPLEX, TM_NONE, 8 ), TI_CREATE( TK_COMPLEX, TM_NONE, 16 ), }; result = 0; switch( select ) { case 0: PushInt( SSL2INT( parm ) ); break; case 1: PushAddr( GetDotAddr() ); break; case 2: ParseRegSet( true, &ll, &ti ); if( ti.size != 0 ) { if( ti.kind == TK_NONE ) Error( ERR_NONE, LIT_ENG( ERR_ILL_TYPE ) ); PushLocation( &ll, &ti ); result = true; } break; case 3: if( CurrToken == T_INT_NUM ) { PushNum64( IntNumVal() ); Scan(); result = true; } else if( CurrToken == T_REAL_NUM ) { PushRealNum( RealNumVal() ); Scan(); result = true; } break; case 4: BasicType( TypeTbl[parm] ); break; case 5: DupStack(); break; case 6: PopEntry(); break; case 7: PushString(); break; case 8: /* here because old debuggers will always return false */ if( (parm & SSL_VERSION_MAJOR_MASK) != SSL_VERSION_MAJOR_CURR ) { break; } #if SSL_VERSION_MINOR_CURR != 0 if( (parm & SSL_VERSION_MINOR_MASK) > SS_MINOR_VERSION_CURR ) { break; } #endif result = true; break; case 9: BasicType( parm ); break; } return( result ); }