From 391e54b77bc2864a69369eafb02e4960a9508242 Mon Sep 17 00:00:00 2001 From: Antonio Linares Date: Sat, 28 Jun 2003 09:56:13 +0000 Subject: [PATCH] for...next loops implemented for Harbour.NET --- harbour/source/compiler/gencli.c | 107 +++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 20 deletions(-) diff --git a/harbour/source/compiler/gencli.c b/harbour/source/compiler/gencli.c index b053e459aa..6565cf1e41 100644 --- a/harbour/source/compiler/gencli.c +++ b/harbour/source/compiler/gencli.c @@ -534,7 +534,10 @@ static HB_GENC_FUNC( hb_p_fortest ) HB_SYMBOL_UNUSED( pFunc ); HB_SYMBOL_UNUSED( lPCodePos ); - fprintf( cargo->yyc, "\tHB_P_FORTEST,\n" ); + fprintf( cargo->yyc, " IL_%04lX: ", lPCodePos ); + fprintf( cargo->yyc, "call bool ObjForTest( object, object, object )\n" ); + + // fprintf( cargo->yyc, "\tHB_P_FORTEST,\n" ); return 1; } @@ -1499,13 +1502,18 @@ static HB_GENC_FUNC( hb_p_pushlocalref ) static HB_GENC_FUNC( hb_p_pushlong ) { - fprintf( cargo->yyc, "\tHB_P_PUSHLONG, %i, %i, %i, %i,", - pFunc->pCode[ lPCodePos + 1 ], - pFunc->pCode[ lPCodePos + 2 ], - pFunc->pCode[ lPCodePos + 3 ], - pFunc->pCode[ lPCodePos + 4 ] ); - if( cargo->bVerbose ) fprintf( cargo->yyc, "\t/* %li */", *( ( long * ) &( pFunc->pCode[ lPCodePos + 1 ] ) ) ); - fprintf( cargo->yyc, "\n" ); + fprintf( cargo->yyc, " IL_%04lX: ", lPCodePos ); + fprintf( cargo->yyc, "ldc.i4 %li\n", + *( ( long * ) &( pFunc->pCode[ lPCodePos + 1 ] ) ) ); + fprintf( cargo->yyc, " box [mscorlib]System.Int32\n" ); + + // fprintf( cargo->yyc, "\tHB_P_PUSHLONG, %i, %i, %i, %i,", + // pFunc->pCode[ lPCodePos + 1 ], + // pFunc->pCode[ lPCodePos + 2 ], + // pFunc->pCode[ lPCodePos + 3 ], + // pFunc->pCode[ lPCodePos + 4 ] ); + // if( cargo->bVerbose ) fprintf( cargo->yyc, "\t/* %li */", *( ( long * ) &( pFunc->pCode[ lPCodePos + 1 ] ) ) ); + // fprintf( cargo->yyc, "\n" ); return 1 + sizeof( long ); } @@ -1881,9 +1889,10 @@ static HB_GENC_FUNC( hb_p_one ) HB_SYMBOL_UNUSED( pFunc ); HB_SYMBOL_UNUSED( lPCodePos ); - fprintf( cargo->yyc, " ldc.i4.1\n" ); + fprintf( cargo->yyc, " IL_%04lX: ", lPCodePos ); + fprintf( cargo->yyc, "ldc.i4.1\n" ); // turn the stack value into an object - fprintf( cargo->yyc, " box [mscorlib]System.Int32\n" ); + fprintf( cargo->yyc, " box [mscorlib]System.Int32\n" ); // fprintf( cargo->yyc, "\tHB_P_ONE,\n" ); @@ -1937,17 +1946,27 @@ static HB_GENC_FUNC( hb_p_macrolistend ) #define HB_PCODE_MKSHORT( p ) ( *( SHORT * )( p ) ) static HB_GENC_FUNC( hb_p_localnearaddint ) { - fprintf( cargo->yyc, "\tHB_P_LOCALNEARADDINT, %i, %i, %i,", pFunc->pCode[ lPCodePos + 1 ], - pFunc->pCode[ lPCodePos + 2 ], - pFunc->pCode[ lPCodePos + 3 ] ); + fprintf( cargo->yyc, " IL_%04lX: ", lPCodePos ); + fprintf( cargo->yyc, "ldloc.%i\n", pFunc->pCode[ lPCodePos + 1 ] - 1 ); + fprintf( cargo->yyc, " unbox [mscorlib]System.Int32\n" ); + fprintf( cargo->yyc, " ldind.i4\n" ); + fprintf( cargo->yyc, " ldc.i4.s %i\n", pFunc->pCode[ lPCodePos + 2 ] + + ( pFunc->pCode[ lPCodePos + 3 ] * 256 ) ); + fprintf( cargo->yyc, " add\n" ); + fprintf( cargo->yyc, " box [mscorlib]System.Int32\n" ); + fprintf( cargo->yyc, " stloc.%i\n", pFunc->pCode[ lPCodePos + 1 ] - 1 ); - if( cargo->bVerbose ) - { - fprintf( cargo->yyc, "\t/* %s %i*/", hb_compLocalVariableFind( pFunc, ( signed char ) pFunc->pCode[ lPCodePos + 1 ] )->szName, - HB_PCODE_MKSHORT( &( pFunc->pCode[ lPCodePos + 2 ] ) ) ); - } - - fprintf( cargo->yyc, "\n" ); + // fprintf( cargo->yyc, "\tHB_P_LOCALNEARADDINT, %i, %i, %i,", pFunc->pCode[ lPCodePos + 1 ], + // pFunc->pCode[ lPCodePos + 2 ], + // pFunc->pCode[ lPCodePos + 3 ] ); + // + // if( cargo->bVerbose ) + // { + // fprintf( cargo->yyc, "\t/* %s %i*/", hb_compLocalVariableFind( pFunc, ( signed char ) pFunc->pCode[ lPCodePos + 1 ] )->szName, + // HB_PCODE_MKSHORT( &( pFunc->pCode[ lPCodePos + 2 ] ) ) ); + // } + // + // fprintf( cargo->yyc, "\n" ); return 4; } @@ -2242,6 +2261,50 @@ static void hb_genNetFunctions( FILE * yyc ) " IL_003c: br.s IL_003e", " IL_003e: ldloc.0", " IL_003f: ret", +"}", 0 }; + + // public static bool ObjForTest( object current, object end, object step ) + // { + // if( ( int ) step >= 0 ) + // return ( int ) current <= ( int ) end; + // else + // return ( int ) current >= ( int ) end; + // } + + char * ObjForTest[] = { +"\n.method public static bool ObjForTest(object current,object end,object step)", +"{", +" .maxstack 2", +" .locals init (bool V_0)", +" IL_0000: ldarg.2", +" IL_0001: unbox [mscorlib]System.Int32", +" IL_0006: ldind.i4", +" IL_0007: ldc.i4.0", +" IL_0008: blt.s IL_0020", +" IL_000a: ldarg.0", +" IL_000b: unbox [mscorlib]System.Int32", +" IL_0010: ldind.i4", +" IL_0011: ldarg.1", +" IL_0012: unbox [mscorlib]System.Int32", +" IL_0017: ldind.i4", +" IL_0018: cgt", +" IL_001a: ldc.i4.0", +" IL_001b: ceq", +" IL_001d: stloc.0", +" IL_001e: br.s IL_0036", +" IL_0020: ldarg.0", +" IL_0021: unbox [mscorlib]System.Int32", +" IL_0026: ldind.i4", +" IL_0027: ldarg.1", +" IL_0028: unbox [mscorlib]System.Int32", +" IL_002d: ldind.i4", +" IL_002e: clt", +" IL_0030: ldc.i4.0", +" IL_0031: ceq", +" IL_0033: stloc.0", +" IL_0034: br.s IL_0036", +" IL_0036: ldloc.0", +" IL_0037: ret", "}", 0 }; i = 0; @@ -2251,4 +2314,8 @@ static void hb_genNetFunctions( FILE * yyc ) i = 0; while( ObjLessEqual[ i ] != 0 ) fprintf( yyc, "%s\n", ObjLessEqual[ i++ ] ); + + i = 0; + while( ObjForTest[ i ] != 0 ) + fprintf( yyc, "%s\n", ObjForTest[ i++ ] ); }