(define KW_GetWidgetChildren (foreign-safe-lambda* scheme-object ((KW_Widget* widget)) "C_word lst = C_SCHEME_END_OF_LIST;\n" "C_word *p = C_alloc(C_SIZEOF_POINTER);\n" "unsigned int count;\n" "KW_Widget * const * children = KW_GetWidgetChildren(widget, &count);\n" "if (!count) {\n" " C_return(lst);\n" "}\n" "for (int i = 0; i < count; i++) {\n" " C_word *a = C_alloc(C_SIZEOF_PAIR);\n" " KW_Widget *child = children[i];\n" " C_a_i_address_to_pointer(&p, 0, (C_word) child);\n" " lst = C_a_pair(&a, *p, lst);\n" "}\n" "C_return(lst);")) (define (widget-children widget) (and-let* ((widget* (widget-pointer widget))) (let ((children* (KW_GetWidgetChildren widget*))) (map (cut hash-table-ref widget-table <>) children*))))