From 71ba53eff27f49b10b6a8d5ba18d75975727760a Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 8 Sep 2006 01:57:16 +0000 Subject: [PATCH] more changes --- Robust/src/IR/Flat/BuildCode.java | 16 ++++++++++++++- Robust/src/Runtime/checkpoint.c | 33 ++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 8fe28732..76bcf10e 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -162,6 +162,7 @@ public class BuildCode { outmethod.println("#include \"checkers.h\""); } outclassdefs.println("extern int classsize[];"); + outclassdefs.println("extern int hasflags[];"); outclassdefs.println("extern int * pointerarray[];"); //Store the sizes of classes & array elements @@ -532,7 +533,7 @@ public class BuildCode { for(int i=0;i___length___; + int cpysize=sizeof(struct ArrayObject)+length*size; + memcpy(cpy, ptr, cpysize); + } else if ((int)pointer==1) { /* Array of pointers */ struct ArrayObject *ao=(struct ArrayObject *) ptr; + struct ArrayObject *ao_cpy=(struct ArrayObject *) cpy; int length=ao->___length___; int i; + int cpysize=sizeof(struct ArrayObject)+length*size; + memcpy(ao_cpy, ao, cpysize); + for(i=0;i___length___)+sizeof(int)))[i]; - RuntimeHashget(reverse, (int) objptr, (int *) &((void **)(((char *)& ao->___length___)+sizeof(int)))[i]); + RuntimeHashget(reverse, (int) objptr, (int *) &((void **)(((char *)& ao_cpy->___length___)+sizeof(int)))[i]); } } else { - int size=pointer[0]; + int numptr=pointer[0]; int i; - for(i=1;i<=size;i++) { + void *flagptr; + if (hasflags[type]) { + flagptr=(void *) (((int *)cpy)[2]); + } + memcpy(cpy, ptr, size); + for(i=1;i<=numptr;i++) { int offset=pointer[i]; void * objptr=*((void **)(((int)ptr)+offset)); RuntimeHashget(reverse, (int) objptr, (int *) &(((char *)cpy)[offset])); } + if (hasflags[type]) { + (((void **)cpy)[2])=flagptr; + flagorand(cpy, 1, 0xFFFFFFFF); + } } } } } - - -- 2.34.1