gingerBill преди 3 години
родител
ревизия
913d802e33
променени са 1 файла, в които са добавени 12 реда и са изтрити 8 реда
  1. 12 8
      core/odin/ast/clone.odin

+ 12 - 8
core/odin/ast/clone.odin

@@ -88,16 +88,20 @@ clone_node :: proc(node: ^Node) -> ^Node {
 		src = (^rawptr)(&node.derived)^
 	}
 	mem.copy(res, src, size)
-	res_any: any
-	res_any.data = res
-	res_any.id = ti.id
+	res_ptr_any: any
+	res_ptr_any.data = &res
+	res_ptr_any.id = ti.id
 
-	reflect.set_union_value(res.derived, res_any)
+	reflect.set_union_value(res.derived, res_ptr_any)
 
-	derived_expr := reflect.struct_field_value_by_name(res_any, "derived_expr", true)
-	derived_stmt := reflect.struct_field_value_by_name(res_any, "derived_stmt", true)
-	reflect.set_union_value(res.derived, derived_expr)
-	reflect.set_union_value(res.derived, derived_stmt)
+	res_ptr := reflect.deref(res_ptr_any)
+
+	if de := reflect.struct_field_value_by_name(res_ptr, "derived_expr", true); de != nil {
+		reflect.set_union_value(de, res_ptr_any)
+	}
+	if ds := reflect.struct_field_value_by_name(res_ptr, "derived_stmt", true); ds != nil {
+		reflect.set_union_value(ds, res_ptr_any)
+	}
 
 	if res.derived != nil do switch r in res.derived {
 	case ^Package, ^File: