浏览代码

bugfix when more than 63 virtual fields (close #491)

Nicolas Cannasse 3 年之前
父节点
当前提交
eff5a9e250
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      src/std/obj.c

+ 3 - 0
src/std/obj.c

@@ -590,9 +590,12 @@ vvirtual *hl_to_virtual( hl_type *vt, vdynamic *obj ) {
 			o->virtuals = v;
 			// recast
 			if( need_recast ) {
+				bool extra_check = vt->virt->nfields > 63;
 				for(i=0;i<vt->virt->nfields;i++)
 					if( need_recast & (((int64)1) << ((int64)i)) ) {
 						hl_obj_field *f = vt->virt->fields + i;
+						if( extra_check && hl_lookup_find(o->lookup,o->nfields,f->hashed_name) == NULL )
+							continue;
 						if( hl_is_ptr(f->t) )
 							hl_dyn_setp(obj,f->hashed_name,f->t,hl_dyn_getp(obj,f->hashed_name,f->t));
 						else if( f->t->kind == HF64 )