Browse Source

Added size_t support.

woollybah 9 years ago
parent
commit
0213ab13dc

+ 1 - 0
appstub.mod/debugger.stdio.glue.c

@@ -96,6 +96,7 @@ void bmx_debugger_DebugDecl_ArrayDeclIndexedPart(struct BBDebugDecl * decl, BBAr
 		case '$':size=sizeof(void*);break;
 		case '$':size=sizeof(void*);break;
 		case '[':size=sizeof(void*);break;
 		case '[':size=sizeof(void*);break;
 		case '(':size=sizeof(void*);break;
 		case '(':size=sizeof(void*);break;
+		case 'z':size=sizeof(BBSIZET);break;
 	}
 	}
 
 
 	decl->var_address = ((char*)BBARRAYDATA(arr, arr->dims)) + size * index;
 	decl->var_address = ((char*)BBARRAYDATA(arr, arr->dims)) + size * index;

+ 5 - 0
appstub.mod/debugger_mt.stdio.bmx

@@ -142,6 +142,8 @@ Function TypeName$( tag$ Var )
 		Return "CString"
 		Return "CString"
 	Case "w"
 	Case "w"
 		Return "WString"
 		Return "WString"
+	Case "t"
+		Return "size_t"
 	Case ":","?"
 	Case ":","?"
 		Local id$=Ident( tag )
 		Local id$=Ident( tag )
 		While tag And tag[0]=Asc(".")
 		While tag And tag[0]=Asc(".")
@@ -241,6 +243,7 @@ Function DebugDeclSize:Int( decl:Int Ptr )
 	Case Asc("f") Return 4
 	Case Asc("f") Return 4
 	Case Asc("l") Return 8
 	Case Asc("l") Return 8
 	Case Asc("d") Return 8
 	Case Asc("d") Return 8
+	' size_t (t) fall-through to ptr64 size below
 	End Select
 	End Select
 
 
 ?Not ptr64
 ?Not ptr64
@@ -302,6 +305,8 @@ Function DebugDeclValue$( decl:Int Ptr,inst:Byte Ptr )
 		Return String.FromFloat( (Float Ptr p)[0] )
 		Return String.FromFloat( (Float Ptr p)[0] )
 	Case Asc("d")
 	Case Asc("d")
 		Return String.FromDouble( (Double Ptr p)[0] )
 		Return String.FromDouble( (Double Ptr p)[0] )
+	Case Asc("t")
+		Return String.FromSizet( (size_t Ptr p)[0] )
 	Case Asc("$")
 	Case Asc("$")
 		p=(Byte Ptr Ptr p)[0]
 		p=(Byte Ptr Ptr p)[0]
 		Return DebugEscapeString( bmx_debugger_DebugDecl_StringFromAddress(p) )
 		Return DebugEscapeString( bmx_debugger_DebugDecl_StringFromAddress(p) )

+ 5 - 0
blitz.mod/blitz_array.c

@@ -88,6 +88,7 @@ static BBArray *allocateArray( const char *type,int dims,int *lens ){
 	case '$':size=sizeof(void*);flags=0;break;
 	case '$':size=sizeof(void*);flags=0;break;
 	case '[':size=sizeof(void*);flags=0;break;
 	case '[':size=sizeof(void*);flags=0;break;
 	case '(':size=sizeof(void*);break;
 	case '(':size=sizeof(void*);break;
+	case 'z':size=sizeof(BBSIZET);break;
 	}
 	}
 	size*=length;
 	size*=length;
 
 
@@ -360,6 +361,7 @@ QSORTARRAY( int,qsort_i )
 QSORTARRAY( BBInt64,qsort_l );
 QSORTARRAY( BBInt64,qsort_l );
 QSORTARRAY( float,qsort_f );
 QSORTARRAY( float,qsort_f );
 QSORTARRAY( double,qsort_d );
 QSORTARRAY( double,qsort_d );
+QSORTARRAY( BBSIZET,qsort_z );
 #undef LESSTHAN
 #undef LESSTHAN
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))<0)
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))<0)
 QSORTARRAY( BBObject*,qsort_obj );
 QSORTARRAY( BBObject*,qsort_obj );
@@ -371,6 +373,7 @@ QSORTARRAY( int,qsort_i_d )
 QSORTARRAY( BBInt64,qsort_l_d );
 QSORTARRAY( BBInt64,qsort_l_d );
 QSORTARRAY( float,qsort_f_d );
 QSORTARRAY( float,qsort_f_d );
 QSORTARRAY( double,qsort_d_d );
 QSORTARRAY( double,qsort_d_d );
+QSORTARRAY( BBSIZET,qsort_z_d );
 #undef LESSTHAN
 #undef LESSTHAN
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))>0)
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))>0)
 QSORTARRAY( BBObject*,qsort_obj_d );
 QSORTARRAY( BBObject*,qsort_obj_d );
@@ -390,6 +393,7 @@ void bbArraySort( BBArray *arr,int ascending ){
 		case 'f':qsort_f( (float*)p,(float*)p+n );break;
 		case 'f':qsort_f( (float*)p,(float*)p+n );break;
 		case 'd':qsort_d( (double*)p,(double*)p+n );break;
 		case 'd':qsort_d( (double*)p,(double*)p+n );break;
 		case '$':case ':':qsort_obj( (BBObject**)p,(BBObject**)p+n );break;
 		case '$':case ':':qsort_obj( (BBObject**)p,(BBObject**)p+n );break;
+		case 'z':qsort_z( (BBSIZET*)p,(BBSIZET*)p+n );break;
 		}
 		}
 	}else{
 	}else{
 		switch( arr->type[0] ){
 		switch( arr->type[0] ){
@@ -400,6 +404,7 @@ void bbArraySort( BBArray *arr,int ascending ){
 		case 'f':qsort_f_d( (float*)p,(float*)p+n );break;
 		case 'f':qsort_f_d( (float*)p,(float*)p+n );break;
 		case 'd':qsort_d_d( (double*)p,(double*)p+n );break;
 		case 'd':qsort_d_d( (double*)p,(double*)p+n );break;
 		case '$':case ':':qsort_obj_d( (BBObject**)p,(BBObject**)p+n );break;
 		case '$':case ':':qsort_obj_d( (BBObject**)p,(BBObject**)p+n );break;
+		case 'z':qsort_z_d( (BBSIZET*)p,(BBSIZET*)p+n );break;
 		}
 		}
 	}
 	}
 }
 }

+ 13 - 0
blitz.mod/blitz_cclib.c

@@ -124,3 +124,16 @@ int bbLongSne( BBInt64 x,BBInt64 y ){
 double bbLongToFloat( BBInt64 x ){
 double bbLongToFloat( BBInt64 x ){
 	return (double)x;
 	return (double)x;
 }
 }
+
+BBSIZET bbSizetAbs( BBSIZET x ){
+	return x>=0 ? x : -x;
+}
+BBSIZET bbSizetSgn( BBSIZET x ){
+	return x==0 ? 0 : (x>0 ? 1 : -1);
+}
+BBSIZET bbSizetMin( BBSIZET x,BBSIZET y ){
+	return x<y ? x : y;
+}
+BBSIZET bbSizetMax( BBSIZET x,BBSIZET y ){ 
+	return x>y ? x : y;
+}

+ 5 - 0
blitz.mod/blitz_cclib.h

@@ -59,6 +59,11 @@ int		bbLongSeq( BBInt64 x,BBInt64 y );
 int		bbLongSne( BBInt64 x,BBInt64 y );
 int		bbLongSne( BBInt64 x,BBInt64 y );
 double	bbLongToFloat( BBInt64 x );
 double	bbLongToFloat( BBInt64 x );
 
 
+BBSIZET bbSizetMin( BBSIZET x,BBSIZET y );
+BBSIZET bbSizetMax( BBSIZET x,BBSIZET y );
+BBSIZET bbSizetSgn( BBSIZET x );
+BBSIZET bbSizetAbs( BBSIZET x );
+
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif

+ 3 - 0
blitz.mod/blitz_classes.i

@@ -57,6 +57,9 @@ String^Object{
 	+FromUTF8String:String( utf8String:Byte Ptr )="bbStringFromUTF8String"
 	+FromUTF8String:String( utf8String:Byte Ptr )="bbStringFromUTF8String"
 	-ToUTF8String:Byte Ptr()="bbStringToUTF8String"
 	-ToUTF8String:Byte Ptr()="bbStringToUTF8String"
 
 
+	-ToSizet:size_t()="bbStringToSizet"
+	+FromSizet:String( sizetValue:size_t )="bbStringFromSizet"
+
 }AF="bbStringClass"
 }AF="bbStringClass"
 
 
 ___Array^Object{
 ___Array^Object{

+ 48 - 1
blitz.mod/blitz_string.c

@@ -61,7 +61,11 @@ BBClass bbStringClass={
 	bbStringJoin,
 	bbStringJoin,
 	
 	
 	bbStringFromUTF8String,
 	bbStringFromUTF8String,
-	bbStringToUTF8String
+	bbStringToUTF8String,
+	
+	bbStringToSizet,
+	bbStringFromSizet
+
 };
 };
 
 
 BBString bbEmptyString={
 BBString bbEmptyString={
@@ -136,6 +140,14 @@ BBString *bbStringFromLong( BBInt64 n ){
 	return bbStringFromBytes( p,buf+64-p );
 	return bbStringFromBytes( p,buf+64-p );
 }
 }
 
 
+BBString *bbStringFromSizet( BBSIZET n ){
+	char buf[64],*p=buf+64;
+	do{
+		*--p=n%10+'0';
+	}while(n/=10);
+	return bbStringFromBytes( p,buf+64-p );
+}
+
 BBString *bbStringFromFloat( float n ){
 BBString *bbStringFromFloat( float n ){
 	char buf[64];
 	char buf[64];
 	sprintf( buf,"%#.9g",n );
 	sprintf( buf,"%#.9g",n );
@@ -427,6 +439,41 @@ BBInt64 bbStringToLong( BBString *t ){
 	return neg ? -n : n;
 	return neg ? -n : n;
 }
 }
 
 
+BBSIZET bbStringToSizet( BBString *t ){
+	int i=0,neg=0;
+	BBSIZET n=0;
+	
+	while( i<t->length && isspace(t->buf[i]) ) ++i;
+	if( i==t->length ){ return 0; }
+	
+	if( t->buf[i]=='+' ) ++i;
+	else if( neg=(t->buf[i]=='-') ) ++i;
+	if( i==t->length ){ return 0; }
+	
+	if( t->buf[i]=='%' ){
+		for( ++i;i<t->length;++i ){
+			int c=t->buf[i];
+			if( c!='0' && c!='1' ) break;
+			n=n*2+(c-'0');
+		}
+	}else if( t->buf[i]=='$' ){
+		for( ++i;i<t->length;++i ){
+			int c=toupper(t->buf[i]);
+			if( !isxdigit(c) ) break;
+			if( c>='A' ) c-=('A'-'0'-10);
+			n=n*16+(c-'0');
+		}
+	}else{
+		for( ;i<t->length;++i ){
+			int c=t->buf[i];
+			if( !isdigit(c) ) break;
+			n=n*10+(c-'0');
+		}
+	}
+	//*r=neg ? -n : n;
+	return n;
+}
+
 float bbStringToFloat( BBString *t ){
 float bbStringToFloat( BBString *t ){
 	char *p=bbStringToCString( t );
 	char *p=bbStringToCString( t );
 	float n=atof( p );
 	float n=atof( p );

+ 3 - 1
blitz.mod/blitz_string.h

@@ -24,6 +24,7 @@ BBString*bbStringFromChar( int c );
 
 
 BBString*bbStringFromInt( int n );
 BBString*bbStringFromInt( int n );
 BBString*	bbStringFromLong( BBInt64 n );
 BBString*	bbStringFromLong( BBInt64 n );
+BBString*	bbStringFromSizet( BBSIZET n );
 BBString*bbStringFromFloat( float n );
 BBString*bbStringFromFloat( float n );
 BBString*	bbStringFromDouble( double n );
 BBString*	bbStringFromDouble( double n );
 BBString*	bbStringFromBytes( const char *p,int n );
 BBString*	bbStringFromBytes( const char *p,int n );
@@ -55,7 +56,8 @@ BBString*	bbStringToUpper( BBString *str );
 int		bbStringToInt( BBString *str );
 int		bbStringToInt( BBString *str );
 float	bbStringToFloat( BBString *str );
 float	bbStringToFloat( BBString *str );
 double	bbStringToDouble( BBString *str );
 double	bbStringToDouble( BBString *str );
-BBInt64		bbStringToLong( BBString *str );
+BBInt64 bbStringToLong( BBString *str );
+BBSIZET bbStringToSizet( BBString *str );
 char*	bbStringToCString( BBString *str );
 char*	bbStringToCString( BBString *str );
 BBChar*	bbStringToWString( BBString *str );
 BBChar*	bbStringToWString( BBString *str );
 char*	bbStringToUTF8String( BBString *str );
 char*	bbStringToUTF8String( BBString *str );

+ 20 - 0
blitz.mod/blitz_types.c

@@ -6,6 +6,7 @@ const char *bbByteTypeTag="b";
 const char *bbShortTypeTag="s";
 const char *bbShortTypeTag="s";
 const char *bbIntTypeTag="i";
 const char *bbIntTypeTag="i";
 const char *bbLongTypeTag="l";
 const char *bbLongTypeTag="l";
+const char *bbSizetTypeTag="z";
 const char *bbFloatTypeTag="f";
 const char *bbFloatTypeTag="f";
 const char *bbDoubleTypeTag="d";
 const char *bbDoubleTypeTag="d";
 const char *bbStringTypeTag="$";
 const char *bbStringTypeTag="$";
@@ -18,6 +19,7 @@ BBINT bbConvertToInt( struct bbDataDef * data ){
 	case 's':return data->s;
 	case 's':return data->s;
 	case 'i':return data->i;
 	case 'i':return data->i;
 	case 'l':return data->l;
 	case 'l':return data->l;
+	case 'z':return data->z;
 	case 'f':return data->f;
 	case 'f':return data->f;
 	case 'd':return data->d;
 	case 'd':return data->d;
 	case '$':return bbStringToInt( data->t );
 	case '$':return bbStringToInt( data->t );
@@ -31,6 +33,7 @@ BBLONG bbConvertToLong( struct bbDataDef * data ){
 	case 's':return data->s;
 	case 's':return data->s;
 	case 'i':return data->i;
 	case 'i':return data->i;
 	case 'l':return data->l;
 	case 'l':return data->l;
+	case 'z':return data->z;
 	case 'f':return data->f;
 	case 'f':return data->f;
 	case 'd':return data->d;
 	case 'd':return data->d;
 	case '$':return bbStringToLong( data->t );
 	case '$':return bbStringToLong( data->t );
@@ -44,6 +47,7 @@ BBFLOAT bbConvertToFloat( struct bbDataDef * data ){
 	case 's':return data->s;
 	case 's':return data->s;
 	case 'i':return data->i;
 	case 'i':return data->i;
 	case 'l':return data->l;
 	case 'l':return data->l;
+	case 'z':return data->z;
 	case 'f':return data->f;
 	case 'f':return data->f;
 	case 'd':return data->d;
 	case 'd':return data->d;
 	case '$':return bbStringToFloat( data->t );
 	case '$':return bbStringToFloat( data->t );
@@ -57,6 +61,7 @@ BBDOUBLE bbConvertToDouble( struct bbDataDef * data ){
 	case 's':return data->s;
 	case 's':return data->s;
 	case 'i':return data->i;
 	case 'i':return data->i;
 	case 'l':return data->l;
 	case 'l':return data->l;
+	case 'z':return data->z;
 	case 'f':return data->f;
 	case 'f':return data->f;
 	case 'd':return data->d;
 	case 'd':return data->d;
 	case '$':return bbStringToFloat( data->t );
 	case '$':return bbStringToFloat( data->t );
@@ -70,9 +75,24 @@ BBSTRING bbConvertToString( struct bbDataDef * data ){
 	case 's':return bbStringFromInt( data->s );
 	case 's':return bbStringFromInt( data->s );
 	case 'i':return bbStringFromInt( data->i );
 	case 'i':return bbStringFromInt( data->i );
 	case 'l':return bbStringFromLong( data->l );
 	case 'l':return bbStringFromLong( data->l );
+	case 'z':return bbStringFromSizet( data->z );
 	case 'f':return bbStringFromFloat( data->f );
 	case 'f':return bbStringFromFloat( data->f );
 	case 'd':return bbStringFromFloat( data->d );
 	case 'd':return bbStringFromFloat( data->d );
 	case '$':return data->t;
 	case '$':return data->t;
 	}
 	}
 	return &bbEmptyString;
 	return &bbEmptyString;
 }
 }
+
+BBSIZET bbConvertToSizet( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return data->b;
+	case 's':return data->s;
+	case 'i':return data->i;
+	case 'l':return data->l;
+	case 'z':return data->z;
+	case 'f':return data->f;
+	case 'd':return data->d;
+	case '$':return bbStringToSizet( data->t );
+	}
+	return 0;
+}

+ 3 - 0
blitz.mod/blitz_types.h

@@ -30,6 +30,7 @@ typedef signed int		BBINT;
 typedef BBInt64			BBLONG;
 typedef BBInt64			BBLONG;
 typedef float			BBFLOAT;
 typedef float			BBFLOAT;
 typedef double			BBDOUBLE;
 typedef double			BBDOUBLE;
+typedef size_t			BBSIZET;
 typedef BBClass*		BBCLASS;
 typedef BBClass*		BBCLASS;
 typedef BBObject*		BBOBJECT;
 typedef BBObject*		BBOBJECT;
 typedef BBString*		BBSTRING;
 typedef BBString*		BBSTRING;
@@ -43,6 +44,7 @@ extern const char *bbByteTypeTag;	//"b"
 extern const char *bbShortTypeTag;	//"s"
 extern const char *bbShortTypeTag;	//"s"
 extern const char *bbIntTypeTag;	//"i"
 extern const char *bbIntTypeTag;	//"i"
 extern const char *bbLongTypeTag;	//"l"
 extern const char *bbLongTypeTag;	//"l"
+extern const char *bbSizetTypeTag;	//"z"
 extern const char *bbFloatTypeTag;	//"f"
 extern const char *bbFloatTypeTag;	//"f"
 extern const char *bbDoubleTypeTag;	//"d"
 extern const char *bbDoubleTypeTag;	//"d"
 extern const char *bbStringTypeTag;	//"$"
 extern const char *bbStringTypeTag;	//"$"
@@ -56,6 +58,7 @@ struct bbDataDef {
 		BBSHORT s;
 		BBSHORT s;
 		BBINT i;
 		BBINT i;
 		BBLONG l;
 		BBLONG l;
+		BBSIZET z;
 		BBFLOAT f;
 		BBFLOAT f;
 		BBDOUBLE d;
 		BBDOUBLE d;
 		BBSTRING t;
 		BBSTRING t;

+ 66 - 0
reflection.mod/reflection.bmx

@@ -97,6 +97,8 @@ Function _Get:Object( p:Byte Ptr,typeId:TTypeId )
 		Return String.FromInt( (Int Ptr p)[0] )
 		Return String.FromInt( (Int Ptr p)[0] )
 	Case LongTypeId
 	Case LongTypeId
 		Return String.FromLong( (Long Ptr p)[0] )
 		Return String.FromLong( (Long Ptr p)[0] )
+	Case SizetTypeId
+		Return String.FromSizet( (size_t Ptr p)[0] )
 	Case FloatTypeId
 	Case FloatTypeId
 		Return String.FromFloat( (Float Ptr p)[0] )
 		Return String.FromFloat( (Float Ptr p)[0] )
 	Case DoubleTypeId
 	Case DoubleTypeId
@@ -121,6 +123,13 @@ Function _Push:Byte Ptr( sp:Byte Ptr,typeId:TTypeId,value:Object )
 	Case LongTypeId
 	Case LongTypeId
 		(Long Ptr sp)[0]=value.ToString().ToLong()
 		(Long Ptr sp)[0]=value.ToString().ToLong()
 		Return sp+8
 		Return sp+8
+	Case SizetTypeId
+		(size_t Ptr sp)[0]=value.ToString().ToSizet()
+?Not ptr64
+		Return sp+4
+?ptr64
+		Return sp+8
+?
 	Case FloatTypeId
 	Case FloatTypeId
 		(Float Ptr sp)[0]=value.ToString().ToFloat()
 		(Float Ptr sp)[0]=value.ToString().ToFloat()
 		Return sp+4
 		Return sp+4
@@ -165,6 +174,8 @@ Function _Assign( p:Byte Ptr,typeId:TTypeId,value:Object )
 		(Int Ptr p)[0]=value.ToString().ToInt()
 		(Int Ptr p)[0]=value.ToString().ToInt()
 	Case LongTypeId
 	Case LongTypeId
 		(Long Ptr p)[0]=value.ToString().ToLong()
 		(Long Ptr p)[0]=value.ToString().ToLong()
+	Case SizetTypeId
+		(size_t Ptr p)[0]=value.ToString().ToSizet()
 	Case FloatTypeId
 	Case FloatTypeId
 		(Float Ptr p)[0]=value.ToString().ToFloat()
 		(Float Ptr p)[0]=value.ToString().ToFloat()
 	Case DoubleTypeId
 	Case DoubleTypeId
@@ -207,7 +218,11 @@ Function _CallFunction:Object( p:Byte Ptr,typeId:TTypeId,args:Object[],argTypes:
 	End If
 	End If
 
 
 	Select typeId
 	Select typeId
+?Not ptr64
+	Case ByteTypeId,ShortTypeId,IntTypeId,SizetTypeId
+?ptr64
 	Case ByteTypeId,ShortTypeId,IntTypeId
 	Case ByteTypeId,ShortTypeId,IntTypeId
+?
 		Select argTypes.length
 		Select argTypes.length
 			Case 0
 			Case 0
 				Local f:Int()=p
 				Local f:Int()=p
@@ -240,7 +255,11 @@ Function _CallFunction:Object( p:Byte Ptr,typeId:TTypeId,args:Object[],argTypes:
 				Local f:Int(p0:Byte Ptr,p1:Byte Ptr,p2:Byte Ptr,p3:Byte Ptr,p4:Byte Ptr,p5:Byte Ptr,p6:Byte Ptr,p7:Byte Ptr)=p
 				Local f:Int(p0:Byte Ptr,p1:Byte Ptr,p2:Byte Ptr,p3:Byte Ptr,p4:Byte Ptr,p5:Byte Ptr,p6:Byte Ptr,p7:Byte Ptr)=p
 				Return String.FromInt( f( q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7] ) )
 				Return String.FromInt( f( q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7] ) )
 		End Select
 		End Select
+?Not ptr64
 	Case LongTypeId
 	Case LongTypeId
+?ptr64
+	Case LongTypeId,SizetTypeId
+?
 		Select argTypes.length
 		Select argTypes.length
 			Case 0
 			Case 0
 				Local f:Long()=p
 				Local f:Long()=p
@@ -491,7 +510,11 @@ Function _CallMethod:Object( p:Byte Ptr,typeId:TTypeId,obj:Object,args:Object[],
 	End If
 	End If
 	'If Int Ptr(sp)>Int Ptr(q)+8 Throw "ERROR"
 	'If Int Ptr(sp)>Int Ptr(q)+8 Throw "ERROR"
 	Select typeId
 	Select typeId
+?Not ptr64
+	Case ByteTypeId,ShortTypeId,IntTypeId,SizetTypeId
+?ptr64
 	Case ByteTypeId,ShortTypeId,IntTypeId
 	Case ByteTypeId,ShortTypeId,IntTypeId
+?
 		Select argTypes.length
 		Select argTypes.length
 			Case 0
 			Case 0
 				Local f:Int(m:Object)=p
 				Local f:Int(m:Object)=p
@@ -524,7 +547,11 @@ Function _CallMethod:Object( p:Byte Ptr,typeId:TTypeId,obj:Object,args:Object[],
 				Local f:Int(p0:Byte Ptr,p1:Byte Ptr,p2:Byte Ptr,p3:Byte Ptr,p4:Byte Ptr,p5:Byte Ptr,p6:Byte Ptr,p7:Byte Ptr)=p
 				Local f:Int(p0:Byte Ptr,p1:Byte Ptr,p2:Byte Ptr,p3:Byte Ptr,p4:Byte Ptr,p5:Byte Ptr,p6:Byte Ptr,p7:Byte Ptr)=p
 				Return String.FromInt( f( q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7] ) )
 				Return String.FromInt( f( q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7] ) )
 		End Select
 		End Select
+?Not ptr64
 	Case LongTypeId
 	Case LongTypeId
+?ptr64
+	Case LongTypeId,SizetTypeId
+?
 		Select argTypes.length
 		Select argTypes.length
 			Case 0
 			Case 0
 				Local f:Long(m:Object)=p
 				Local f:Long(m:Object)=p
@@ -784,6 +811,7 @@ Function TypeTagForId$( id:TTypeId )
 	Case ShortTypeId Return "s"
 	Case ShortTypeId Return "s"
 	Case IntTypeId Return "i"
 	Case IntTypeId Return "i"
 	Case LongTypeId Return "l"
 	Case LongTypeId Return "l"
+	Case SizetTypeId Return "t"
 	Case FloatTypeId Return "f"
 	Case FloatTypeId Return "f"
 	Case DoubleTypeId Return "d"
 	Case DoubleTypeId Return "d"
 	Case StringTypeId Return "$"
 	Case StringTypeId Return "$"
@@ -883,6 +911,7 @@ Function TypeIdForTag:TTypeId( ty$ )
 	Case "s" Return ShortTypeId
 	Case "s" Return ShortTypeId
 	Case "i" Return IntTypeId
 	Case "i" Return IntTypeId
 	Case "l" Return LongTypeId
 	Case "l" Return LongTypeId
+	Case "t" Return SizetTypeId
 	Case "f" Return FloatTypeId
 	Case "f" Return FloatTypeId
 	Case "d" Return DoubleTypeId
 	Case "d" Return DoubleTypeId
 	Case "$" Return StringTypeId
 	Case "$" Return StringTypeId
@@ -939,6 +968,15 @@ bbdoc: Primitive long type
 End Rem
 End Rem
 Global LongTypeId:TTypeId=New TTypeId.Init( "Long",8 )
 Global LongTypeId:TTypeId=New TTypeId.Init( "Long",8 )
 
 
+Rem
+bbdoc: Primitive size_t type
+End Rem
+?Not ptr64
+Global SizetTypeId:TTypeId=New TTypeId.Init( "size_t",4 )
+?ptr64
+Global SizetTypeId:TTypeId=New TTypeId.Init( "size_t",8 )
+?
+
 Rem
 Rem
 bbdoc: Primitive float type
 bbdoc: Primitive float type
 End Rem
 End Rem
@@ -1069,6 +1107,13 @@ Type TConstant Extends TMember
 		Return GetString().ToLong()
 		Return GetString().ToLong()
 	EndMethod
 	EndMethod
 
 
+	Rem
+	bbdoc: Get constant value as @size_t
+	EndRem	
+	Method GetSizet:size_t()
+		Return GetString().ToSizet()
+	EndMethod
+
 	Rem
 	Rem
 	bbdoc: Get constant value as @Double
 	bbdoc: Get constant value as @Double
 	EndRem	
 	EndRem	
@@ -1124,6 +1169,13 @@ Type TField Extends TMember
 		Return GetString( obj ).ToLong()
 		Return GetString( obj ).ToLong()
 	End Method
 	End Method
 	
 	
+	Rem
+	bbdoc: Get size_t field value
+	End Rem
+	Method GetSizet:size_t( obj:Object )
+		Return GetString( obj ).ToSizet()
+	End Method
+	
 	Rem
 	Rem
 	bbdoc: Get float field value
 	bbdoc: Get float field value
 	End Rem
 	End Rem
@@ -1225,6 +1277,13 @@ Type TGlobal Extends TMember
 		Return GetString().ToLong()
 		Return GetString().ToLong()
 	End Method
 	End Method
 	
 	
+	Rem
+	bbdoc: Get size_t global value
+	End Rem
+	Method GetSizet:size_t()
+		Return GetString().ToSizet()
+	End Method
+	
 	Rem
 	Rem
 	bbdoc: Get float global value
 	bbdoc: Get float global value
 	End Rem
 	End Rem
@@ -1267,6 +1326,13 @@ Type TGlobal Extends TMember
 		SetString String.FromLong( value )
 		SetString String.FromLong( value )
 	End Method
 	End Method
 	
 	
+	Rem
+	bbdoc: Set size_t global value
+	End Rem
+	Method SetSizet(value:size_t )
+		SetString String.FromSizet( value )
+	End Method
+	
 	Rem
 	Rem
 	bbdoc: Set float global value
 	bbdoc: Set float global value
 	End Rem
 	End Rem