From 9839876b5a6025cd9bf2dca4642d809eb9732ef2 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 7 Dec 2013 14:02:17 +0100 Subject: [PATCH] =?UTF-8?q?Changeset:=2043=20Changeset:=2043=20-=20Arreglo?= =?UTF-8?q?=20del=20bug=20del=20m=C3=A9todo=20movido=20y=20de=20los=20espa?= =?UTF-8?q?cios=20que=20se=20pierden=20por=20el=20TEXT/ENDTEXT=20-=20Nuevo?= =?UTF-8?q?s=20casos=20de=20prueba=20para=20comprobar=20la=20soluci=C3=B3n?= =?UTF-8?q?=20(UT)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/fb2p_test.vct | Bin 12749 -> 10223 bytes TESTS/DATOS_READONLY/fb2p_test.vcx | Bin 3976 -> 2885 bytes TESTS/ut__foxbin2prg.prg | 188 ++++++++++++++++++++++++----- foxbin2prg.prg | 99 +++++++++------ 4 files changed, 217 insertions(+), 70 deletions(-) diff --git a/TESTS/DATOS_READONLY/fb2p_test.vct b/TESTS/DATOS_READONLY/fb2p_test.vct index b6b2a6063f2967c09c34bae81b26e15990252950..be2b80b47aa4750dfc154d94b3a811258d6ddf72 100644 GIT binary patch delta 1455 zcmb_cO=}ZD7@kd2X`|78*v~-w(h}OFv9wqe3JPtq)|RH*Hi?P~ak`m?wfm87l7gZH zFM5O>gf~ct1&M<=R0l3!cc$) z2D|8&-Z}d4Oji;6UJEV4{l#S|EJhN`B5;VJe|SSEX1bmW$;-jKp43RrNEyi#Ny;kD z5?I70h8)S}2sRI~Vu*D4w7*q_ER9Q`~8m8v;aKbEJSbJq~@u#OeHd}jQ zu4jDeXK|JVzhW$0EF?auUOyX914=_~=46uzT8cq{^a`Nyu1744~5aFoKMx%7w4|J_} zf-=cZ9Ixt-l(iHUdPleygTKFItQa#_*pVm51PHn|Tf2SV&e!yLX>SFg9X2+zFFw!* z{q2QEf*VDxK2+*PL6}a=FuL;)eHWJ^5=5mdvk__1x`j&D*{Xes%s0?Jb4!6_A;Zly zNyao%d08|PK-;|Ra9E46<{ll|5(ov zQ(;i7GuHDY#Y?RcljyR7d3~LO7%Sv9YcZYxy4^&oqGc2uvTmSKq6T~CAf>F5&MTzA zD(t5vO>;_6p;1ZVIpO)Kn8sB*^PM;g$+%^dTM+$tSa(ay(y=dZ^E(l#;wM;ZaO~F-QLSA ze9Wx0UF8kR{q896H&5z1?}zhx;^MV9@6n^3<}3f^a^Yy3xug#G|8v-Zblfe-)sCw> zR~Lg7{xf$S+`o1Rzefx+-B0|Nu&M!`>v6BRf&Gc)CiZk{N&mT@wtIREBINjb*J>lH&MmrLM0dY$h!}`Hhs<Kx32iPAuVQ2Y2~B<{VZs(0N;32F(u?v-3k=bW-`pj)g%Rv7kPe``CQFD*aKJ3ztSx#E zXpfX2*gT*wq_}{_W#%TPr{KPtv*z{|rfxREuTRdk{h0~pi-X?3o!P5bIr_6%Y`BO1cBwevomXLCXn~4>MBIVw5F|cG%u;D` Q9gjJe8dUhNBG5}#0EP2GKL7v# delta 806 zcmZvZO=uHA6vtmGn{3va&}vtbHiX(Fo3ymu-H5wu3z9}#Pe~7@iXhlv6%h(WL@0u2 ziywG=_6vj}*png@ysDt+sfc*do;+Ae4<35;BL1f{8xS1$WnX4~v+rX+nh&#@eW*3s zxuIRvItDvwf2A@+RTVSe)v}Qb{7hTU)vBWtj#G9$8_Ub5rM-futKw>!BL~cmB>r}( zEh!O2cq-<%?4=-#@O9%L@5WlY#GA_Qt;15cHx%@83xPe%#O+3AhvV zu7I1}s)u&-SPxMEYM=q;z@wi1V=+8g+@(CxEVvICtb^BiA&G>|W~DrU>Q8|QFa>Ua zdj-ftyk!&(Ull%PVfZI8jU@ky>2eDGv?Keu4QW!v>*_+XNc5x>_KQk!KC7H?_kqI| zEtC8AE6(&0Er3<<5_|w(`c diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 34ab5b3..c27a768 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -71,39 +71,41 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" *-- TEST - TRY - lcTipoBinario = UPPER( JUSTEXT( tc_OutputFile ) ) + IF ISNULL(toEx) && Respetar errores previos + TRY + lcTipoBinario = UPPER( JUSTEXT( tc_OutputFile ) ) - IF FILE(tc_OutputFile) - SELECT 0 - USE (tc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN - ELSE - ERROR 'No se encontró el archivo "' + tc_OutputFile + '"' - ENDIF - - IF EMPTY(tcParent) AND EMPTY(tcClass) AND EMPTY(tcObjName) - DO CASE - CASE lcTipoBinario = 'SCX' - LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Screen " - CASE lcTipoBinario = 'VCX' - LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Class " - ENDCASE - IF NOT FOUND() - ERROR 'No se encontró el registro de cabecera "' + UniqueID + '"' + IF FILE(tc_OutputFile) + SELECT 0 + USE (tc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + tc_OutputFile + '"' ENDIF - ELSE - LOCATE FOR CLASS==tcClass AND PARENT==tcParent AND objName==tcObjName - IF NOT FOUND() - ERROR 'No se encontró el registro para CLASS=="' + tcClass + '" AND PARENT=="' + tcParent + '" AND objName=="' + tcObjName + '"' + + IF EMPTY(tcParent) AND EMPTY(tcClass) AND EMPTY(tcObjName) + DO CASE + CASE lcTipoBinario = 'SCX' + LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Screen " + CASE lcTipoBinario = 'VCX' + LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Class " + ENDCASE + IF NOT FOUND() + ERROR 'No se encontró el registro de cabecera "' + UniqueID + '"' + ENDIF + ELSE + LOCATE FOR CLASS==tcClass AND PARENT==tcParent AND objName==tcObjName + IF NOT FOUND() + ERROR 'No se encontró el registro para CLASS=="' + tcClass + '" AND PARENT=="' + tcParent + '" AND objName=="' + tcObjName + '"' + ENDIF ENDIF - ENDIF - SCATTER MEMO NAME toReg + SCATTER MEMO NAME toReg - CATCH TO toEx - FINALLY - USE IN (SELECT("TABLABIN")) - ENDTRY + CATCH TO toEx + FINALLY + USE IN (SELECT("TABLABIN")) + ENDTRY + ENDIF IF ISNULL(toEx) @@ -225,8 +227,18 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDFOR *-- METHODS + lcMensaje = "Tamaño de METHODS para " + lcExtraData + * COMPROBAR "BUG DEL MÉTODO MOVIDO" + IF LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) <> LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ) + IF "BUG DEL MÉTODO MOVIDO" $ toReg.METHODS AND NOT "BUG DEL MÉTODO MOVIDO" $ toReg_Esperado.METHODS + lcMensaje = lcMensaje + ' >>> ATENCIÓN!! - COMPROBAR "BUG DEL MÉTODO MOVIDO"' + ENDIF + ENDIF + *-- Fin comprobación + THIS.assertequals( LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) ; - , LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ), "Tamaño de METHODS para " + lcExtraData ) + , LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ), lcMensaje ) + THIS.assertequals( lnMethods_Count_Esperado, lnMethods_Count, "Cantidad de METHODS para " + lcExtraData ) FOR I = 1 TO lnMethods_Count_Esperado THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; @@ -320,13 +332,125 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *loCnv.l_Debug = .F. loCnv.l_ShowErrors = .F. *loCnv.l_Test = .T. - loCnv.l_PropSort_Enabled = .F. && Para buscar diferencias - loCnv.l_MethodSort_Enabled = .F. && Para buscar diferencias + *loCnv.l_PropSort_Enabled = .F. && Para buscar diferencias + *loCnv.l_MethodSort_Enabled = .F. && Para buscar diferencias *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_test.vcx' && 'THCALC.VCX' && + lc_File = 'fb2p_test.vcx' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + SELECT 0 + USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN + + SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) + *-- DATOS ESPERADOS + STORE 0 TO lnCodError_Esperado + SCATTER MEMO NAME loReg_Esperado + lcClass = loReg_Esperado.CLASS + lcParent = loReg_Esperado.PARENT + lcObjName = loReg_Esperado.objName + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + ENDSCAN + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIBOBIN_IN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarEl_BUG_DelMetodoMovidoEntreClases + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + *loCnv.l_PropSort_Enabled = .F. && Para buscar diferencias + *loCnv.l_MethodSort_Enabled = .F. && Para buscar diferencias + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'fb2p_test_bug_metodo_movido.vcx' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + SELECT 0 + USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN + + SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) + *-- DATOS ESPERADOS + STORE 0 TO lnCodError_Esperado + SCATTER MEMO NAME loReg_Esperado + lcClass = loReg_Esperado.CLASS + lcParent = loReg_Esperado.PARENT + lcObjName = loReg_Esperado.objName + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + ENDSCAN + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIBOBIN_IN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarEl_BUG_Del_PROCEDURE_SIN_ENDPROC + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + *loCnv.l_PropSort_Enabled = .F. && Para buscar diferencias + *loCnv.l_MethodSort_Enabled = .F. && Para buscar diferencias + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'fb2p_test_bug_estructural.vcx' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 41538f9..aa2a471 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -46,7 +46,8 @@ * 01/12/2013 FDBOZZO v1.6 Refactorización completa generación BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit * 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin parámetros, verificación y logueo de archivos READONLY con debug activa * 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad -* 03/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior +* 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior +* 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -55,6 +56,7 @@ * 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la última (arreglado en v.1.7) * 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementación defectuosa del arreglo anterior (arreglado en v.1.8) * 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementación defectuosa de una mejora anterior (arreglado en v.1.9) +* 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay métodos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden * *--------------------------------------------------------------------------------------------------- * TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES: @@ -350,7 +352,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias lFileMode = .F. nClassTimeStamp = '' - n_FB2PRG_Version = 1.9 + n_FB2PRG_Version = 1.10 o_Conversor = NULL c_VC2 = 'VC2' c_SC2 = 'SC2' @@ -2428,11 +2430,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base #ENDIF TRY - LOCAL loProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' + LOCAL llEsProcedureDeClase, loProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' IF '.' $ tcProcedureAbierto AND VARTYPE(toObjeto) = 'O' AND toObjeto._Procedure_Count > 0 loProcedure = toObjeto._Procedures(toObjeto._Procedure_Count) ELSE + llEsProcedureDeClase = .T. loProcedure = toClase._Procedures(toClase._Procedure_Count) ENDIF @@ -2443,10 +2446,22 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF NOT .lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ; AND NOT .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario ) - IF LEFT( tcLine, 8 ) + ' ' == C_ENDPROC + ' ' && Fin del PROCEDURE - *tcProcedureAbierto = '' + DO CASE + CASE LEFT( tcLine, 8 ) + ' ' == C_ENDPROC + ' ' && Fin del PROCEDURE + tcProcedureAbierto = '' EXIT - ENDIF + + CASE LEFT( tcLine + ' ', 10 ) == C_ENDDEFINE + ' ' && Fin de bloque (ENDDEFINE) encontrado + IF llEsProcedureDeClase + ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + + toClase._Nombre + ' (' + loProcedure._Nombre + ')' ; + + ', línea ' + TRANSFORM(I) + ' del archivo ' + THIS.c_InputFile + ELSE + ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + + toClase._Nombre + ' (' + toObjeto._Nombre + '.' + loProcedure._Nombre + ')' ; + + ', línea ' + TRANSFORM(I) + ' del archivo ' + THIS.c_InputFile + ENDIF + ENDCASE ENDIF *-- Quito 2 TABS de la izquierda (si se puede y si el integrador/desarrollador no la lió quitándolos) @@ -2650,14 +2665,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINE_CLASS - LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; + LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; , taBloquesExclusion, tnBloquesExclusion, tc_Comentario EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taBloquesExclusion #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' - LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF @@ -2668,7 +2682,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base llBloqueEncontrado = .T. LOCAL Z, lcProp, lcValue, loEx AS EXCEPTION ; , llMETADATA_Completed, llPROTECTED_Completed, llHIDDEN_Completed, llDEFINED_PAM_Completed ; - , llINCLUDE_Completed, llCLASS_PROPERTY_Completed + , llINCLUDE_Completed, llCLASS_PROPERTY_Completed ; + , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') @@ -2699,11 +2714,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base tc_Comentario = '' .set_Line( @tcLine, @taCodeLines, I ) - - .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario ) - DO CASE - CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ; + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine, @tc_Comentario ) + LOOP + + CASE .analizarBloque_PROCEDURE( @toModulo, @toClase, @loObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines ; , @tcProcedureAbierto, @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion ) *-- OJO: Esta se analiza primero a propósito, solo porque no puede estar detrás de PROTECTED y HIDDEN llCLASS_PROPERTY_Completed = .T. @@ -2722,7 +2737,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base llHIDDEN_Completed = .T. - CASE NOT llINCLUDE_Completed AND .c_Type <> "SCX" AND .analizarBloque_INCLUDE( @toModulo, @toClase, @toObjeto, @tcLine, @taCodeLines ; + CASE NOT llINCLUDE_Completed AND .c_Type <> "SCX" AND .analizarBloque_INCLUDE( @toModulo, @toClase, @tcLine, @taCodeLines ; , @I, @tnCodeLines, @tcProcedureAbierto ) llINCLUDE_Completed = .T. @@ -2848,7 +2863,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE analizarBloque_INCLUDE - LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto + LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto LOCAL llBloqueEncontrado #IF .F. @@ -2906,13 +2921,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE analizarBloque_OLE_DEF - LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto LOCAL llBloqueEncontrado #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' - LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' - LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF IF LEFT( tcLine + ' ', C_LEN_OLE_I + 1 ) == C_OLE_I + ' ' @@ -2992,7 +3005,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF llBloqueEncontrado *-- Evalúo todo el contenido del PROCEDURE - THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, tcProcedureAbierto ; + THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, @tcProcedureAbierto ; , @tc_Comentario, @taBloquesExclusion, @tnBloquesExclusion ) ENDIF @@ -3063,6 +3076,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF lnObjProc = 0 *-- Procedimiento de clase toClase.add_Procedure( loProcedure ) + toObjeto = NULL ELSE *-- Procedimiento de objeto toObjeto = toClase._AddObjects( lnObjProc ) @@ -3113,7 +3127,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL I, loEx AS EXCEPTION ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ; - , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' STORE '' TO lcProcedureAbierto @@ -3136,21 +3149,19 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base CASE THIS.lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ; OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios - *.analizarLineasDeProcedure( @loClase, @loObjeto, @lcLine, @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto ) - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @loClase, @loObjeto, @lcLine, @taCodeLines ; + CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ; , @I, tnCodeLines, @lcProcedureAbierto ) *-- Puede haber varios - CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @loObjeto, @lcLine ; + CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ; , @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto ) * Específico para SCX que lo tiene al inicio llINCLUDE_SCX_Completed = .T. - CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @loObjeto, @lcLine, @taCodeLines, @I, tnCodeLines ; + CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; , @lcProcedureAbierto, @taBloquesExclusion, @tnBloquesExclusion, @lc_Comentario ) *-- Puede haber varias @@ -3168,8 +3179,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW FINALLY - STORE NULL TO loObjeto, loClase - RELEASE loObjeto, loClase + STORE NULL TO loClase + RELEASE loClase ENDTRY RETURN @@ -4812,11 +4823,16 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF *-- Genero el método SIN indentar, ya que se hace luego - TEXT TO tcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<'PROCEDURE'>> <> - <> - <<'ENDPROC'>> - ENDTEXT + *TEXT TO tcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<'PROCEDURE'>> <> + * <> + * <<'ENDPROC'>> + *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso + tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + tcMethodName + tcMethods = tcMethods + CR_LF + THIS.IndentarMemo( taCode(taMethods(I,2)) ) + tcMethods = tcMethods + CR_LF + 'ENDPROC' + tcMethods = tcMethods + CR_LF ENDFOR ENDIF @@ -5369,12 +5385,17 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = 1 TO lnMethodCount *-- Genero los métodos indentados - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <><>PROCEDURE <> - <> - <>ENDPROC + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <><>PROCEDURE <> + * <> + * <>ENDPROC - ENDTEXT + *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + C_TAB + laMethods(I,3) + 'PROCEDURE ' + laMethods(I,1) + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + THIS.IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + C_TAB + 'ENDPROC' + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF ENDFOR ENDIF @@ -5432,8 +5453,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * <>ENDPROC *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso lcMethods = lcMethods + CR_LF + THIS.IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) - lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' + CR_LF + lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' + lcMethods = lcMethods + CR_LF ENDFOR *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2