| /* A toy re-implementation of CPython's object model. */ |
| |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "analyzer-decls.h" |
| |
| typedef struct base_obj base_obj; |
| typedef struct string_obj string_obj; |
| |
| struct base_obj |
| { |
| int ob_refcnt; |
| }; |
| |
| struct string_obj |
| { |
| base_obj str_base; |
| size_t str_len; |
| char str_buf[]; |
| }; |
| |
| base_obj *alloc_obj (const char *str) |
| { |
| size_t len = strlen (str); |
| base_obj *obj = (base_obj *)malloc (sizeof (string_obj) + len + 1); |
| if (!obj) |
| return NULL; |
| obj->ob_refcnt = 1; |
| string_obj *str_obj = (string_obj *)obj; |
| __analyzer_eval (str_obj->str_base.ob_refcnt == 1); /* { dg-warning "TRUE" } */ |
| return obj; |
| } |