next up previous contents index
Next: BEFORE_BODY e AFTER_BODY Up: Gerador de Envelopes Previous: Interface das Classes

Métodos Automáticos

 

O programador referido nesta secção é o dos módulos funcionais e não o do nível de programa, que será sempre referido de forma explícita.

O código dos métodos gerados a partir da interface da classe da carta é criado de acordo com o que foi dito no capítulo 4. Cada corpo é gerado a partir da macro SPM_quotLETENV_METHOD", caso o tipo de retorno seja void, ou SPM_quotR_LETENV_METHOD", caso contrário. Estas macros vão incluir outras macros, correspondentes às directivas vistas no capítulo 4, cujas redefinições permitem alterar a expansão que se obtém a partir das respectivas versões pré-definidas. Note-se que o gerador de envelopes não utiliza as macros directamente, apenas se limitando a preparar o código gerado para que delas possam fazer uso.

 

#define LETENV_METHOD(type,method,args...)   \
{                                            \
    BEFORE_BODY(type,method,args)            \
    REPLACE_BODY(type,method,args)           \
    AFTER_BODY(type,method,args)             \
}

#define R_LETENV_METHOD(type,method,args...) \
{                                            \
    SomeType ___method_result___;            \
    BEFORE_BODY(type,method,args)            \
    R_REPLACE_BODY(type,method,args)         \
    AFTER_BODY(type,method,args)             \
    return ___method_result___;              \
}

As definições de algumas destas macros envolvem número variável de argumentos: NOME(type,method,args...). O pré-processador deve ser escolhido de modo a suportá-las, e.g. pré-processador do compilador GNU C.





David M. M. de Matos
Thu Jun 29 14:58:09 MET DST 1995