343 lines
14 KiB
Plaintext
343 lines
14 KiB
Plaintext
/*
|
||
* $Id$
|
||
*/
|
||
|
||
/*
|
||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||
* www - http://www.harbour-project.org
|
||
*
|
||
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
|
||
* Documentaci¢n en Espa¤ol de: Opciones del Compilador
|
||
*
|
||
* Vea doc/license.txt por los t‚rminos de la licencia.
|
||
*
|
||
*/
|
||
|
||
/* $DOC$
|
||
* $FUNCNAME$
|
||
* Opciones Compilador
|
||
* $CATEGORY$
|
||
* Documento
|
||
* $ONELINER$
|
||
* Opciones del Compilador
|
||
* $DESCRIPTION$
|
||
*
|
||
* <b>Invocando al compilador Harbour: </b>
|
||
* ===============================
|
||
*
|
||
* harbour <archivo[.prg]> [opciones]
|
||
* o
|
||
* harbour [opciones] <archivo[.prg]>
|
||
* o
|
||
* harbour [opciones] <archivo[.prg]> [opciones]
|
||
*
|
||
*
|
||
* Las opciones de la l¡nea de comandos debe ser separada, al menos por
|
||
* un espacio en blanco.
|
||
* Las opciones pueden comenzar con el car cter '/' ¢ '-',
|
||
*
|
||
*
|
||
* <b>Opciones de la l¡nea de comandos de: </b>
|
||
* ====================================
|
||
*
|
||
* /a Declaraci¢n Autom tica de memvar
|
||
* ----------------
|
||
* Esto causa que todas las variables declaradas por las sentencias
|
||
* PARAMETER, PRIVATE ¢ PUBLIC sean autom ticamente declaradas como
|
||
* variables MEMVAR.
|
||
*
|
||
* /b Informaci¢n de depuraci¢n (Bug)
|
||
* ----------------
|
||
* El compilador genera toda la informaci¢n requerida para
|
||
* depuraci¢n
|
||
*
|
||
* /d<id>[=<val>] #define <id>
|
||
* ----------------
|
||
*
|
||
* /es[<nivel>] Establece la Severidad de la salida (Exit Severity)
|
||
* ----------------
|
||
*
|
||
* /es or /es0 - Todas las advertencias son ignoradas y el c¢digo
|
||
* de salida retornado por el compilador (accedido por
|
||
* el comando de DOS ERRORLEVEL) es igual a cero si
|
||
* no hay errores en el archivo fuente compilado.
|
||
* /es1 - Cualquier advertencia genera un c¢digo de salida
|
||
* distinto de cero, pero la salida es aún creada.
|
||
* /es2 - Cualquier advertencia es tratada como error y
|
||
* ningún archivo de salida es creado. El c¢digo de
|
||
* salida es establecido a un valor distinto de cero.
|
||
*
|
||
* /g<tipo> Generaci¢n del tipo de archivo de salida <type>
|
||
* ----------------
|
||
*
|
||
* /gc tipo de salida: fuente de lenguaje C (.c) (defecto)
|
||
* /gf tipo de salida: Windows/DOS OBJ32 (.obj)
|
||
* /gh tipo de salida: Objeto Portable de Harbour (.hrb)
|
||
* /gj tipo de salida: fuente de Java (.java)
|
||
* /gp tipo de salida: fuente de Pascal (.pas)
|
||
* /gr tipo de salida: recursos de Windows (.rc)
|
||
*
|
||
* /i<ruta> Agrega la ruta de búsqueda de archivos #Include
|
||
* ----------------
|
||
*
|
||
* /l Suprime la informaci¢n del número de L¡nea
|
||
* ----------------
|
||
* El compilador no genera el número de l¡nea del c¢digo fuente
|
||
* en el archivo de salida. La funci¢n PROCLINE() retornar cero
|
||
* para los m¢dulos compilados usando esta opci¢n.
|
||
*
|
||
* /m Compilar el M¢dulo actual solamente
|
||
* ----------------
|
||
*
|
||
* /n Sin procedimiento de inicio impl¡cito
|
||
* ----------------
|
||
* El compilador no crea un procedimiento con el mismo nombre
|
||
* que el del archivo compilado. Esto significa que algunas
|
||
* declaraciones puestas antes de la primera sentencia de
|
||
* PROCEDURE ¢ FUNCTION tienen el alcance del archivo y pueden ser
|
||
* accedidas/usadas en todas las funciones/procedimientos definidos
|
||
* en el archivo fuente compilado. Todas las sentencias ejecutables
|
||
* puestas al principio del archivo y antes de la primera sentencia
|
||
* de PROCEDURE ¢ FUNCTION son ignoradas.
|
||
*
|
||
* /o<ruta> Unidad de disco y/o ruta para el archivo de salida
|
||
* ----------------
|
||
*
|
||
* /p Genera un archivo de salida Pre-procesada (.ppo)
|
||
* ----------------
|
||
* El compilador solamente crea el archivo que contiene el
|
||
* resultado del archivo fuente pre-procesado.
|
||
*
|
||
* /q Quieto
|
||
* ----------------
|
||
* El compilador no imprime ningún mensaje durante la compilaci¢n
|
||
* (excepto la informaci¢n del copyright).
|
||
*
|
||
* /q0 que permanezca realmente Quieto y no muestre ni
|
||
* siquiera la informaci¢n del copyright.
|
||
*
|
||
* /r[<libreria>] Solicita al linker Revisar por la <libreria> (¢
|
||
* ---------------- ninguna)
|
||
* Actualmente no soportado en Harbour.
|
||
*
|
||
* /s Solo chequeo de Sintaxis.
|
||
* ----------------
|
||
* El compilador chequea la sintaxis solamente. Ningún archivo de
|
||
* salida es generado.
|
||
*
|
||
* /t<ruta> Ruta para la creaci¢n de un archivo Temporario
|
||
* ----------------
|
||
* Actualmente no usado en harbour (El compilador de harbour no
|
||
* crea ningún archivo temporal)
|
||
*
|
||
* /u[<archivo>] Usar la definici¢n de comando establecido en el
|
||
* <archivo> (¢ ninguno)
|
||
* ----------------
|
||
* Aún no soportado.
|
||
*
|
||
* /v Las Variables son asumidas como M->
|
||
* ----------------
|
||
* Todas las variables sin declarar ¢ unaliased son asumidas como
|
||
* variables MEMVAR (variables privadas ¢ públicas). si este switch
|
||
* no es usado entones el alcance de estas variables es chequeado
|
||
* en tiempo de ejecuci¢n.
|
||
*
|
||
* /w[<nivel>] Establece el número de nivel de las advertencias
|
||
* ---------------- (Warnings) (0..4, por defecto es 1)
|
||
*
|
||
* /w0 - sin advertencias
|
||
* /w or /w1 - advertencias compatibles con Clipper
|
||
* /w2 - algunas advertencias útiles ausentes en Clipper
|
||
* /w3 - advertencias generadas para extensiones al lenguaje
|
||
* hechas en Harbour. Tambi‚n habilita el chequeo de
|
||
* sintaxis fuertemente tipeada pero s¢lo advierte
|
||
* contra los tipos declarados, o los tipos que pueden
|
||
* ser calculados en tiempo de compilaci¢n.
|
||
* /w4 - habilita advertencias acerca de operaciones que son
|
||
* sospechosas, lo cual significa que si se mezclan
|
||
* tipos sin declarar ¢ tipos que no pueden ser
|
||
* calculados en tiempo de compilaci¢n, junto con los
|
||
* tipos ya declarados, una advertencia ser generada.
|
||
*
|
||
* /x[<prefijo>] Establece el s¡mbolo del prefijo agregado al nombre
|
||
* de funci¢n (para archivo.c solamente)
|
||
* ----------------
|
||
* Establece el s¡mbolo del prefijo agregado al nombre de funci¢n
|
||
* de inicio (en la salida de lenguaje C, actualmente).
|
||
* Esta funci¢n es generada autom ticamente para cada m¢dulo de PRG
|
||
* compilado.
|
||
* Este prefijo adicional puede ser usado para suprimir problemas
|
||
* con s¡mbolos duplicados durante el enlazado de una aplicaci¢n
|
||
* (linking) con alguna librer¡a de terceros.
|
||
*
|
||
* /y Seguimiento de la actividad de Lex & Yacc
|
||
* ----------------
|
||
* El compilador Harbour usa las utilidades FLEX y YACC para
|
||
* analizar el c¢digo fuente y generar el archivo de salida
|
||
* requerido.
|
||
* Esta opci¢n sigue la actividad de esas utilidades.
|
||
*
|
||
* /z Suprime el cortocircuito l¢gico (.AND. y .OR.)
|
||
* ----------------
|
||
*
|
||
* /10 restringe la longitud de s¡mbolos a 10 caracteres.
|
||
* ----------------
|
||
* Todos los nombres de variables y de funciones son truncados a
|
||
* un m ximo de 10 caracteres.
|
||
*
|
||
*
|
||
* <b>Compilaci¢n en modo lote (batch). </b>
|
||
* ================================
|
||
*
|
||
* @<archivo> Compila la lista de m¢dulos en el <archivo>
|
||
* -----------------
|
||
* No soportado aún.
|
||
*
|
||
*
|
||
*
|
||
* Conocidas incompatibilidades entre compiladores harbour y clipper
|
||
* =================================================================
|
||
*
|
||
* NOTA:
|
||
* Si desea librer¡as de compilaci¢n y ejecuci¢n 100 % compatibles,
|
||
* entonces Ud. debe definir: HARBOUR_STRICT_CLIPPER_COMPATIBILITY.
|
||
* Esta opci¢n debe ser definida en el archvivo ../include/hbsetup.h
|
||
* (en efecto esta opci¢n es puesta en un comentario por defecto - Ud.
|
||
* necesita remover los caracteres /* */ solamente. Este cambio debe
|
||
* ser realizado antes de invocar la utilidad make.
|
||
*
|
||
*
|
||
* Manejo de variables sin declarar
|
||
* --------------------------------
|
||
* Cuando un valor es asignado a una variable no declarada y la opci¢n
|
||
* -v de la l¡nea de comandos no es usada, entonces el compilador
|
||
* Clipper asume que la variable es una variable PRIVATE ¢ PUBLIC y
|
||
* genera un opcode POPM (pop memvar).
|
||
*
|
||
* Cuando el valor de una variable no declarada es accedido y la opci¢n
|
||
* -v de la l¡nea de comandos no es usada, el compilador Harbour genera
|
||
* un opcode PUSHV (push variable) para determinar el tipo de variable
|
||
* en tiempo de ejecuci¢n
|
||
|
||
* Si un campo con el nombre requerido existe en el area de trabajo
|
||
* actual, entonces este valor es usado. Si no existe el campo, entonces
|
||
* una variable PRIVATE ¢ PUBLIC es usada (si existe).
|
||
*
|
||
* El compilador Harbour genera un opcode para determinar el tipo de
|
||
* variable en tiempo de ejecuci¢n (POPVARIABLE or PUSHVARIABLE) en
|
||
* ambos casos (asignaci¢n y acceso).
|
||
*
|
||
* La diferencia puede ser chequeada por el siguiente c¢digo:
|
||
* <fixed>
|
||
* PROCEDURE MAIN()
|
||
* PRIVATE myname
|
||
*
|
||
* DBCREATE( "TEST", { { "MYNAME", "C", 10, 0} } )
|
||
* USE test NEW
|
||
* SELECT test
|
||
* APPEND BLANK
|
||
*
|
||
* FIELD->myname := "FIELD"
|
||
* MEMVAR->myname := "MEMVAR"
|
||
*
|
||
* myname := myname + " assigned"
|
||
*
|
||
* // In Clipper: "FIELD", In Harbour: "FIELD assigned"
|
||
* ? FIELD->myname
|
||
*
|
||
* // In Clipper: "MEMVAR assigned", In Harbour: "MEMVAR"
|
||
* ? MEMVAR->myname
|
||
*
|
||
* USE
|
||
*
|
||
* RETURN
|
||
* </fixed>
|
||
*
|
||
*
|
||
* Pasando por referencia una variable no declarada
|
||
* -------------------------------------------------
|
||
* El compilador Harbour usa un opcode especial PUSHP para pasar una
|
||
* referencia a una variable no declarada ( el operador '@' ). El tipo
|
||
* de la variable pasada es chequeada en tiempo de ejecuci¢n (field or
|
||
* memvar). Sin embargo las variables de campo no pueden ser pasadas
|
||
* por referencia. Esto significa que Clipper chequea s¢lo la variable
|
||
* memvar y no mira por una de campo.
|
||
* Esta es la raz¢n por la cual el compilador Harbour usa el opcode
|
||
* habitual PUSHMEMVARREF en estos casos. N¢tese que el comportamiento
|
||
* en tiempo de ejecuci¢n es el mismo en Clipper y en Harbour - s¢lo
|
||
* los opcodes generados son diferentes.
|
||
*
|
||
*
|
||
* Manejo de mensajes a objetos
|
||
* ----------------------------
|
||
*
|
||
* El seteo de HARBOUR_STRICT_CLIPPER_COMPATIBILITY determina
|
||
* la forma en que el env¡o encadenado de mensajes es manejado
|
||
*
|
||
* Por ejemplo, el siguiente c¢digo:
|
||
*
|
||
* a:b( COUNT() ):c += 1
|
||
*
|
||
* ser manejado como:
|
||
*
|
||
* a:b( COUNT() ):c := a:b( COUNT() ):c + 1
|
||
* en modo de compatibilidad estricta y
|
||
*
|
||
* temp := a:b( COUNT() ), temp:c += 1
|
||
* en modo no-estricto.
|
||
*
|
||
* En la pr ctica, Clipper llamar a la funci¢n COUNT() dos veces:
|
||
* La primera vez antes de la adici¢n y la segunda despu‚s de la
|
||
* adici¢n.
|
||
* En Harbour, COUNT() ser llamada s¢lo una vez, antes de la adici¢n.
|
||
*
|
||
* El m‚todo Harbour (no-estricto) es:
|
||
* 1) M s r pido
|
||
* 2) Garantiza que la misma variable de instancia del mismo
|
||
* objeto ser cambiada.
|
||
*
|
||
* (Ver tambi‚n: ../source/compiler/expropt.c)
|
||
*
|
||
*
|
||
* Inicializaci¢n de variables est ticas
|
||
* -------------------------------------
|
||
*
|
||
* Hay una diferencia en la inicializaci¢n de las variables est ticas
|
||
* que son inicializadas con un bloque de c¢digo que refiere a una
|
||
* variable local. Por ejemplo:
|
||
* <fixed>
|
||
* PROCEDURE TEST()
|
||
*
|
||
* LOCAL MyLocalVar
|
||
* STATIC MyStaticVar := {|| MyLocalVar }
|
||
*
|
||
* MyLocalVar :=0
|
||
* ? EVAL( MyStaticVar )
|
||
*
|
||
* RETURN
|
||
* </fixed>
|
||
* El c¢digo de arriba compila bien en Clipper, pero ‚ste genera un
|
||
* error de ejecuci¢n:
|
||
* Error/BASE 1132 Bound error: array access
|
||
* Called from (b)STATICS$(0)
|
||
*
|
||
* En Harbour este c¢digo genera un error en tiempo de compilaci¢n:
|
||
* Error E0009 Illegal variable (b) initializer: 'MyLocalVar'
|
||
*
|
||
* Ambos Clipper y Harbour estan manejando todas las variables locales
|
||
* usadas en una forma especial: ellas son separadas de la pila (stack)
|
||
* local de la funci¢n / procedimiento donde ellas son declaradas.
|
||
* Esto permite acceder a estas variables despues de la salida de una
|
||
* funci¢n / procedimiento. Sin embargo todas las variables est ticas
|
||
* son inicializadas en un procedimiento separado ('STATICS$' en
|
||
* Clipper y '(_INITSTATICS)' en Harbour) antes del procedimiento
|
||
* principal y antes de todos los procedimientos INIT. Las variables
|
||
* locales no existen en la pila de evaluaci¢n (eval stack) donde las
|
||
* variables est ticas son inicializadas, as¡ ellas no pueden ser
|
||
* separadas.
|
||
*
|
||
* $END$
|
||
*/
|
||
|
||
|