char* dumpsegments(NClist* segments) { int i; NCbytes* buf = ncbytesnew(); char* sstring; if(nclistlength(segments) == 0) return nulldup(""); for(i=0;i<nclistlength(segments);i++) { NCsegment* seg = (NCsegment*)nclistget(segments,i); ncbytescat(buf,dumpsegment(seg)); } sstring = ncbytesdup(buf); ncbytesfree(buf); return sstring; }
Object segment(DCEparsestate* state, Object name, Object slices0) { int i; DCEsegment* segment = (DCEsegment*)dcecreate(CES_SEGMENT); NClist* slices = (NClist*)slices0; segment->name = strdup((char*)name); if(slices != NULL && nclistlength(slices) > 0) { segment->slicesdefined = 1; /* but not declsizes */ for(i=0;i<nclistlength(slices);i++) { DCEslice* slice = (DCEslice*)nclistget(slices,i); segment->slices[i] = *slice; free(slice); } nclistfree(slices); } else segment->slicesdefined = 0; #ifdef DEBUG fprintf(stderr," ce.segment: %s\n", dumpsegment(segment)); #endif return segment; }