diff --git a/flecs.c b/flecs.c index 7dbf858a5..e51d42ca7 100644 --- a/flecs.c +++ b/flecs.c @@ -8062,6 +8062,8 @@ ecs_entity_t ecs_get_object( ecs_assert(world != NULL, ECS_INVALID_PARAMETER, NULL); ecs_assert(rel != 0, ECS_INVALID_PARAMETER, NULL); + world = ecs_get_world(world); + if (!entity) { return 0; } diff --git a/flecs.h b/flecs.h index 1590d8cdd..ad5b17fee 100644 --- a/flecs.h +++ b/flecs.h @@ -1924,14 +1924,14 @@ void ecs_os_set_api_defaults(void); #define ecs_os_alloca(size) alloca((size_t)(size)) #endif -#define ecs_os_malloc_t(T) (T*)(ecs_os_malloc(ECS_SIZEOF(T))) -#define ecs_os_malloc_n(T, count) (T*)(ecs_os_malloc(ECS_SIZEOF(T) * (count))) -#define ecs_os_calloc_t(T) (T*)(ecs_os_calloc(ECS_SIZEOF(T))) -#define ecs_os_calloc_n(T, count) (T*)(ecs_os_calloc(ECS_SIZEOF(T) * (count))) -#define ecs_os_realloc_t(ptr, T) (T*)(ecs_os_realloc([ptr, ECS_SIZEOF(T))) -#define ecs_os_realloc_n(ptr, T, count) (T*)(ecs_os_realloc(ptr, ECS_SIZEOF(T) * (count))) -#define ecs_os_alloca_t(T) (T*)(ecs_os_alloca(ECS_SIZEOF(T))) -#define ecs_os_alloca_n(T, count) (T*)(ecs_os_alloca(ECS_SIZEOF(T) * (count))) +#define ecs_os_malloc_t(T) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T))) +#define ecs_os_malloc_n(T, count) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T) * (count))) +#define ecs_os_calloc_t(T) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T))) +#define ecs_os_calloc_n(T, count) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T) * (count))) +#define ecs_os_realloc_t(ptr, T) ECS_CAST(T*, ecs_os_realloc([ptr, ECS_SIZEOF(T))) +#define ecs_os_realloc_n(ptr, T, count) ECS_CAST(T*, ecs_os_realloc(ptr, ECS_SIZEOF(T) * (count))) +#define ecs_os_alloca_t(T) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T))) +#define ecs_os_alloca_n(T, count) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T) * (count))) /* Strings */ #ifndef ecs_os_strdup diff --git a/include/flecs/os_api.h b/include/flecs/os_api.h index a24a7ce15..16c98e842 100644 --- a/include/flecs/os_api.h +++ b/include/flecs/os_api.h @@ -286,14 +286,14 @@ void ecs_os_set_api_defaults(void); #define ecs_os_alloca(size) alloca((size_t)(size)) #endif -#define ecs_os_malloc_t(T) (T*)(ecs_os_malloc(ECS_SIZEOF(T))) -#define ecs_os_malloc_n(T, count) (T*)(ecs_os_malloc(ECS_SIZEOF(T) * (count))) -#define ecs_os_calloc_t(T) (T*)(ecs_os_calloc(ECS_SIZEOF(T))) -#define ecs_os_calloc_n(T, count) (T*)(ecs_os_calloc(ECS_SIZEOF(T) * (count))) -#define ecs_os_realloc_t(ptr, T) (T*)(ecs_os_realloc([ptr, ECS_SIZEOF(T))) -#define ecs_os_realloc_n(ptr, T, count) (T*)(ecs_os_realloc(ptr, ECS_SIZEOF(T) * (count))) -#define ecs_os_alloca_t(T) (T*)(ecs_os_alloca(ECS_SIZEOF(T))) -#define ecs_os_alloca_n(T, count) (T*)(ecs_os_alloca(ECS_SIZEOF(T) * (count))) +#define ecs_os_malloc_t(T) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T))) +#define ecs_os_malloc_n(T, count) ECS_CAST(T*, ecs_os_malloc(ECS_SIZEOF(T) * (count))) +#define ecs_os_calloc_t(T) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T))) +#define ecs_os_calloc_n(T, count) ECS_CAST(T*, ecs_os_calloc(ECS_SIZEOF(T) * (count))) +#define ecs_os_realloc_t(ptr, T) ECS_CAST(T*, ecs_os_realloc([ptr, ECS_SIZEOF(T))) +#define ecs_os_realloc_n(ptr, T, count) ECS_CAST(T*, ecs_os_realloc(ptr, ECS_SIZEOF(T) * (count))) +#define ecs_os_alloca_t(T) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T))) +#define ecs_os_alloca_n(T, count) ECS_CAST(T*, ecs_os_alloca(ECS_SIZEOF(T) * (count))) /* Strings */ #ifndef ecs_os_strdup diff --git a/src/entity.c b/src/entity.c index 366df85e1..609bdd225 100644 --- a/src/entity.c +++ b/src/entity.c @@ -3380,6 +3380,8 @@ ecs_entity_t ecs_get_object( ecs_assert(world != NULL, ECS_INVALID_PARAMETER, NULL); ecs_assert(rel != 0, ECS_INVALID_PARAMETER, NULL); + world = ecs_get_world(world); + if (!entity) { return 0; } diff --git a/test/api/src/SingleThreadStaging.c b/test/api/src/SingleThreadStaging.c index 7e93df4df..8a6de5c1b 100644 --- a/test/api/src/SingleThreadStaging.c +++ b/test/api/src/SingleThreadStaging.c @@ -2948,5 +2948,22 @@ void SingleThreadStaging_get_case_from_stage() { } void SingleThreadStaging_get_object_from_stage() { - // Implement testcase + ecs_world_t *world = ecs_init(); + + ECS_TAG(world, CaseOne); + ECS_TAG(world, CaseTwo); + ECS_TYPE(world, Switch, CaseOne, CaseTwo); + + ecs_entity_t parent = ecs_new_id(world); + ecs_entity_t e = ecs_new_w_pair(world, EcsChildOf, parent); + + ecs_staging_begin(world); + + ecs_world_t *stage = ecs_get_stage(world, 0); + + test_assert(parent == ecs_get_object(stage, e, EcsChildOf, 0)); + + ecs_staging_end(world); + + ecs_fini(world); }