MCPcopy Create free account
hub / github.com/WheretIB/nullc / AreMembersAligned

Function AreMembersAligned

NULLC/Executor.cpp:91–124  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89};
90
91bool AreMembersAligned(ExternTypeInfo *lType, Linker *exLinker)
92{
93 bool aligned = 1;
94 unsigned int pos = 0;
95 //printf("checking class %s: ", exLinker->exSymbols.data + lType->offsetToName);
96 for(unsigned m = 0; m < lType->memberCount; m++)
97 {
98 ExternTypeInfo &memberType = exLinker->exTypes[exLinker->exTypeExtra[lType->memberOffset + m]];
99 unsigned int alignment = memberType.defaultAlign > 4 ? 4 : memberType.defaultAlign;
100 if(alignment && pos % alignment != 0)
101 pos += alignment - (pos % alignment);
102 //printf("member %s; ", exLinker->exSymbols.data + memberType.offsetToName);
103 switch(memberType.type)
104 {
105 case ExternTypeInfo::TYPE_CHAR:
106 break;
107 case ExternTypeInfo::TYPE_SHORT:
108 if(pos % 2 != 0)
109 aligned = 0;
110 break;
111 case ExternTypeInfo::TYPE_INT:
112 if(pos % 4 != 0)
113 aligned = 0;
114 break;
115 case ExternTypeInfo::TYPE_LONG:
116 if(pos % 8 != 0)
117 aligned = 0;
118 break;
119 }
120 pos += memberType.size;
121 }
122 //printf("%s\n", aligned ? "aligned" : "unaligned");
123 return aligned;
124}
125
126unsigned int Executor::CreateFunctionGateway(FastVector<unsigned char>& code, unsigned int funcID)
127{

Callers 1

Executor.cppFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected