mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-20 21:35:19 +00:00
Fix ast.clone_node
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user