next up previous contents index
Next: MULT_DECL e MULT_IMPL Up: Métodos Automáticos Previous: BEFORE_BODY e AFTER_BODY

REPLACE_BODY

A definição inicial de SPM_quotREPLACE_BODY", que corresponde ao corpo inicial de cada método do envelope, contém apenas uma invocação à carta. Na realidade, e porque os dois casos são distintos, existem duas versões desta macro. Uma que é utilizada em métodos com retorno e outra em métodos que não retornam valores. O código de retorno do valor é exterior à macro (ver definição de SPM_quotR_LETENV_METHOD", na página gif).

    #define REPLACE_BODY(type,method,args...) \
        SPELLCAST(type##Letter,letter)::method(args);

    #define R_REPLACE_BODY(type,method,args...) \
        ___method_result___ = SPELLCAST(type##Letter,letter)::method(args);

Ambas as macros podem ser modificadas pela intervenção do programador, sendo este responsável pela coerência dos tipos e valores de retorno que introduza no código dos envelopes.

A redefinição das macros implica a perda dos corpos iniciais, ficando indeterminado o comportamento do envelope, i.e., fica, por completo, sob o controlo do código do programador que fez a alteração. A alteração de SPM_quotR_REPLACE_BODY" assume implicitamente uma atribuição a SPM_quot___method_result___" (a variável retorna no fim da execução do método). Se a atribuição não for feita o código que invocou o método pode comportar-se erroneamente.

Note-se que a indeterminação do comportamento do código do envelope pode conduzir a um comportamento imprevisível para o programa como um todo, pois é o envelope o encarregado de invocar o código do nível de programa.



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