mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +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)^
|
src = (^rawptr)(&node.derived)^
|
||||||
}
|
}
|
||||||
mem.copy(res, src, size)
|
mem.copy(res, src, size)
|
||||||
res_any: any
|
res_ptr_any: any
|
||||||
res_any.data = res
|
res_ptr_any.data = &res
|
||||||
res_any.id = ti.id
|
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)
|
res_ptr := reflect.deref(res_ptr_any)
|
||||||
derived_stmt := reflect.struct_field_value_by_name(res_any, "derived_stmt", true)
|
|
||||||
reflect.set_union_value(res.derived, derived_expr)
|
if de := reflect.struct_field_value_by_name(res_ptr, "derived_expr", true); de != nil {
|
||||||
reflect.set_union_value(res.derived, derived_stmt)
|
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 {
|
if res.derived != nil do switch r in res.derived {
|
||||||
case ^Package, ^File:
|
case ^Package, ^File:
|
||||||
|
|||||||
Reference in New Issue
Block a user