diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-09-26 10:41:52 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-09-26 10:41:52 +0000 |
| commit | 216490f27592d1f1c0dd74846c12b986a08e27bc (patch) | |
| tree | afac32e97887f88feae5f3c5da9ab440bebc203b /src/runtime | |
| parent | 2e2f74741ab494c4fa0898f6dcbbed86f790e710 (diff) | |
add gu_variant_close in libgu
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/c/gu/variant.c | 14 | ||||
| -rw-r--r-- | src/runtime/c/gu/variant.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/runtime/c/gu/variant.c b/src/runtime/c/gu/variant.c index 62fdb92c1..0a72eccdb 100644 --- a/src/runtime/c/gu/variant.c +++ b/src/runtime/c/gu/variant.c @@ -83,6 +83,20 @@ GuVariantInfo gu_variant_open(GuVariant variant) return info; } +GuVariant gu_variant_close(GuVariantInfo info) +{ + GuVariant variant; + + if (((size_t)info.tag) > GU_VARIANT_ALIGNMENT - 2) { + variant.p = (uintptr_t)info.data; + assert(gu_variant_tag(variant) == info.tag); + } else { + variant.p = ((uintptr_t)info.data) | (info.tag + 1); + } + + return variant; +} + int gu_variant_intval(GuVariant variant) { diff --git a/src/runtime/c/gu/variant.h b/src/runtime/c/gu/variant.h index ab1265ff1..91665279d 100644 --- a/src/runtime/c/gu/variant.h +++ b/src/runtime/c/gu/variant.h @@ -82,6 +82,7 @@ struct GuVariantInfo { }; GuVariantInfo gu_variant_open(GuVariant variant); +GuVariant gu_variant_close(GuVariantInfo info); /** @privatesection */ struct GuVariant { |
