Ya sabemos que Pascal es un lenguaje de programación “fuertemente tipado”. Pero existe una técnica que nos permite superar el estricto control de los tipos de datos que tiene pascal, que se conoce como solapamiento de tipos de datos o moldeo de tipos de datos.

El solapamiento consiste en colocar la representación binaria del valor de una variable de un tipo de dato determinado, en otra variable perteneciente a otro tipo de dato diferente.

Es decir podemos asignar una variable de tipo char a una variable de tipo byte o integer haciendo uso del siguiente solapamiento:

i:=integer(c);

En donde i es una variable de tipo de dato integer y c es una variable de tipo de dato char. A continuación el ejemplo:

El solapamiento o moldeo se puede aplicar a cualquier tipo de dato simple. Pero se debe tener conocimientos muy profundos sobre la representación interna en dígitos binarios de los tipos de datos que se van a moldear, para poder entender los resultados que se obtienen. Por ejemplo el siguiente programa usa el moldeo para convertir un número entero en un tipo de dato enumerado:

También se tiene que tener en cuenta que cuando se moldea un tipo de dato que tiene un tamaño mayor en bytes con otro tipo de dato de menor tamaño, este se trunca para asignar a la variable los bytes que puede almacenar. Ejemplo:

El solapamiento o moldeo con variables de tipo widechar a char tiene un comportamiento particular por el administrador de caracteres, que se explica con el siguiente ejemplo:

La primera parte del programa anterior, lo que hace es intentar solapar o moldear la variable b que es de tipo widechar a una variable a de tipo char, al ser widechar de 2 bytes debería asignar el segundo byte, pero para el administrador de caracteres hacer este solapamiento es como si estuviéramos asignando una variable de tipo widechar a una variable de tipo char, y es por eso que se coloca el signo de interrogación. En la segunda parte del programa lo que se hace es primero solapar o moldear el tipo de dato widechar a un tipo de dato byte, para finalmente moldearlo con el tipo de dato char, y de esta manera asignar a la variable de tipo char el segundo byte de #$F1. En Linux si no se usa el administrador de caracteres entonces se asignará el segundo byte siempre y cuando este sea menor a $00FF.