Răsfoiți Sursa

fixed obj_copy(vvirtual) (close https://github.com/HaxeFoundation/haxe/issues/5866)

Nicolas Cannasse 8 ani în urmă
părinte
comite
65ad846a11
1 a modificat fișierele cu 4 adăugiri și 1 ștergeri
  1. 4 1
      src/std/obj.c

+ 4 - 1
src/std/obj.c

@@ -870,10 +870,13 @@ HL_PRIM vdynamic *hl_obj_copy( vdynamic *obj ) {
 		{
 			vvirtual *v = (vvirtual*)obj;
 			vvirtual *v2;
+			int i;
 			if( v->value )
 				return hl_obj_copy(v->value);
 			v2 = hl_alloc_virtual(v->t);
-			memcpy((void**)(v2 + 1) + v->t->virt->nfields * sizeof(void*), (void**)(v + 1) + v->t->virt->nfields * sizeof(void*), v->t->virt->dataSize);
+			for(i=0;i<v->t->virt->nfields;i++)
+				((void**)(v2 + 1))[i] = ((vvirtual**)(v + 1))[i] + (v2 - v);
+			memcpy((void**)(v2 + 1) + v->t->virt->nfields, (void**)(v + 1) + v->t->virt->nfields, v->t->virt->dataSize);
 			return (vdynamic*)v2;
 		}
 	default: