static SYMBOL registerHandler( // REGISTER THE HANDLER SYMBOL rw, // - symbol for R/W block unsigned rtn_code ) // - R/T handler code { #if 0 CgAssignPtr( CgSymbolPlusOffset( rw, CgbkInfo.size_data_ptr ) , CgAddrSymbol( RunTimeCallSymbol( rtn_code ) ) ); #else CgAssign( CgSymbolPlusOffset( rw, CgbkInfo.size_data_ptr ) , CgAddrSymbol( RunTimeCallSymbol( rtn_code ) ) , TY_CODE_PTR ); #endif return rw; }
label_handle CgSwitchBeg // GENERATE CODE FOR START OF SWITCH STMT ( FN_CTL* fctl ) // - function control { SW_CTL *ctl; // - control for switch cg_name sw_expr; // - switch expression cg_type sw_type; // - switch type sw_expr = CgExprPopType( &sw_type ); CgExprDtored( sw_expr, sw_type, DGRP_TEMPS, fctl ); sw_expr = CgExprPopType( &sw_type ); ctl = VstkPush( &stack_switches ); ctl->id = CGSelInit(); ctl->cases = 0; ctl->temp = CGTemp( sw_type ); ctl->type = sw_type; ctl->label = BENewLabel(); CgAssign( CGTempName( ctl->temp, sw_type ), sw_expr, sw_type ); return ctl->label; }
void CgAssignPtr( // EMIT A POINTER ASSIGNMENT cg_name lhs, // - lhs argument cg_name rhs ) // - rhs argument { CgAssign( lhs, rhs, TY_POINTER ); }