void srcpop(Datasrc* src) { if(src != NULL) { Datasrc* prev = src->prev; *src = *prev; freedatasrc(prev); } DUMPSRC(src,"<"); }
int checkfillvalue(Symbol* tvsym, Datalist* filler) { Datasrc* src = datalist2src(filler); int result; ASSERT(tvsym->objectclass == NC_VAR || tvsym->objectclass == NC_TYPE); if(tvsym->objectclass == NC_VAR) { if(tvsym->typ.dimset.ndims > 0) { result = checkarray(tvsym->typ.basetype,&tvsym->typ.dimset,0,src,tvsym,TOPLEVEL); } else result = checkfill(tvsym->typ.basetype,src,tvsym); } else /* NC_TYPE*/ result = checkfill(tvsym,src,tvsym); freedatasrc(src); return result; }
static void inferattributetype(Symbol* asym) { Datalist* datalist; Datasrc* src; nc_type nctype; ASSERT(asym->data != NULL); datalist = asym->data; if(datalist->length == 0) { /* Default for zero length attributes */ asym->typ.basetype = basetypefor(NC_CHAR); return; } src = datalist2src(datalist); nctype = inferattributetype1(src); freedatasrc(src); /* get the corresponding primitive type built-in symbol*/ /* special case for string*/ if(nctype == NC_STRING) asym->typ.basetype = basetypefor(NC_CHAR); else if(usingclassic) { /* If we are in classic mode, then restrict the inferred type to the classic types */ switch (nctype) { case NC_UBYTE: nctype = NC_SHORT; break; case NC_USHORT: case NC_UINT: case NC_INT64: case NC_UINT64: case NC_OPAQUE: case NC_ENUM: nctype = NC_INT; break; default: /* leave as is */ break; } asym->typ.basetype = basetypefor(nctype); } else asym->typ.basetype = basetypefor(nctype); }