1999-09-16
1999-09-16 03:13:35 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
-
b1c80310c143642e23bf3c50a365f8f16f58212b
(31 lines)
(+20/-11)
[
Show
| Annotate
]
Branch: 7.9
bugfix (?)
Rev: src/program.c:1.141
5:
\*/
/**/
#include "global.h"
- RCSID("$Id: program.c,v 1.140 1999/09/16 00:03:22 hubbe Exp $");
+ RCSID("$Id: program.c,v 1.141 1999/09/16 03:13:35 hubbe Exp $");
#include "program.h"
#include "object.h"
#include "dynamic_buffer.h"
914: Inside #if defined(PIKE_DEBUG)
int q, num;
/* Variable */
int offset = INHERIT_FROM_INT(p, e)->storage_offset+i->func.offset;
- num=i->run_time_type==T_MIXED?sizeof(struct svalue):sizeof(union anything);
+ num=sizeof_variable(i->run_time_type);
for(q=0;q<num;q++)
{
if(offset+q >= NELEM(variable_positions)) break;
1058:
*/
SIZE_T low_add_storage(SIZE_T size, SIZE_T alignment, int modulo)
{
- SIZE_T offset;
+ long offset;
#ifdef PIKE_DEBUG
if(alignment <=0 || (alignment & (alignment-1)) || alignment > 256)
fatal("Alignment must be 1,2,4,8,16,32,64,128 or 256 not %d\n",alignment);
#endif
- offset=DO_ALIGN(OFFSETOF(object,storage)+
- new_program->storage_needed,
- alignment)+modulo-OFFSETOF(object,storage);
+ modulo+=OFFSETOF(object,storage);
+ modulo%=alignment;
-
+ offset=DO_ALIGN(new_program->storage_needed-modulo,alignment)+modulo;
+
if(!new_program->storage_needed)
new_program->inherits[0].storage_offset=offset;
if(new_program->alignment_needed<alignment)
new_program->alignment_needed=alignment;
- new_program->storage_needed = offset + size;
+
#ifdef PIKE_DEBUG
- if(new_program->storage_needed<0)
+ if(offset < new_program->storage_needed)
fatal("add_storage failed horribly!\n");
-
+
+ if( (offset + OFFSETOF(object,storage) - modulo ) % alignment )
+ fatal("add_storage failed horribly(2)!\n");
+
#endif
- return offset;
+
+ new_program->storage_needed = offset + size;
+
+ return (SIZE_T) offset;
}
1296:
inherit_offset = new_program->num_inherits;
/* alignment magic */
- storage_offset=p->inherits[0].storage_offset % p->alignment_needed;
+ storage_offset=(p->inherits[0].storage_offset + OFFSETOF(object,storage)) %
+ p->alignment_needed;
storage_offset=low_add_storage(p->storage_needed,
p->alignment_needed,
- storage_offset)-storage_offset;
+ storage_offset);
for(e=0; e<(int)p->num_inherits; e++)
{