FFI repairs for 64-bit big-endian

Again; missed pieces for b3c721a346.
This commit is contained in:
Matthew Flatt 2012-07-17 06:06:55 -06:00
parent 0c9bd915bc
commit 12a4ee8d98
2 changed files with 54 additions and 54 deletions

View File

@ -1718,81 +1718,81 @@ static void* SCHEME2C(const char *who,
break; break;
case FOREIGN_int8: case FOREIGN_int8:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint8)<sizeof(int) && ret_loc) { if (sizeof(Tsint8)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint8)); delta += (sizeof(intptr_)-sizeof(Tsint8));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(get_byte_val(val,&(((Tsint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int8", val);; if (!(get_byte_val(val,&(((Tsint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int8", val);;
return NULL; return NULL;
case FOREIGN_uint8: case FOREIGN_uint8:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint8)<sizeof(int) && ret_loc) { if (sizeof(Tuint8)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint8)); delta += (sizeof(intptr_)-sizeof(Tuint8));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(get_ubyte_val(val,&(((Tuint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint8", val);; if (!(get_ubyte_val(val,&(((Tuint8*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint8", val);;
return NULL; return NULL;
case FOREIGN_int16: case FOREIGN_int16:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint16)<sizeof(int) && ret_loc) { if (sizeof(Tsint16)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint16)); delta += (sizeof(intptr_)-sizeof(Tsint16));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(get_short_val(val,&(((Tsint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int16", val);; if (!(get_short_val(val,&(((Tsint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int16", val);;
return NULL; return NULL;
case FOREIGN_uint16: case FOREIGN_uint16:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint16)<sizeof(int) && ret_loc) { if (sizeof(Tuint16)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint16)); delta += (sizeof(intptr_)-sizeof(Tuint16));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(get_ushort_val(val,&(((Tuint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint16", val);; if (!(get_ushort_val(val,&(((Tuint16*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint16", val);;
return NULL; return NULL;
case FOREIGN_int32: case FOREIGN_int32:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint32)<sizeof(int) && ret_loc) { if (sizeof(Tsint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint32)); delta += (sizeof(intptr_)-sizeof(Tsint32));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_realint_val(val,&(((Tsint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int32", val);; if (!(scheme_get_realint_val(val,&(((Tsint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int32", val);;
return NULL; return NULL;
case FOREIGN_uint32: case FOREIGN_uint32:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint32)<sizeof(int) && ret_loc) { if (sizeof(Tuint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint32)); delta += (sizeof(intptr_)-sizeof(Tuint32));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_unsigned_realint_val(val,&(((Tuint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint32", val);; if (!(scheme_get_unsigned_realint_val(val,&(((Tuint32*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint32", val);;
return NULL; return NULL;
case FOREIGN_int64: case FOREIGN_int64:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint64)<sizeof(int) && ret_loc) { if (sizeof(Tsint64)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint64)); delta += (sizeof(intptr_)-sizeof(Tsint64));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_long_long_val(val,&(((Tsint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int64", val);; if (!(scheme_get_long_long_val(val,&(((Tsint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_int64", val);;
return NULL; return NULL;
case FOREIGN_uint64: case FOREIGN_uint64:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint64)<sizeof(int) && ret_loc) { if (sizeof(Tuint64)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint64)); delta += (sizeof(intptr_)-sizeof(Tuint64));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(scheme_get_unsigned_long_long_val(val,&(((Tuint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint64", val);; if (!(scheme_get_unsigned_long_long_val(val,&(((Tuint64*)W_OFFSET(dst,delta))[0])))) wrong_value(who, "_uint64", val);;
return NULL; return NULL;
case FOREIGN_fixint: case FOREIGN_fixint:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tsint32)<sizeof(int) && ret_loc) { if (sizeof(Tsint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tsint32)); delta += (sizeof(intptr_)-sizeof(Tsint32));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) { if (SCHEME_INTP(val)) {
@ -1805,9 +1805,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_ufixint: case FOREIGN_ufixint:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Tuint32)<sizeof(int) && ret_loc) { if (sizeof(Tuint32)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Tuint32)); delta += (sizeof(intptr_)-sizeof(Tuint32));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) { if (SCHEME_INTP(val)) {
@ -1820,9 +1820,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_fixnum: case FOREIGN_fixnum:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(intptr_t)<sizeof(int) && ret_loc) { if (sizeof(intptr_t)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(intptr_t)); delta += (sizeof(intptr_)-sizeof(intptr_t));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) { if (SCHEME_INTP(val)) {
@ -1835,9 +1835,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_ufixnum: case FOREIGN_ufixnum:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(uintptr_t)<sizeof(int) && ret_loc) { if (sizeof(uintptr_t)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(uintptr_t)); delta += (sizeof(intptr_)-sizeof(uintptr_t));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_INTP(val)) { if (SCHEME_INTP(val)) {
@ -1850,9 +1850,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_float: case FOREIGN_float:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(float)<sizeof(int) && ret_loc) { if (sizeof(float)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(float)); delta += (sizeof(intptr_)-sizeof(float));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FLOATP(val)) { if (SCHEME_FLOATP(val)) {
@ -1865,9 +1865,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_double: case FOREIGN_double:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(double)<sizeof(int) && ret_loc) { if (sizeof(double)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(double)); delta += (sizeof(intptr_)-sizeof(double));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FLOATP(val)) { if (SCHEME_FLOATP(val)) {
@ -1880,9 +1880,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_doubleS: case FOREIGN_doubleS:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(double)<sizeof(int) && ret_loc) { if (sizeof(double)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(double)); delta += (sizeof(intptr_)-sizeof(double));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_REALP(val)) { if (SCHEME_REALP(val)) {
@ -1895,9 +1895,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_bool: case FOREIGN_bool:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(int)<sizeof(int) && ret_loc) { if (sizeof(int)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(int)); delta += (sizeof(intptr_)-sizeof(int));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (1) { if (1) {
@ -1910,9 +1910,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_string_ucs_4: case FOREIGN_string_ucs_4:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(mzchar*)<sizeof(int) && ret_loc) { if (sizeof(mzchar*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(mzchar*)); delta += (sizeof(intptr_)-sizeof(mzchar*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) { if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) {
@ -1931,9 +1931,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_string_utf_16: case FOREIGN_string_utf_16:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(unsigned short*)<sizeof(int) && ret_loc) { if (sizeof(unsigned short*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(unsigned short*)); delta += (sizeof(intptr_)-sizeof(unsigned short*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) { if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) {
@ -1952,9 +1952,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_bytes: case FOREIGN_bytes:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) { if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*)); delta += (sizeof(intptr_)-sizeof(char*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP(val)||SCHEME_BYTE_STRINGP(val)) { if (SCHEME_FALSEP(val)||SCHEME_BYTE_STRINGP(val)) {
@ -1973,9 +1973,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_path: case FOREIGN_path:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) { if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*)); delta += (sizeof(intptr_)-sizeof(char*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FALSEP(val)||SCHEME_PATH_STRINGP(val)) { if (SCHEME_FALSEP(val)||SCHEME_PATH_STRINGP(val)) {
@ -1994,9 +1994,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_symbol: case FOREIGN_symbol:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(char*)<sizeof(int) && ret_loc) { if (sizeof(char*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(char*)); delta += (sizeof(intptr_)-sizeof(char*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_SYMBOLP(val)) { if (SCHEME_SYMBOLP(val)) {
@ -2015,9 +2015,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_pointer: case FOREIGN_pointer:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) { if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*)); delta += (sizeof(intptr_)-sizeof(void*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FFIANYPTRP(val)) { if (SCHEME_FFIANYPTRP(val)) {
@ -2040,9 +2040,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_gcpointer: case FOREIGN_gcpointer:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) { if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*)); delta += (sizeof(intptr_)-sizeof(void*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (SCHEME_FFIANYPTRP(val)) { if (SCHEME_FFIANYPTRP(val)) {
@ -2065,9 +2065,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_scheme: case FOREIGN_scheme:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(Scheme_Object*)<sizeof(int) && ret_loc) { if (sizeof(Scheme_Object*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(Scheme_Object*)); delta += (sizeof(intptr_)-sizeof(Scheme_Object*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (1) { if (1) {
@ -2086,9 +2086,9 @@ static void* SCHEME2C(const char *who,
} }
case FOREIGN_fpointer: case FOREIGN_fpointer:
# ifdef SCHEME_BIG_ENDIAN # ifdef SCHEME_BIG_ENDIAN
if (sizeof(void*)<sizeof(int) && ret_loc) { if (sizeof(void*)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(void*)); delta += (sizeof(intptr_)-sizeof(void*));
} }
# endif /* SCHEME_BIG_ENDIAN */ # endif /* SCHEME_BIG_ENDIAN */
if (!(ret_loc)) wrong_value(who, "_fpointer", val);; if (!(ret_loc)) wrong_value(who, "_fpointer", val);;

View File

@ -1488,9 +1488,9 @@ static void* SCHEME2C(const char *who,
[(not s->c) [(not s->c)
@list{ @list{
@@IFDEF{SCHEME_BIG_ENDIAN}{ @@IFDEF{SCHEME_BIG_ENDIAN}{
if (sizeof(@ctype)<sizeof(int) && ret_loc) { if (sizeof(@ctype)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(@ctype)); delta += (sizeof(intptr_)-sizeof(@ctype));
}} }}
if (!(@(if ptr? "ret_loc" (pred "val" x)))) @; if (!(@(if ptr? "ret_loc" (pred "val" x)))) @;
@wrong-type["val" stype]; @wrong-type["val" stype];
@ -1498,9 +1498,9 @@ static void* SCHEME2C(const char *who,
[else [else
@list{ @list{
@@IFDEF{SCHEME_BIG_ENDIAN}{ @@IFDEF{SCHEME_BIG_ENDIAN}{
if (sizeof(@ctype)<sizeof(int) && ret_loc) { if (sizeof(@ctype)<sizeof(intptr_t) && ret_loc) {
((int*)W_OFFSET(dst,delta))[0] = 0; ((int*)W_OFFSET(dst,delta))[0] = 0;
delta += (sizeof(int)-sizeof(@ctype)); delta += (sizeof(intptr_)-sizeof(@ctype));
}} }}
if (@f[pred]) { if (@f[pred]) {
@ctype tmp@";"@and[offset]{ intptr_t toff@";"} @ctype tmp@";"@and[offset]{ intptr_t toff@";"}