warp_label GBegSList( void ) { //=================================== // Generate code to start ADV initialization. EmitOp( FC_FCODE_SEEK ); WarpLabel = ObjTell(); OutU16( 0 ); return( ObjTell() ); }
label_id GDataProlog( void ) { //============================= // Start off data statement code. EmitOp( FC_START_DATA_STMT ); DtConstList = ObjTell(); OutU16( 0 ); return( 0 ); }
void GNullEofStmt( void ) { //====================== // Emit the "null" F-Code. // If an ATEND statement follows, the "null" F-Code will be patched with a // RT_SET_END F-Code. AtEndFCode = ObjTell(); EmitOp( FC_NULL_FCODE ); EmitOp( FC_NULL_FCODE ); }
void GBegCall( itnode *itptr ) { //================================= // Initialize for subprogram invocation. sym_id sp; obj_ptr curr_obj; int num_args; sp = itptr->sym_ptr; #if _CPU == 386 { aux_info *aux; aux = AuxLookupName( sp->u.ns.name, sp->u.ns.u2.name_len ); if( aux != NULL ) { if( aux->cclass & FAR16_CALL ) { if( (SubProgId->u.ns.flags & SY_SUBPROG_TYPE) == SY_PROGRAM ) { ProgramInfo.cclass |= THUNK_PROLOG; } else { aux = AuxLookupAdd( SubProgId->u.ns.name, SubProgId->u.ns.u2.name_len ); aux->cclass |= THUNK_PROLOG; } } } } #endif EmitOp( FC_CALL ); OutPtr( itptr->sym_ptr ); curr_obj = ObjTell(); OutU16( 0 ); if( (Options & OPT_DESCRIPTOR) == 0 ) { if( (sp->u.ns.flags & SY_SUBPROG_TYPE) == SY_FUNCTION ) { if( (sp->u.ns.flags & SY_INTRINSIC) == 0 ) { if( sp->u.ns.u1.s.typ == FT_CHAR ) { OutPtr( GTempString( sp->u.ns.xt.size ) ); } } } } num_args = DumpArgInfo( itptr->list ); curr_obj = ObjSeek( curr_obj ); OutU16( num_args ); ObjSeek( curr_obj ); if( (sp->u.ns.flags & SY_SUBPROG_TYPE) == SY_FUNCTION ) { if( sp->u.ns.u1.s.typ == FT_CHAR ) { if( (Options & OPT_DESCRIPTOR) || (sp->u.ns.flags & SY_INTRINSIC) ) { OutPtr( GTempString( sp->u.ns.xt.size ) ); } } } }
void StartFmt( cs_label fmt_label ) { //====================================== // Start format processing. obj_ptr new_fmt; EmitOp( FC_FCODE_SEEK ); new_fmt = ObjTell(); OutU16( 0 ); OutObjPtr( FormatList ); FormatList = new_fmt; if( StmtProc == PR_FMT ) { if( fmt_label.st_label == NULL ) { // FORMAT statement with no statement label OutU16( 0 ); } else { OutU16( fmt_label.st_label->st.address ); } } else { OutU16( fmt_label.g_label ); } }