diff --git a/src/hx/cppia/CppiaVars.cpp b/src/hx/cppia/CppiaVars.cpp index ad98ca47e..e97e82344 100644 --- a/src/hx/cppia/CppiaVars.cpp +++ b/src/hx/cppia/CppiaVars.cpp @@ -180,16 +180,9 @@ void CppiaVar::linkVarTypes(CppiaModule &cppia, int &ioOffset) AlignOffset(exprType, ioOffset); offset = ioOffset; - switch(exprType) - { - case etInt: ioOffset += sizeof(int); storeType=fsInt; break; - case etFloat: ioOffset += sizeof(Float);storeType=fsFloat; break; - case etString: ioOffset += sizeof(String);storeType=fsString; break; - case etObject: ioOffset += sizeof(hx::Object *);storeType=fsObject; break; - case etVoid: - case etNull: - break; - } + storeType = typeId==0 ? fsObject : fieldStorageFromType(type); + + ioOffset += sTypeSize[exprType]; } } diff --git a/test/cppia/Client.hx b/test/cppia/Client.hx index 710373f4b..41d951021 100644 --- a/test/cppia/Client.hx +++ b/test/cppia/Client.hx @@ -14,6 +14,15 @@ class ClientFoo implements IFoo { } } +class ClientBoolField { + + public var flag:Bool = true; + + public static var staticFlag:Bool = true; + + public function new() {} +} + class Client { public static var clientBool0 = true; diff --git a/test/cppia/cases/TestCommon.hx b/test/cppia/cases/TestCommon.hx index eaacb5a76..6623e4d04 100644 --- a/test/cppia/cases/TestCommon.hx +++ b/test/cppia/cases/TestCommon.hx @@ -59,6 +59,18 @@ class TestCommon extends Test { Assert.equals(2, Common.callbackSet, 'Bad cppia closure'); } + @:depends(testStatus) + function testBoolMemberStorage() { + final cls = Type.resolveClass('ClientBoolField'); + + if (Assert.notNull(cls, 'Unable to resolve ClientBoolField')) { + final obj = Type.createInstance(cls, []); + + Assert.same(Type.ValueType.TBool, Type.typeof(Reflect.field(obj, 'flag')), 'Member Bool did not read back as a boolean'); + Assert.same(Type.ValueType.TBool, Type.typeof(Reflect.field(cls, 'staticFlag')), 'Static Bool did not read back as a boolean'); + } + } + @:depends(testStatus) function testInterfaceCalling() { final obj : IFoo = Type.createInstance(Type.resolveClass('ClientFoo'), []);