Forráskód Böngészése

a few renames, added hl_sys_args

Nicolas Cannasse 9 éve
szülő
commit
885abf8e44
12 módosított fájl, 69 hozzáadás és 57 törlés
  1. 5 3
      src/hl.h
  2. 3 3
      src/std/array.c
  3. 1 1
      src/std/buffer.c
  4. 3 3
      src/std/bytes.c
  5. 1 2
      src/std/error.c
  6. 3 3
      src/std/fun.c
  7. 12 12
      src/std/maps.c
  8. 4 4
      src/std/obj.c
  9. 1 6
      src/std/socket.c
  10. 2 2
      src/std/string.c
  11. 27 11
      src/std/sys.c
  12. 7 7
      src/std/types.c

+ 5 - 3
src/hl.h

@@ -393,12 +393,14 @@ bool hl_is_dynamic( hl_type *t );
 bool hl_same_type( hl_type *a, hl_type *b );
 bool hl_safe_cast( hl_type *t, hl_type *to );
 
-varray *hl_aalloc( hl_type *t, int size );
+#define hl_aptr(a,t)	((t*)(((varray*)(a))+1))
+
+varray *hl_alloc_array( hl_type *t, int size );
 vdynamic *hl_alloc_dynamic( hl_type *t );
 vobj *hl_alloc_obj( hl_type *t );
 vdynobj *hl_alloc_dynobj();
-vbyte *hl_balloc( int size );
-vbyte *hl_bcopy( vbyte *byte, int size );
+vbyte *hl_alloc_bytes( int size );
+vbyte *hl_copy_bytes( vbyte *byte, int size );
 
 vdynamic *hl_alloc_i32( int i );
 

+ 3 - 3
src/std/array.c

@@ -21,18 +21,18 @@
  */
 #include <hl.h>
 
-HL_PRIM varray *hl_aalloc( hl_type *at, int size ) {
+HL_PRIM varray *hl_alloc_array( hl_type *at, int size ) {
 	int esize = hl_type_size(at);
 	varray *a = (varray*)hl_gc_alloc(sizeof(varray) + esize*size + sizeof(hl_type));
 	a->t = &hlt_array;
 	a->at = at;
 	a->size = size;
-	memset(a+1,0,size*esize);
+	memset(hl_aptr(a,void*),0,size*esize);
 	return a;
 }
 
 HL_PRIM void hl_ablit( varray *dst, int dpos, varray *src, int spos, int len ) {
-	memcpy( (void**)(dst + 1) + dpos, (void**)(src + 1) + spos, len * sizeof(void*)); 
+	memcpy( hl_aptr(dst,void*) + dpos, hl_aptr(src,void*) + spos, len * sizeof(void*)); 
 }
 
 HL_PRIM hl_type *hl_atype( varray *a ) {

+ 1 - 1
src/std/buffer.c

@@ -244,7 +244,7 @@ static void hl_buffer_rec( hl_buffer *b, vdynamic *v, vlist *stack ) {
 			for(i=0;i<a->size;i++) {
 				if( i )
 					hl_buffer_str_sub(b,USTR(", "),2);
-				hl_buffer_addr(b,(char*)(a + 1) + i * stride,at,&l);
+				hl_buffer_addr(b,hl_aptr(a,char) + i * stride,at,&l);
 			}
 			hl_buffer_char(b,']');
 		}

+ 3 - 3
src/std/bytes.c

@@ -21,12 +21,12 @@
  */
 #include <hl.h>
 
-HL_PRIM vbyte *hl_balloc( int size ) {
+HL_PRIM vbyte *hl_alloc_bytes( int size ) {
 	return (vbyte*)hl_gc_alloc_noptr(size);
 }
 
-HL_PRIM vbyte *hl_bcopy( vbyte *ptr, int size ) {
-	vbyte *b = hl_balloc(size);
+HL_PRIM vbyte *hl_copy_bytes( vbyte *ptr, int size ) {
+	vbyte *b = hl_alloc_bytes(size);
 	memcpy(b,ptr,size);
 	return b;
 }

+ 1 - 2
src/std/error.c

@@ -56,8 +56,7 @@ void hl_error_msg( const uchar *fmt, ... ) {
 	len = uvsprintf(buf,fmt,args);
 	va_end(args);
 	d = hl_alloc_dynamic(&hlt_bytes);
-	d->v.ptr = hl_gc_alloc_noptr((len + 1) << 1);
-	memcpy(d->v.ptr,buf,(len + 1) << 1);
+	d->v.ptr = hl_copy_bytes((vbyte*)buf,(len + 1) << 1);
 	hl_throw(d);
 }
 

+ 3 - 3
src/std/fun.c

@@ -94,7 +94,7 @@ extern void *hlc_get_wrapper( hl_type *t );
 
 HL_PRIM vdynamic* hl_call_method( vdynamic *c, varray *args ) {
 	vclosure *cl = (vclosure*)c;
-	vdynamic **vargs = (vdynamic**)(args + 1);
+	vdynamic **vargs = hl_aptr(args,vdynamic*);
 	void *pargs[HL_MAX_ARGS];
 	void *ret;
 	union { double d; int i; float f; } tmp[HL_MAX_ARGS];
@@ -173,11 +173,11 @@ void *hl_wrapper_call( void *_c, void **args, vdynamic *ret ) {
 	if( w->fun == fun_var_args ) {
 		varray *a;
 		w = (vclosure*)w->value; // the real callback
-		a = hl_aalloc(&hlt_dyn,tfun->nargs);
+		a = hl_alloc_array(&hlt_dyn,tfun->nargs);
 		for(i=0;i<tfun->nargs;i++) {
 			hl_type *t = tfun->args[i];
 			void *v = hl_is_ptr(t) ? args + i : args[i];
-			*(void**)(a + 1) = hl_make_dyn(v,t);
+			hl_aptr(a,void*)[i] = hl_make_dyn(v,t);
 		}
 		if( w->hasValue )
 			vargs[p++] = (vdynamic*)w->value;

+ 12 - 12
src/std/maps.c

@@ -203,8 +203,8 @@ HL_PRIM bool hl_hbremove( hl_bytes_map *m, vbyte *_key ) {
 }
 
 HL_PRIM varray* hl_hbkeys( hl_bytes_map *m ) {
-	varray *a = hl_aalloc(&hlt_bytes,m->nentries);
-	uchar **keys = (uchar**)(a+1);
+	varray *a = hl_alloc_array(&hlt_bytes,m->nentries);
+	uchar **keys = hl_aptr(a,uchar*);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {
@@ -220,8 +220,8 @@ HL_PRIM varray* hl_hbkeys( hl_bytes_map *m ) {
 }
 
 HL_PRIM varray* hl_hbvalues( hl_bytes_map *m ) {
-	varray *a = hl_aalloc(&hlt_dyn,m->nentries);
-	vdynamic **values = (vdynamic**)(a+1);
+	varray *a = hl_alloc_array(&hlt_dyn,m->nentries);
+	vdynamic **values = hl_aptr(a,vdynamic*);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {
@@ -401,8 +401,8 @@ HL_PRIM bool hl_hiremove( hl_int_map *m, int key ) {
 }
 
 HL_PRIM varray* hl_hikeys( hl_int_map *m ) {
-	varray *a = hl_aalloc(&hlt_i32,m->nentries);
-	int *keys = (int*)(a+1);
+	varray *a = hl_alloc_array(&hlt_i32,m->nentries);
+	int *keys = hl_aptr(a,int);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {
@@ -418,8 +418,8 @@ HL_PRIM varray* hl_hikeys( hl_int_map *m ) {
 }
 
 HL_PRIM varray* hl_hivalues( hl_int_map *m ) {
-	varray *a = hl_aalloc(&hlt_dyn,m->nentries);
-	vdynamic **values = (vdynamic**)(a+1);
+	varray *a = hl_alloc_array(&hlt_dyn,m->nentries);
+	vdynamic **values = hl_aptr(a,vdynamic*);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {
@@ -604,8 +604,8 @@ HL_PRIM bool hl_horemove( hl_obj_map *m, vdynamic *key ) {
 }
 
 HL_PRIM varray* hl_hokeys( hl_obj_map *m ) {
-	varray *a = hl_aalloc(&hlt_dyn,m->nentries);
-	vdynamic **keys = (vdynamic**)(a+1);
+	varray *a = hl_alloc_array(&hlt_dyn,m->nentries);
+	vdynamic **keys = hl_aptr(a,vdynamic*);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {
@@ -621,8 +621,8 @@ HL_PRIM varray* hl_hokeys( hl_obj_map *m ) {
 }
 
 HL_PRIM varray* hl_hovalues( hl_obj_map *m ) {
-	varray *a = hl_aalloc(&hlt_dyn, m->nentries);
-	vdynamic **values = (vdynamic**)(a+1);
+	varray *a = hl_alloc_array(&hlt_dyn, m->nentries);
+	vdynamic **values = hl_aptr(a,vdynamic*);
 	int p = 0;
 	int i;
 	for(i=0;i<m->ncells;i++) {

+ 4 - 4
src/std/obj.c

@@ -695,9 +695,9 @@ HL_PRIM varray *hl_obj_fields( vdynamic *obj ) {
 		{
 			vdynobj *o = (vdynobj*)obj;
 			int i;
-			a = hl_aalloc(&hlt_bytes,o->nfields);
+			a = hl_alloc_array(&hlt_bytes,o->nfields);
 			for(i=0;i<o->nfields;i++)
-				((vbyte**)(a + 1))[i] = (vbyte*)hl_field_name((&o->dproto->fields + i)->hashed_name);
+				hl_aptr(a,vbyte*)[i] = (vbyte*)hl_field_name((&o->dproto->fields + i)->hashed_name);
 		}
 		break;
 	case HOBJ:
@@ -705,11 +705,11 @@ HL_PRIM varray *hl_obj_fields( vdynamic *obj ) {
 			hl_type_obj *tobj = obj->t->obj;
 			hl_runtime_obj *o = tobj->rt;
 			int i, p = 0;
-			a = hl_aalloc(&hlt_bytes,o->nfields);
+			a = hl_alloc_array(&hlt_bytes,o->nfields);
 			while( true ) {
 				for(i=0;i<tobj->nfields;i++) {
 					hl_obj_field *f = tobj->fields + i;
-					((vbyte**)(a + 1))[p++] =  (vbyte*)f->name;
+					hl_aptr(a,vbyte*)[p++] =  (vbyte*)f->name;
 				}
 				if( tobj->super == NULL ) break;
 				tobj = tobj->super->obj;

+ 1 - 6
src/std/socket.c

@@ -192,14 +192,9 @@ vbyte *hl_host_reverse( int ip ) {
 
 vbyte *hl_host_local() {
 	char buf[256];
-	vbyte *mem;
-	int size;
 	if( gethostname(buf,256) == SOCKET_ERROR )
 		return NULL;
-	size = (int)strlen(buf)+1;
-	mem = (vbyte*)hl_gc_alloc_noptr(size);
-	memcpy(mem,buf,size);
-	return mem;
+	return hl_copy_bytes((vbyte*)buf,(int)strlen(buf)+1);
 }
 
 bool hl_socket_connect( hl_socket *s, int host, int port ) {

+ 2 - 2
src/std/string.c

@@ -25,14 +25,14 @@ HL_PRIM vbyte *hl_itos( int i, int *len ) {
 	uchar tmp[24];
 	int k = (int)usprintf(tmp,24,USTR("%d"),i);
 	*len = k;
-	return hl_bcopy((vbyte*)tmp,(k + 1)<<1);
+	return hl_copy_bytes((vbyte*)tmp,(k + 1)<<1);
 }
 
 HL_PRIM vbyte *hl_ftos( double d, int *len ) {
 	uchar tmp[48];
 	int k = (int)usprintf(tmp,48,USTR("%.16g"),d); // don't use the last digit (eg 5.1 = 5.09999..996)
 	*len = k;
-	return hl_bcopy((vbyte*)tmp,(k + 1) << 1);
+	return hl_copy_bytes((vbyte*)tmp,(k + 1) << 1);
 }
 
 HL_PRIM vbyte *hl_value_to_string( vdynamic *d, int *len ) {

+ 27 - 11
src/std/sys.c

@@ -79,8 +79,7 @@ typedef uchar pchar;
 static pchar *pstrdup( const pchar *s, int len ) {
 	pchar *ret;
 	if( len < 0 ) len = (int)pstrlen(s);
-	ret = (pchar*)hl_gc_alloc_noptr(sizeof(pchar)*(len+1));
-	memcpy(ret,s,len*sizeof(pchar));
+	ret = (pchar*)hl_copy_bytes((vbyte*)s,sizeof(pchar)*(len+1));;
 	ret[len] = 0;
 	return ret;
 }
@@ -183,9 +182,9 @@ varray *hl_sys_env() {
 		}
 		count++;
 	}
-	a = hl_aalloc(&hlt_bytes,count*2);
+	a = hl_alloc_array(&hlt_bytes,count*2);
 	e = environ;
-	arr = (pchar**)(a+1);
+	arr = hl_aptr(a,pchar*);
 	while( *e ) {
 		pchar *x = pstrchr(*e,'=');
 		if( x == NULL ) {
@@ -283,8 +282,8 @@ varray *hl_sys_stat( vbyte *path ) {
 	int *i;
 	if( stat((pchar*)path,&s) != 0 )
 		return NULL;
-	a = hl_aalloc(&hlt_i32,12);
-	i = (int*)(a+1);
+	a = hl_alloc_array(&hlt_i32,12);
+	i = hl_aptr(a,int);
 	*i++ = s.st_gid;
 	*i++ = s.st_uid;
 	*i++ = s.st_atime;
@@ -373,8 +372,8 @@ varray *hl_sys_read_dir( vbyte *_path ) {
 		if( d.cFileName[0] != '.' || (d.cFileName[1] != 0 && (d.cFileName[1] != '.' || d.cFileName[2] != 0)) ) {
 			if( pos == count ) {
 				int ncount = count == 0 ? 16 : count * 2;
-				varray *narr = hl_aalloc(&hlt_bytes,count);
-				pchar **ncur = (pchar**)(narr+1);
+				varray *narr = hl_alloc_array(&hlt_bytes,count);
+				pchar **ncur = hl_aptr(narr,pchar*);
 				memcpy(ncur,current,count*sizeof(void*));
 				current = ncur;
 				a = narr;
@@ -402,7 +401,7 @@ varray *hl_sys_read_dir( vbyte *_path ) {
 		if( pos == count ) {
 			int ncount = count == 0 ? 16 : count * 2;
 			varray *narr = hl_aalloc(&hlt_bytes,count);
-			pchar **ncur = (pchar**)(narr+1);
+			pchar **ncur = hl_aptr(narr,pchar*);
 			memcpy(ncur,current,count*sizeof(void*));
 			current = ncur;
 			a = narr;
@@ -412,7 +411,7 @@ varray *hl_sys_read_dir( vbyte *_path ) {
 	}
 	closedir(d);
 #endif
-	if( a == NULL ) a = hl_aalloc(&hlt_bytes,0);
+	if( a == NULL ) a = hl_alloc_array(&hlt_bytes,0);
 	a->size = pos;
 	return a;
 }
@@ -489,9 +488,26 @@ int hl_sys_get_char( bool b ) {
 
 extern void hl_entry_point();
 
-int main() {
+static pchar **sys_args;
+static int sys_nargs;
+
+varray *hl_sys_args() {
+	varray *a = hl_alloc_array(&hlt_bytes,sys_nargs);
+	int i;
+	for(i=0;i<sys_nargs;i++)
+		hl_aptr(a,pchar*)[i] = sys_args[i];
+	return a;
+}
+
+#ifdef HL_WIN
+int wmain( int argc, uchar *argv[] ) {
+#else
+int main( int argc, char *argv[] ) {
+#endif
 	hl_trap_ctx ctx;
 	vdynamic *exc;
+	sys_args = argv + 1;
+	sys_nargs = argc - 1;
 	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF /*| _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF*/ );
 	hlc_trap(ctx,exc,on_exception);
 	hl_entry_point();

+ 7 - 7
src/std/types.c

@@ -281,10 +281,10 @@ HL_PRIM vbyte* hl_type_name( hl_type *t ) {
 }
 
 HL_PRIM varray* hl_type_enum_fields( hl_type *t ) {
-	varray *a = hl_aalloc(&hlt_bytes,t->tenum->nconstructs);
+	varray *a = hl_alloc_array(&hlt_bytes,t->tenum->nconstructs);
 	int i;
 	for( i=0; i<t->tenum->nconstructs;i++)
-		((void**)(a+1))[i] = (vbyte*)t->tenum->constructs[i].name;
+		hl_aptr(a,vbyte*)[i] = (vbyte*)t->tenum->constructs[i].name;
 	return a;
 }
 
@@ -314,8 +314,8 @@ HL_PRIM varray *hl_type_instance_fields( hl_type *t ) {
 		o = o->super->obj;
 	}
 	rt = hl_get_obj_rt(t);
-	a = hl_aalloc(&hlt_bytes,mcount + rt->nproto + rt->nfields);
-	names = (const uchar**)(a + 1);
+	a = hl_alloc_array(&hlt_bytes,mcount + rt->nproto + rt->nfields);
+	names = hl_aptr(a,const uchar*);
 	o = t->obj;
 	while( true ) {
 		int i;
@@ -405,7 +405,7 @@ HL_PRIM vdynamic *hl_ealloc( hl_type *t, int index, varray *args ) {
 	e = (venum*)(hasPtr ? hl_gc_alloc(c->size) : hl_gc_alloc_noptr(c->size));
 	e->index = index;
 	for(i=0;i<c->nparams;i++)
-		hl_write_dyn((char*)e+c->offsets[i],c->params[i],((vdynamic**)(args+1))[i]);
+		hl_write_dyn((char*)e+c->offsets[i],c->params[i],hl_aptr(args,vdynamic*)[i]);
 	v = hl_alloc_dynamic(t);
 	v->v.ptr = e;
 	return v;
@@ -416,9 +416,9 @@ HL_PRIM varray *hl_enum_parameters( vdynamic *v ) {
 	venum *e = (venum*)v->v.ptr;
 	hl_enum_construct *c = v->t->tenum->constructs + e->index;
 	int i;
-	a = hl_aalloc(&hlt_dyn,c->nparams);
+	a = hl_alloc_array(&hlt_dyn,c->nparams);
 	for(i=0;i<c->nparams;i++)
-		((vdynamic**)(a+1))[i] = hl_make_dyn((char*)e+c->offsets[i],c->params[i]);
+		hl_aptr(a,vdynamic*)[i] = hl_make_dyn((char*)e+c->offsets[i],c->params[i]);
 	return a;
 }