예제 #1
0
warp_label              GBegSList( void ) {
//===================================

// Generate code to start ADV initialization.

    EmitOp( FC_FCODE_SEEK );
    WarpLabel = ObjTell();
    OutU16( 0 );
    return( ObjTell() );
}
예제 #2
0
label_id        GDataProlog( void ) {
//=============================

// Start off data statement code.

    EmitOp( FC_START_DATA_STMT );
    DtConstList = ObjTell();
    OutU16( 0 );
    return( 0 );
}
예제 #3
0
파일: gio.c 프로젝트: bhanug/open-watcom-v2
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 );
}
예제 #4
0
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 ) );
            }
        }
    }
}
예제 #5
0
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 );
    }
}