浏览代码

minor virtual cast improvements

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

+ 10 - 3
src/std/cast.c

@@ -128,6 +128,10 @@ void *hl_dyn_castp( void *data, hl_type *t, hl_type *to ) {
 			if( c ) return c;
 		}
 		break;
+	case TK2(HOBJ,HVIRTUAL):
+	case TK2(HDYNOBJ,HVIRTUAL):
+	case TK2(HVIRTUAL,HVIRTUAL):
+		return hl_to_virtual(to,*(vdynamic**)data);
 	case TK2(HOBJ,HDYN):
 	case TK2(HDYNOBJ,HDYN):
 	case TK2(HFUN,HDYN):
@@ -243,10 +247,13 @@ int hl_dyn_compare( vdynamic *a, vdynamic *b ) {
 	case TK2(HTYPE,HTYPE):
 	case TK2(HBYTES,HBYTES):
 		return a->v.ptr != b->v.ptr;
+	case TK2(HOBJ,HVIRTUAL):
+	case TK2(HDYNOBJ,HVIRTUAL):
+		return hl_dyn_compare(a,((vvirtual*)b)->value);
+	case TK2(HVIRTUAL,HOBJ):
+	case TK2(HVIRTUAL,HDYNOBJ):
+		return hl_dyn_compare(((vvirtual*)a)->value,b);
 	}
-#ifdef _DEBUG
-	uprintf(USTR("Don't know how to compare %s(%s) and %s(%s)\n"),hl_to_string(a),hl_type_str(a->t),hl_to_string(b),hl_type_str(b->t));
-#endif
 	return hl_invalid_comparison;
 }