Beispiel #1
0
        protected virtual void EmitOperator(IBasicFunctionCallNode fn)
        {
            basic_function_type ft = fn.basic_function.basic_function_type;
            switch (ft)
            {
                case basic_function_type.none: return;

                case basic_function_type.iadd:
                case basic_function_type.badd:
                case basic_function_type.sadd:
                case basic_function_type.ladd:
                case basic_function_type.fadd:
                case basic_function_type.sbadd:
                case basic_function_type.usadd:
                case basic_function_type.uladd:
                case basic_function_type.dadd: il.Emit(OpCodes.Add); break;
                case basic_function_type.uiadd:
                    //il.Emit(OpCodes.Conv_U8);
                    il.Emit(OpCodes.Add);
                    il.Emit(OpCodes.Conv_I8);
                    break;

                case basic_function_type.isub:
                case basic_function_type.bsub:
                case basic_function_type.ssub:
                case basic_function_type.lsub:
                case basic_function_type.fsub:
                //case basic_function_type.uisub:
                case basic_function_type.sbsub:
                case basic_function_type.ussub:
                case basic_function_type.ulsub:
                case basic_function_type.dsub: il.Emit(OpCodes.Sub); break;
                case basic_function_type.uisub: il.Emit(OpCodes.Sub); il.Emit(OpCodes.Conv_I8); break;

                case basic_function_type.imul:
                case basic_function_type.bmul:
                case basic_function_type.smul:
                case basic_function_type.lmul:
                case basic_function_type.fmul:
                //case basic_function_type.uimul:
                case basic_function_type.sbmul:
                case basic_function_type.usmul:
                case basic_function_type.ulmul:
                case basic_function_type.dmul: il.Emit(OpCodes.Mul); break;
                case basic_function_type.uimul: il.Emit(OpCodes.Mul); il.Emit(OpCodes.Conv_I8); break;

                case basic_function_type.idiv:
                case basic_function_type.bdiv:
                case basic_function_type.sdiv:
                case basic_function_type.ldiv:
                case basic_function_type.fdiv:
                //case basic_function_type.uidiv:
                case basic_function_type.sbdiv:
                case basic_function_type.usdiv:

                case basic_function_type.ddiv: il.Emit(OpCodes.Div); break;
                case basic_function_type.uidiv: il.Emit(OpCodes.Div_Un); il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.uldiv: il.Emit(OpCodes.Div_Un); break;

                case basic_function_type.imod:
                case basic_function_type.bmod:
                case basic_function_type.smod:
                //case basic_function_type.uimod:
                case basic_function_type.sbmod:
                case basic_function_type.usmod:

                case basic_function_type.lmod: il.Emit(OpCodes.Rem); break;
                case basic_function_type.uimod: il.Emit(OpCodes.Rem_Un); il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ulmod: il.Emit(OpCodes.Rem_Un); break;

                case basic_function_type.isinc:
                case basic_function_type.bsinc:
                case basic_function_type.sbsinc:
                case basic_function_type.ssinc:
                case basic_function_type.ussinc:
                case basic_function_type.uisinc:
                case basic_function_type.ulsinc: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Add); break;
                case basic_function_type.lsinc: il.Emit(OpCodes.Ldc_I8, 1); il.Emit(OpCodes.Add); break;

                case basic_function_type.isdec:
                case basic_function_type.bsdec:
                case basic_function_type.sbsdec:
                case basic_function_type.ssdec:
                case basic_function_type.ussdec:
                case basic_function_type.uisdec:
                case basic_function_type.ulsdec: il.Emit(OpCodes.Ldc_I4_1); il.Emit(OpCodes.Sub); break;
                case basic_function_type.lsdec: il.Emit(OpCodes.Ldc_I8, 1); il.Emit(OpCodes.Sub); break;

                case basic_function_type.inot:
                case basic_function_type.bnot:
                case basic_function_type.snot:
                case basic_function_type.uinot:
                case basic_function_type.sbnot:
                case basic_function_type.usnot:
                case basic_function_type.ulnot:
                case basic_function_type.lnot: il.Emit(OpCodes.Not); break;
                case basic_function_type.boolsdec:
                case basic_function_type.boolsinc:
                case basic_function_type.boolnot: il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;

                case basic_function_type.ishl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.ishr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.bshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.bshr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.sshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.sshr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.lshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.lshr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.uishl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.sbshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.usshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.ulshl: il.Emit(OpCodes.Shl); break;
                case basic_function_type.uishr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.sbshr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.usshr: il.Emit(OpCodes.Shr); break;
                case basic_function_type.ulshr: il.Emit(OpCodes.Shr); break;

                case basic_function_type.ieq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.inoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.igr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.igreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ism: il.Emit(OpCodes.Clt); break;
                case basic_function_type.ismeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.seq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.snoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.sgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.sgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ssm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.ssmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.beq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.bnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.bgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.bgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.bsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.bsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;


                case basic_function_type.leq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.lnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.lgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.lgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.lsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.lsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.uieq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.uinoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.uigr: il.Emit(OpCodes.Cgt_Un); break;
                case basic_function_type.uigreq: il.Emit(OpCodes.Clt_Un); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.uism: il.Emit(OpCodes.Clt_Un); break;
                case basic_function_type.uismeq: il.Emit(OpCodes.Cgt_Un); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.sbeq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.sbnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.sbgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.sbgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.sbsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.sbsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.useq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.usnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.usgr: il.Emit(OpCodes.Cgt_Un); break;
                case basic_function_type.usgreq: il.Emit(OpCodes.Clt_Un); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ussm: il.Emit(OpCodes.Clt_Un); break;
                case basic_function_type.ussmeq: il.Emit(OpCodes.Cgt_Un); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.uleq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ulnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ulgr: il.Emit(OpCodes.Cgt_Un); break;
                case basic_function_type.ulgreq: il.Emit(OpCodes.Clt_Un); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.ulsm: il.Emit(OpCodes.Clt_Un); break;
                case basic_function_type.ulsmeq: il.Emit(OpCodes.Cgt_Un); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.booleq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.boolnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.boolgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.boolgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.boolsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.boolsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;


                case basic_function_type.feq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.fnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.fgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.fgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.fsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.fsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;


                case basic_function_type.deq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.dnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.dgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.dgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.dsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.dsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;


                case basic_function_type.chareq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.charnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.chargr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.chargreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.charsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.charsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.objeq: il.Emit(OpCodes.Ceq); break;
                case basic_function_type.objnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;

                case basic_function_type.band: il.Emit(OpCodes.And); break;
                case basic_function_type.bor: il.Emit(OpCodes.Or); break;
                case basic_function_type.bxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.iand: il.Emit(OpCodes.And); break;
                case basic_function_type.ior: il.Emit(OpCodes.Or); break;
                case basic_function_type.ixor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.land: il.Emit(OpCodes.And); break;
                case basic_function_type.lor: il.Emit(OpCodes.Or); break;
                case basic_function_type.lxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.sand: il.Emit(OpCodes.And); break;
                case basic_function_type.sor: il.Emit(OpCodes.Or); break;
                case basic_function_type.sxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.uiand: il.Emit(OpCodes.And); break;
                case basic_function_type.uior: il.Emit(OpCodes.Or); break;
                case basic_function_type.uixor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.sband: il.Emit(OpCodes.And); break;
                case basic_function_type.sbor: il.Emit(OpCodes.Or); break;
                case basic_function_type.sbxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.usand: il.Emit(OpCodes.And); break;
                case basic_function_type.usor: il.Emit(OpCodes.Or); break;
                case basic_function_type.usxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.uland: il.Emit(OpCodes.And); break;
                case basic_function_type.ulor: il.Emit(OpCodes.Or); break;
                case basic_function_type.ulxor: il.Emit(OpCodes.Xor); break;

                case basic_function_type.booland: il.Emit(OpCodes.And); break;
                case basic_function_type.boolor: il.Emit(OpCodes.Or); break;
                case basic_function_type.boolxor: il.Emit(OpCodes.Xor); break;
                //case basic_function_type.chareq: il.Emit(OpCodes.Ceq); break;
                //case basic_function_type.charnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.enumgr: il.Emit(OpCodes.Cgt); break;
                case basic_function_type.enumgreq: il.Emit(OpCodes.Clt); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                case basic_function_type.enumsm: il.Emit(OpCodes.Clt); break;
                case basic_function_type.enumsmeq: il.Emit(OpCodes.Cgt); il.Emit(OpCodes.Ldc_I4_0);
                    il.Emit(OpCodes.Ceq); break;

                case basic_function_type.iunmin:
                case basic_function_type.bunmin:
                case basic_function_type.sunmin:
                case basic_function_type.dunmin:
                //case basic_function_type.uiunmin:
                case basic_function_type.sbunmin:
                case basic_function_type.usunmin:
                //case basic_function_type.ulunmin:
                case basic_function_type.lunmin: il.Emit(OpCodes.Neg); break;
                case basic_function_type.uiunmin: il.Emit(OpCodes.Neg); il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.chartoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.chartous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.chartoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.chartol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.chartoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.chartof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.chartod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.chartob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.chartosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.chartos: il.Emit(OpCodes.Conv_I2); break;

                case basic_function_type.itod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.itol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.itof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.itob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.itosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.itos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.itous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.itoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.itoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.itochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.btos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.btous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.btoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.btoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.btol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.btoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.btof: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.btod: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.btosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.btochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.sbtos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.sbtoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.sbtol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.sbtof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.sbtod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.sbtob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.sbtous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.sbtoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.sbtoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.sbtochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.stoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.stol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.stof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.stod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.stob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.stosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.stous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.stoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.stoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.stochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ustoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ustoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ustol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ustoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ustof: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ustod: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ustob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ustosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ustos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ustochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.uitoi: il.Emit(OpCodes.Conv_I4); break;
                //case basic_function_type.ustoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.uitol: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.uitoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.uitof: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.uitod: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.uitob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.uitosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.uitos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.uitous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.uitochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ultof: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ultod: il.Emit(OpCodes.Conv_R_Un); il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ultob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ultosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ultos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ultous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ultoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ultoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ultol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ultochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ltof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ltod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ltob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ltosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ltos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ltous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ltoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ltoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ltoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ltochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ftod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ftob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ftosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ftos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ftous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ftoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ftoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ftol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ftoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ftochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.dtob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.dtosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.dtos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.dtous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.dtoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.dtoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.dtol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.dtoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.dtof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.dtochar: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.booltoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.booltob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.booltosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.booltos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.booltous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.booltoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.booltol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.booltoul: il.Emit(OpCodes.Conv_U8); break;

                case basic_function_type.objtoobj:
                    {
                        //(ssyy) Вставил 15.05.08
                        Type from_val_type = null;
                        IExpressionNode par0 = fn.real_parameters[0];
                        if (!(par0 is SemanticTree.INullConstantNode) && (par0.type.is_value_type || par0.type.is_generic_parameter))
                        {
                            from_val_type = helper.GetTypeReference(par0.type).tp;
                        }
                        Type t = helper.GetTypeReference(fn.type).tp;
                        if (!fn.type.IsDelegate)
                            NETGeneratorTools.PushCast(il, t, from_val_type);
                        break;
                    }

            }
        }
 public virtual void visit(IBasicFunctionCallNode value)
 {
 }
Beispiel #3
0
 private void ConvertSokrOrExpression(IBasicFunctionCallNode expr)
 {
     Label lb1 = il.DefineLabel();
     Label lb2 = il.DefineLabel();
     IExpressionNode[] real_parameters = expr.real_parameters;
     real_parameters[0].visit(this);
     il.Emit(OpCodes.Brtrue, lb1);
     il.Emit(OpCodes.Ldc_I4_0);
     real_parameters[1].visit(this);
     il.Emit(OpCodes.Or);
     il.Emit(OpCodes.Br, lb2);
     il.MarkLabel(lb1);
     il.Emit(OpCodes.Ldc_I4_1);
     il.MarkLabel(lb2);
 }
Beispiel #4
0
 private void ConvertObjToObj(IBasicFunctionCallNode expr)
 {
     //expr.real_parameters[0]
     //bool box_awaited =
     //    (ctn2 != null && ctn2.compiled_type == TypeFactory.ObjectType || tn2.IsInterface) && value.type != null && (ctn3.is_value_type || ctn3.is_generic_parameter) && !(value.real_parameters[i] is SemanticTree.INullConstantNode);
 }
Beispiel #5
0
        public void visit(IBasicFunctionCallNode value)
        {
            string s = value.GetType().Name + ".";
            //prepare_node(value.basic_function, "IBasicFunctionCallNode.basic_function");    // или ссылка?             
            //prepare_node(value.function, s + "function");     // или ссылка?         

            prepare_string_node(value.last_result_function_call.ToString(), s + "last_result_function_call");
            prepare_base_node_collection(value.real_parameters, s + "real_parametrs", "real_parametrs", value.real_parameters.Length);
            prepare_node(value.type, s + "type");            
        }
		public virtual void visit(IBasicFunctionCallNode value)
		{
		}
Beispiel #7
0
        public void visit(IBasicFunctionCallNode value)
        {
            for (int i = value.real_parameters.Length-1; i >= 0 ;i--)
                value.real_parameters[i].visit(this);  
                                         
            switch (value.basic_function.basic_function_type)
            {
                case basic_function_type.none: return;

                case basic_function_type.iassign: 
                case basic_function_type.bassign: 
                case basic_function_type.lassign: 
                case basic_function_type.fassign: 
                case basic_function_type.dassign: 
                case basic_function_type.uiassign:
                case basic_function_type.usassign:
                case basic_function_type.ulassign:
                case basic_function_type.sassign: 
                case basic_function_type.sbassign:
                case basic_function_type.boolassign:
                case basic_function_type.charassign:
                case basic_function_type.objassign:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeAssign("binop_assign", value));
                    break;

                ///////////                

                case basic_function_type.iadd:
                case basic_function_type.badd:
                case basic_function_type.sadd:
                case basic_function_type.ladd:
                case basic_function_type.fadd:
                case basic_function_type.sbadd:
                case basic_function_type.usadd:
                case basic_function_type.uladd:
                case basic_function_type.dadd: 
                case basic_function_type.uiadd:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeAdd("binop_add", value));
                    break;

                    // minus
                case basic_function_type.isub:
                case basic_function_type.bsub:
                case basic_function_type.ssub:
                case basic_function_type.lsub:
                case basic_function_type.fsub:
                //case basic_function_type.uisub:
                case basic_function_type.sbsub:
                case basic_function_type.ussub:
                case basic_function_type.ulsub:
                case basic_function_type.dsub: 
                case basic_function_type.uisub:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeSubtract("binop_subtract", value));
                    break;

                case basic_function_type.imul:
                case basic_function_type.bmul:
                case basic_function_type.smul:
                case basic_function_type.lmul:
                case basic_function_type.fmul:
                //case basic_function_type.uimul:
                case basic_function_type.sbmul:
                case basic_function_type.usmul:
                case basic_function_type.ulmul:
                case basic_function_type.dmul: 
                case basic_function_type.uimul:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeMult("binop_mult", value));
                    break;

                case basic_function_type.idiv:
                case basic_function_type.bdiv:
                case basic_function_type.sdiv:
                case basic_function_type.ldiv:
                case basic_function_type.fdiv:
                //case basic_function_type.uidiv:
                case basic_function_type.sbdiv:
                case basic_function_type.usdiv:
                case basic_function_type.uldiv:
                case basic_function_type.ddiv: 
                case basic_function_type.uidiv:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeDiv("binop_div", value));
                    break;

                case basic_function_type.imod:
                case basic_function_type.bmod:
                case basic_function_type.smod:
                //case basic_function_type.uimod:
                case basic_function_type.sbmod:
                case basic_function_type.usmod:
                case basic_function_type.ulmod:
                case basic_function_type.lmod: 
                case basic_function_type.uimod:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeMod("binop_mod", value));
                    break;

                    // increment
                case basic_function_type.isinc:
                case basic_function_type.bsinc:
                case basic_function_type.sbsinc:
                case basic_function_type.ssinc:
                case basic_function_type.ussinc:
                case basic_function_type.uisinc:
                case basic_function_type.ulsinc:
                case basic_function_type.lsinc: 
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeInc("binop_inc", value));
                    break;

                    // decrement
                case basic_function_type.isdec:
                case basic_function_type.bsdec:
                case basic_function_type.sbsdec:
                case basic_function_type.ssdec:
                case basic_function_type.ussdec:
                case basic_function_type.uisdec:
                case basic_function_type.ulsdec: 
                case basic_function_type.lsdec:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeDec("binop_dec", value));
                    break;

                    // not
                case basic_function_type.inot:
                case basic_function_type.bnot:
                case basic_function_type.snot:
                case basic_function_type.uinot:
                case basic_function_type.sbnot:
                case basic_function_type.usnot:
                case basic_function_type.ulnot:
                case basic_function_type.lnot:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeBinNot("binop_not", value));
                    break;
                case basic_function_type.boolsdec: 
                case basic_function_type.boolsinc:
                    throw new System.Exception("UNknown operation!!!");
                case basic_function_type.boolnot: //il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeUnNot("unop_not", value));
                    break;
                
                    //  <<
                case basic_function_type.ishl: 
                case basic_function_type.bshl: 
                case basic_function_type.sshl:
                case basic_function_type.lshl:
                case basic_function_type.uishl:
                case basic_function_type.sbshl:
                case basic_function_type.usshl:
                case basic_function_type.ulshl:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeShl("binop_shl", value));
                    break;
                    // >>
                case basic_function_type.ishr:    
                case basic_function_type.bshr: 
                case basic_function_type.sshr: 
                case basic_function_type.lshr: 
                case basic_function_type.uishr:
                case basic_function_type.sbshr:
                case basic_function_type.usshr:
                case basic_function_type.ulshr:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeShr("binop_shr", value));
                    break;

                    // ==
                case basic_function_type.ieq:
                case basic_function_type.seq:
                case basic_function_type.beq:
                case basic_function_type.leq:
                case basic_function_type.uieq:
                case basic_function_type.sbeq:
                case basic_function_type.useq:
                case basic_function_type.uleq:
                case basic_function_type.booleq:
                case basic_function_type.feq: 
                case basic_function_type.deq: 
                case basic_function_type.chareq:
                case basic_function_type.objeq:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeEq("binop_eq", value));
                    break;
                    // !=
                case basic_function_type.inoteq:
                case basic_function_type.snoteq:
                case basic_function_type.bnoteq:
                case basic_function_type.lnoteq:
                case basic_function_type.uinoteq:
                case basic_function_type.sbnoteq:
                case basic_function_type.usnoteq:
                case basic_function_type.ulnoteq:
                case basic_function_type.boolnoteq:
                case basic_function_type.fnoteq:
                case basic_function_type.dnoteq:
                case basic_function_type.charnoteq:
                case basic_function_type.objnoteq:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeNotEq("binop_noteq", value));
                    break;
                    // >
                case basic_function_type.igr:
                case basic_function_type.sgr:
                case basic_function_type.bgr:
                case basic_function_type.lgr:
                case basic_function_type.uigr:
                case basic_function_type.sbgr:
                case basic_function_type.usgr:
                case basic_function_type.ulgr:
                case basic_function_type.boolgr:
                case basic_function_type.fgr:
                case basic_function_type.dgr:
                case basic_function_type.chargr:
                case basic_function_type.enumgr:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeGr("binop_gr", value));
                    break;
                    // >=
                case basic_function_type.igreq:
                case basic_function_type.sgreq:
                case basic_function_type.bgreq:
                case basic_function_type.lgreq:
                case basic_function_type.uigreq:
                case basic_function_type.sbgreq:
                case basic_function_type.usgreq:
                case basic_function_type.ulgreq:
                case basic_function_type.boolgreq:
                case basic_function_type.fgreq:
                case basic_function_type.dgreq:
                case basic_function_type.chargreq:
                case basic_function_type.enumgreq:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeGrEq("binop_greq", value));
                    break;
                    // <
                case basic_function_type.ism:
                case basic_function_type.ssm:
                case basic_function_type.bsm:
                case basic_function_type.lsm:
                case basic_function_type.uism:
                case basic_function_type.sbsm:
                case basic_function_type.ussm:
                case basic_function_type.ulsm:
                case basic_function_type.boolsm:
                case basic_function_type.fsm:
                case basic_function_type.dsm:
                case basic_function_type.charsm:
                case basic_function_type.enumsm:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeSm("binop_sm", value));
                    break;

                    // <=
                case basic_function_type.ismeq:                    
                case basic_function_type.ssmeq:                                                    
                case basic_function_type.bsmeq:                                
                case basic_function_type.lsmeq:                                
                case basic_function_type.uismeq:                               
                case basic_function_type.sbsmeq:                               
                case basic_function_type.ussmeq:                               
                case basic_function_type.ulsmeq:                               
                case basic_function_type.boolsmeq:                             
                case basic_function_type.fsmeq:                                
                case basic_function_type.dsmeq:                                
                case basic_function_type.charsmeq:
                case basic_function_type.enumsmeq:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeSmEq("binop_smeq", value));
                    break;
                    
                case basic_function_type.band:
                case basic_function_type.iand:
                case basic_function_type.land:
                case basic_function_type.sand:
                case basic_function_type.uiand:
                case basic_function_type.sband:
                case basic_function_type.usand:
                case basic_function_type.uland:
                case basic_function_type.booland:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeAnd("binop_and", value));
                    break;

                case basic_function_type.bor:
                case basic_function_type.ior:
                case basic_function_type.lor:
                case basic_function_type.sor:
                case basic_function_type.uior:
                case basic_function_type.sbor:
                case basic_function_type.usor:
                case basic_function_type.ulor:
                case basic_function_type.boolor:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeOr("binop_or", value));
                    break;

                case basic_function_type.bxor:
                case basic_function_type.ixor:
                case basic_function_type.lxor:
                case basic_function_type.sxor:
                case basic_function_type.uixor:
                case basic_function_type.sbxor:
                case basic_function_type.usxor:
                case basic_function_type.ulxor:
                case basic_function_type.boolxor:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeXor("binop_xor", value));
                    break;
                //case basic_function_type.chareq: il.Emit(OpCodes.Ceq); break;
                //case basic_function_type.charnoteq: il.Emit(OpCodes.Ceq); il.Emit(OpCodes.Ldc_I4_0); il.Emit(OpCodes.Ceq); break;                                                                                    
                    
                case basic_function_type.iunmin:
                case basic_function_type.bunmin:
                case basic_function_type.sunmin:
                case basic_function_type.dunmin:
                //case basic_function_type.uiunmin:
                case basic_function_type.sbunmin:
                case basic_function_type.usunmin:
                //case basic_function_type.ulunmin:
                case basic_function_type.lunmin:
                case basic_function_type.uiunmin:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeUnMin("binop_unmin", value));
                    break;

                case basic_function_type.iinc:
                case basic_function_type.binc:
                case basic_function_type.sinc:
                case basic_function_type.linc:
                case basic_function_type.uiinc:
                case basic_function_type.sbinc:
                case basic_function_type.usinc:
                case basic_function_type.ulinc:
                case basic_function_type.boolinc:
                case basic_function_type.cinc:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeUnInc("unop_inc", value));
                    break;

                case basic_function_type.idec:
                case basic_function_type.bdec:
                case basic_function_type.sdec:
                case basic_function_type.ldec:
                case basic_function_type.uidec:
                case basic_function_type.sbdec:
                case basic_function_type.usdec:
                case basic_function_type.uldec:
                case basic_function_type.booldec:
                case basic_function_type.cdec:
                    ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeUnDec("unop_dec", value));
                    break;

                    /*
                case basic_function_type.chartoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.chartous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.chartoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.chartol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.chartoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.chartof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.chartod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.chartob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.chartosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.chartos: il.Emit(OpCodes.Conv_I2); break;

                case basic_function_type.itod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.itol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.itof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.itob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.itosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.itos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.itous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.itoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.itoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.itochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.btos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.btous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.btoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.btoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.btol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.btoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.btof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.btod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.btosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.btochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.sbtos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.sbtoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.sbtol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.sbtof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.sbtod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.sbtob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.sbtous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.sbtoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.sbtoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.sbtochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.stoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.stol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.stof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.stod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.stob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.stosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.stous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.stoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.stoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.stochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ustoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ustoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ustol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ustoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ustof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ustod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ustob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ustosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ustos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ustochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.uitoi: il.Emit(OpCodes.Conv_I4); break;
                //case basic_function_type.ustoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.uitol: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.uitoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.uitof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.uitod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.uitob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.uitosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.uitos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.uitous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.uitochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ultof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ultod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ultob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ultosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ultos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ultous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ultoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ultoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ultol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ultochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ltof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.ltod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ltob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ltosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ltos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ltous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ltoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ltoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ltoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ltochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.ftod: il.Emit(OpCodes.Conv_R8); break;
                case basic_function_type.ftob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.ftosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.ftos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.ftous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.ftoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.ftoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.ftol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.ftoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.ftochar: il.Emit(OpCodes.Conv_U2); break;

                case basic_function_type.dtob: il.Emit(OpCodes.Conv_U1); break;
                case basic_function_type.dtosb: il.Emit(OpCodes.Conv_I1); break;
                case basic_function_type.dtos: il.Emit(OpCodes.Conv_I2); break;
                case basic_function_type.dtous: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.dtoi: il.Emit(OpCodes.Conv_I4); break;
                case basic_function_type.dtoui: il.Emit(OpCodes.Conv_U4); break;
                case basic_function_type.dtol: il.Emit(OpCodes.Conv_I8); break;
                case basic_function_type.dtoul: il.Emit(OpCodes.Conv_U8); break;
                case basic_function_type.dtof: il.Emit(OpCodes.Conv_R4); break;
                case basic_function_type.dtochar: il.Emit(OpCodes.Conv_U2); break;
                case basic_function_type.booltoi: il.Emit(OpCodes.Conv_I4); break;

                case basic_function_type.objtoobj:
                    {
                        NETGeneratorTools.PushCast(il, helper.GetTypeReference(fn.type).tp);
                        break;
                    }
                */
            }
        }