The main limitation at present is that the foreign function call is not completely general. Both arguments and results are limited to being values of size at most 4 bytes. Such values can be:
The final case allows general strings to be handled and general data to be used. In practice, this is only a limitation when a general struct value or a double needs to be passed or returned directly.