Guia de rastreamento dinâmico Solaris

Operador Translate

O operador xlate de D é usado para realizar uma tradução de uma expressão de entrada para uma das estruturas de saída de tradução definidas. O operador xlate é usado em uma expressão no formato:

xlate < output-type > ( input-expression )

Por exemplo, para chamar o tradutor hipotético das structs FILE definidas acima e acessar o membro file_fd, você escreveria a expressão:

xlate <struct file_info *>(f)->file_fd;

onde f é uma variável de D do tipo FILE *. À própria expressão xlate é atribuído o tipo definido pelo tipo de saída. Ao ser definido, um tradutor pode ser usado para traduzir expressões de entrada para o tipo de struct da saída do tradutor, ou para um ponteiro para essa struct.

Se você traduzir uma expressão de entrada para uma struct, poderá cancelar a referência de um membro específico da saída imediatamente usando operador “. ”, ou pode atribuir a struct traduzida inteira para outra variável de D a fim de fazer uma cópia dos valores de todos os membros. Se você cancelar a referência de um único membro, o compilador de D irá gerar somente o código correspondente à expressão desse membro. Você não pode aplicar o operador & a uma struct traduzida para obter seu endereço, já que o próprio objeto de dados não existe até que seja copiado ou que um dos seus membros seja referenciado.

Se você traduzir uma expressão de entrada em um ponteiro para uma struct, poderá cancelar a referência de um membro específico da saída imediatamente usando operador ->, ou poderá cancelar a referência do ponteiro usando o operador unário *, nesse caso, o resultado se comportará como se você traduzisse a expressão em uma struct. Se você cancelar a referência de um único membro, o compilador de D irá gerar somente o código correspondente à expressão desse membro. Você não pode atribuir um ponteiro traduzido para outra variável de D, já que o próprio objeto de dados não existe até que seja copiado ou um dos seus membros seja referenciado e, portanto, não pode ser endereçado.

Uma declaração do tradutor não pode omitir expressões de um ou mais membros do tipo de saída. Se uma expressão xlate for usada para acessar um membro para o qual não haja expressão de tradução definida, o compilador de D produzirá uma mensagem de erro apropriada e anulará a compilação do programa. Se o tipo de saída inteiro for copiado através de uma atribuição de estrutura, quaisquer membros para os quais não há expressões de tradução definidas serão preenchidos com zeros.

Para localizar um tradutor correspondente em uma operação xlate, o compilador de D examina o conjunto de tradutores disponíveis na seguinte ordem:

Se nenhum tradutor correspondente for encontrado de acordo com essas regras, o compilador de D produzirá uma mensagem de erro apropriada e a compilação do programa falhará.