Browse Source

full unit tests passing

Nicolas Cannasse 9 years ago
parent
commit
8f3458d27a
2 changed files with 21 additions and 11 deletions
  1. 19 9
      src/std/cast.c
  2. 2 2
      src/std/obj.c

+ 19 - 9
src/std/cast.c

@@ -74,15 +74,13 @@ int hl_dyn_casti( void *data, hl_type *t, hl_type *to ) {
 		return (int)*(double*)data;
 	case HBOOL:
 		return *(bool*)data;
-	default:
-		switch( t->kind ) {
-		case HNULL:
-			{
-				vdynamic *v = *(vdynamic**)data;
-				if( v == NULL ) return 0;
-				return hl_dyn_casti(&v->v,t->tparam,to);
-			}
+	case HNULL:
+		{
+			vdynamic *v = *(vdynamic**)data;
+			if( v == NULL ) return 0;
+			return hl_dyn_casti(&v->v,t->tparam,to);
 		}
+	default:
 		break;
 	}
 	hl_error_msg(USTR("Can't cast %s(%s) to %s"),hl_to_string(hl_make_dyn(data,t)),hl_type_str(t),hl_type_str(to));
@@ -90,7 +88,7 @@ int hl_dyn_casti( void *data, hl_type *t, hl_type *to ) {
 }
 
 void *hl_dyn_castp( void *data, hl_type *t, hl_type *to ) {
-	if( t->kind == HDYN ) {
+	if( t->kind == HDYN || t->kind == HNULL ) {
 		vdynamic *v = *(vdynamic**)data;
 		if( v == NULL ) return NULL;
 		t = v->t;
@@ -169,6 +167,12 @@ double hl_dyn_castd( void *data, hl_type *t ) {
 		return *(int*)data;
 	case HBOOL:
 		return *(bool*)data;
+	case HNULL:
+		{
+			vdynamic *v = *(vdynamic**)data;
+			if( v == NULL ) return 0;
+			return hl_dyn_castd(&v->v,t->tparam);
+		}
 	default:
 		break;
 	}
@@ -195,6 +199,12 @@ float hl_dyn_castf( void *data, hl_type *t ) {
 		return (float)*(int*)data;
 	case HBOOL:
 		return *(bool*)data;
+	case HNULL:
+		{
+			vdynamic *v = *(vdynamic**)data;
+			if( v == NULL ) return 0;
+			return hl_dyn_castf(&v->v,t->tparam);
+		}
 	default:
 		break;
 	}

+ 2 - 2
src/std/obj.c

@@ -524,7 +524,7 @@ void hl_dyn_seti( vdynamic *d, int hfield, hl_type *t, int value ) {
 		{
 			vdynamic tmp;
 			tmp.t = t;
-			tmp.v.f = value;
+			tmp.v.i = value;
 			hl_write_dyn(addr,ft,&tmp);
 		}
 		break;
@@ -552,7 +552,7 @@ void hl_dyn_setd( vdynamic *d, int hfield, double value ) {
 	else {
 		vdynamic tmp;
 		tmp.t = &hlt_f64;
-		tmp.v.f = value;
+		tmp.v.d = value;
 		hl_write_dyn(addr,t,&tmp);
 	}
 }