void cpp_mangle_name(OutBuffer *buf, CppMangleState *cms, Dsymbol *s) { Dsymbol *p = s->toParent(); if (p && !p->isModule()) { buf->writeByte('N'); FuncDeclaration *fd = s->isFuncDeclaration(); VarDeclaration *vd = s->isVarDeclaration(); if (fd && fd->type->isConst()) { buf->writeByte('K'); } if (vd && !(vd->storage_class & (STCextern | STCgshared))) { s->error("C++ static non- __gshared non-extern variables not supported"); } if (vd || fd) { prefix_name(buf, cms, p); source_name(buf, s); } else { assert(0); } buf->writeByte('E'); } else source_name(buf, s); }
void mangle_variable(VarDeclaration *d, bool is_temp_arg_ref) { if (!(d->storage_class & (STCextern | STCgshared))) { d->error("ICE: C++ static non- __gshared non-extern variables not supported"); assert(0); } Dsymbol *p = d->toParent(); if (p && !p->isModule()) //for example: char Namespace1::beta[6] should be mangled as "_ZN10Namespace14betaE" { buf.writestring(global.params.isOSX ? "__ZN" : "_ZN"); // "__Z" for OSX, "_Z" for other prefix_name(p); source_name(d); buf.writeByte('E'); } else //char beta[6] should mangle as "beta" { if (!is_temp_arg_ref) { if (global.params.isOSX) buf.writeByte('_'); buf.writestring(d->ident->toChars()); } else { buf.writestring(global.params.isOSX ? "__Z" : "_Z"); source_name(d); } } }
void prefix_name(Dsymbol *s) { if (!substitute(s)) { store(s); Dsymbol *p = s->toParent(); if (p && p->isTemplateInstance()) { s = p; if (exist(p->isTemplateInstance()->tempdecl)) { p = NULL; } else { p = p->toParent(); } } if (p && !p->isModule()) { prefix_name(p); } source_name(s); } }
static tree get_emutls_object_name (tree name) { const char *prefix = (targetm.emutls.var_prefix ? targetm.emutls.var_prefix : "__emutls_v" EMUTLS_SEPARATOR); return prefix_name (prefix, name); }
void prefix_name(Dsymbol *s) { if (substitute(s)) return; Dsymbol *p = s->toParent(); if (p && !p->isModule()) prefix_name(p); source_name(s); store(s); }
void prefix_name(OutBuffer *buf, CppMangleState *cms, Dsymbol *s) { if (!cms->substitute(buf, s)) { Dsymbol *p = s->toParent(); if (p && !p->isModule()) { prefix_name(buf, cms, p); } source_name(buf, s); } }
void cpp_mangle_name(OutBuffer *buf, CppMangleState *cms, Dsymbol *s) { Dsymbol *p = s->toParent(); if (p && !p->isModule()) { buf->writeByte('N'); FuncDeclaration *fd = s->isFuncDeclaration(); if (fd->isConst()) buf->writeByte('K'); prefix_name(buf, cms, p); source_name(buf, s); buf->writeByte('E'); } else source_name(buf, s); }
void mangle_function(FuncDeclaration *d) { /* * <mangled-name> ::= _Z <encoding> * <encoding> ::= <function name> <bare-function-type> * ::= <data name> * ::= <special-name> */ TypeFunction *tf = (TypeFunction *)d->type; buf.writestring(global.params.isOSX ? "__Z" : "_Z"); // "__Z" for OSX, "_Z" for other Dsymbol *p = d->toParent(); if (p && !p->isModule() && tf->linkage == LINKcpp) { buf.writeByte('N'); if (d->type->isConst()) buf.writeByte('K'); prefix_name(p); if (d->isDtorDeclaration()) { buf.writestring("D1"); } else { source_name(d); } buf.writeByte('E'); } else { source_name(d); } if (tf->linkage == LINKcpp) //Template args accept extern "C" symbols with special mangling { assert(tf->ty == Tfunction); argsCppMangle(tf->parameters, tf->varargs); } }
void cpp_mangle_name(Dsymbol *s) { Dsymbol *p = s->toParent(); bool dont_write_prefix = false; if (p && p->isTemplateInstance()) { s = p; if (exist(p->isTemplateInstance()->tempdecl)) dont_write_prefix = true; p = p->toParent(); } if (p && !p->isModule()) { buf.writeByte('N'); if (!dont_write_prefix) prefix_name(p); source_name(s); buf.writeByte('E'); } else source_name(s); }
void cpp_mangle_name(OutBuffer *buf, CppMangleState *cms, Dsymbol *s) { Dsymbol *p = s->toParent(); if (p && !p->isModule()) { buf->writeByte('N'); FuncDeclaration *fd = s->isFuncDeclaration(); if (!fd) { s->error("C++ static variables not supported"); } else if (fd->type->isConst()) buf->writeByte('K'); prefix_name(buf, cms, p); source_name(buf, s); buf->writeByte('E'); } else source_name(buf, s); }
static void probe_devices(snd_pcm_stream_t stream, vector_DevMap *DeviceList) { const char *main_prefix = "plughw:"; snd_ctl_t *handle; snd_ctl_card_info_t *info; snd_pcm_info_t *pcminfo; int card, err, dev; DevMap entry; clear_devlist(DeviceList); snd_ctl_card_info_malloc(&info); snd_pcm_info_malloc(&pcminfo); AL_STRING_INIT(entry.name); AL_STRING_INIT(entry.device_name); al_string_copy_cstr(&entry.name, alsaDevice); al_string_copy_cstr(&entry.device_name, GetConfigValue(NULL, "alsa", (stream==SND_PCM_STREAM_PLAYBACK) ? "device" : "capture", "default")); VECTOR_PUSH_BACK(*DeviceList, entry); card = -1; if((err=snd_card_next(&card)) < 0) ERR("Failed to find a card: %s\n", snd_strerror(err)); ConfigValueStr(NULL, "alsa", prefix_name(stream), &main_prefix); while(card >= 0) { const char *card_prefix = main_prefix; const char *cardname, *cardid; char name[256]; snprintf(name, sizeof(name), "hw:%d", card); if((err = snd_ctl_open(&handle, name, 0)) < 0) { ERR("control open (hw:%d): %s\n", card, snd_strerror(err)); goto next_card; } if((err = snd_ctl_card_info(handle, info)) < 0) { ERR("control hardware info (hw:%d): %s\n", card, snd_strerror(err)); snd_ctl_close(handle); goto next_card; } cardname = snd_ctl_card_info_get_name(info); cardid = snd_ctl_card_info_get_id(info); snprintf(name, sizeof(name), "%s-%s", prefix_name(stream), cardid); ConfigValueStr(NULL, "alsa", name, &card_prefix); dev = -1; while(1) { const char *device_prefix = card_prefix; const char *devname; char device[128]; if(snd_ctl_pcm_next_device(handle, &dev) < 0) ERR("snd_ctl_pcm_next_device failed\n"); if(dev < 0) break; snd_pcm_info_set_device(pcminfo, dev); snd_pcm_info_set_subdevice(pcminfo, 0); snd_pcm_info_set_stream(pcminfo, stream); if((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) { if(err != -ENOENT) ERR("control digital audio info (hw:%d): %s\n", card, snd_strerror(err)); continue; } devname = snd_pcm_info_get_name(pcminfo); snprintf(name, sizeof(name), "%s-%s-%d", prefix_name(stream), cardid, dev); ConfigValueStr(NULL, "alsa", name, &device_prefix); snprintf(name, sizeof(name), "%s, %s (CARD=%s,DEV=%d)", cardname, devname, cardid, dev); snprintf(device, sizeof(device), "%sCARD=%s,DEV=%d", device_prefix, cardid, dev); TRACE("Got device \"%s\", \"%s\"\n", name, device); AL_STRING_INIT(entry.name); AL_STRING_INIT(entry.device_name); al_string_copy_cstr(&entry.name, name); al_string_copy_cstr(&entry.device_name, device); VECTOR_PUSH_BACK(*DeviceList, entry); } snd_ctl_close(handle); next_card: if(snd_card_next(&card) < 0) { ERR("snd_card_next failed\n"); break; } } snd_pcm_info_free(pcminfo); snd_ctl_card_info_free(info); }
static DevMap *probe_devices(snd_pcm_stream_t stream, ALuint *count) { const char *main_prefix = "plughw:"; snd_ctl_t *handle; int card, err, dev, idx; snd_ctl_card_info_t *info; snd_pcm_info_t *pcminfo; DevMap *DevList; snd_ctl_card_info_malloc(&info); snd_pcm_info_malloc(&pcminfo); DevList = malloc(sizeof(DevMap) * 1); DevList[0].name = strdup(alsaDevice); DevList[0].device = strdup(GetConfigValue("alsa", (stream==SND_PCM_STREAM_PLAYBACK) ? "device" : "capture", "default")); idx = 1; card = -1; if((err=snd_card_next(&card)) < 0) ERR("Failed to find a card: %s\n", snd_strerror(err)); ConfigValueStr("alsa", prefix_name(stream), &main_prefix); while(card >= 0) { const char *card_prefix = main_prefix; const char *cardname, *cardid; char name[256]; snprintf(name, sizeof(name), "hw:%d", card); if((err = snd_ctl_open(&handle, name, 0)) < 0) { ERR("control open (hw:%d): %s\n", card, snd_strerror(err)); goto next_card; } if((err = snd_ctl_card_info(handle, info)) < 0) { ERR("control hardware info (hw:%d): %s\n", card, snd_strerror(err)); snd_ctl_close(handle); goto next_card; } cardname = snd_ctl_card_info_get_name(info); cardid = snd_ctl_card_info_get_id(info); snprintf(name, sizeof(name), "%s-%s", prefix_name(stream), cardid); ConfigValueStr("alsa", name, &card_prefix); dev = -1; while(1) { const char *devname; void *temp; if(snd_ctl_pcm_next_device(handle, &dev) < 0) ERR("snd_ctl_pcm_next_device failed\n"); if(dev < 0) break; snd_pcm_info_set_device(pcminfo, dev); snd_pcm_info_set_subdevice(pcminfo, 0); snd_pcm_info_set_stream(pcminfo, stream); if((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) { if(err != -ENOENT) ERR("control digital audio info (hw:%d): %s\n", card, snd_strerror(err)); continue; } temp = realloc(DevList, sizeof(DevMap) * (idx+1)); if(temp) { const char *device_prefix = card_prefix; char device[128]; DevList = temp; devname = snd_pcm_info_get_name(pcminfo); snprintf(name, sizeof(name), "%s-%s-%d", prefix_name(stream), cardid, dev); ConfigValueStr("alsa", name, &device_prefix); snprintf(name, sizeof(name), "%s, %s (CARD=%s,DEV=%d)", cardname, devname, cardid, dev); snprintf(device, sizeof(device), "%sCARD=%s,DEV=%d", device_prefix, cardid, dev); TRACE("Got device \"%s\", \"%s\"\n", name, device); DevList[idx].name = strdup(name); DevList[idx].device = strdup(device); idx++; } } snd_ctl_close(handle); next_card: if(snd_card_next(&card) < 0) { ERR("snd_card_next failed\n"); break; } } snd_pcm_info_free(pcminfo); snd_ctl_card_info_free(info); *count = idx; return DevList; }
pcluster read_cdfpart_cluster(int nc_file, const char *prefix) { pcluster t; uint *idx; size_t clusters, clusteridx; size_t coeffs, coeffidx; char dimname[NC_MAX_NAME + 1]; char *buf; int bufsize; int nc_sons, nc_size, nc_idx, nc_coeff; int nc_clusters, nc_coeffs, nc_totalsize, nc_dim; size_t dim, totalsize; int result; /* Prepare buffer for prefixed names */ bufsize = strlen(prefix) + 16; buf = (char *) allocmem(sizeof(char) * bufsize); /* Get "clusters" dimension */ prefix_name(buf, bufsize, prefix, "clusters"); result = nc_inq_dimid(nc_file, buf, &nc_clusters); assert(result == NC_NOERR); result = nc_inq_dim(nc_file, nc_clusters, dimname, &clusters); assert(result == NC_NOERR); /* Get "coeffs" dimension */ prefix_name(buf, bufsize, prefix, "coeffs"); result = nc_inq_dimid(nc_file, buf, &nc_coeffs); assert(result == NC_NOERR); result = nc_inq_dim(nc_file, nc_coeffs, dimname, &coeffs); assert(result == NC_NOERR); /* Get "totalsize" dimension */ prefix_name(buf, bufsize, prefix, "totalsize"); result = nc_inq_dimid(nc_file, buf, &nc_totalsize); assert(result == NC_NOERR); result = nc_inq_dim(nc_file, nc_totalsize, dimname, &totalsize); assert(result == NC_NOERR); /* Get "dim" dimension */ prefix_name(buf, bufsize, prefix, "dim"); result = nc_inq_dimid(nc_file, buf, &nc_dim); assert(result == NC_NOERR); result = nc_inq_dim(nc_file, nc_dim, dimname, &dim); assert(result == NC_NOERR); /* Get "sons" variable */ prefix_name(buf, bufsize, prefix, "sons"); result = nc_inq_varid(nc_file, buf, &nc_sons); assert(result == NC_NOERR); /* Get "size" variable */ prefix_name(buf, bufsize, prefix, "size"); result = nc_inq_varid(nc_file, buf, &nc_size); assert(result == NC_NOERR); /* Get "idx" variable */ prefix_name(buf, bufsize, prefix, "idx"); result = nc_inq_varid(nc_file, buf, &nc_idx); assert(result == NC_NOERR); /* Get "coeff" variable */ prefix_name(buf, bufsize, prefix, "coeff"); result = nc_inq_varid(nc_file, buf, &nc_coeff); assert(result == NC_NOERR); /* Read index */ idx = (uint *) allocmem(sizeof(uint) * totalsize); nc_get_var(nc_file, nc_idx, idx); /* Read coefficients from NetCDF variables */ clusteridx = 0; coeffidx = 0; t = read_cdf_part(nc_file, clusters, coeffs, nc_sons, nc_size, nc_coeff, idx, dim, &clusteridx, &coeffidx); assert(clusteridx == clusters); assert(coeffidx == coeffs); /* Clean up */ freemem(buf); return t; }
void write_cdfpart_cluster(pccluster t, int nc_file, const char *prefix) { size_t clusters, clusteridx; size_t coeffs, coeffidx; char *buf; int bufsize; int nc_sons, nc_size, nc_idx, nc_coeff; int nc_clusters, nc_coeffs, nc_totalsize, nc_dim; int result; /* Prepare buffer for prefixed names */ bufsize = strlen(prefix) + 16; buf = (char *) allocmem(sizeof(char) * bufsize); /* Count number of clusters and coefficients */ clusters = 0; coeffs = 0; write_count(t, &clusters, &coeffs); /* Switch NetCDF file to define mode */ result = nc_redef(nc_file); assert(result == NC_NOERR || result == NC_EINDEFINE); /* Define "clusters" dimension */ prefix_name(buf, bufsize, prefix, "clusters"); result = nc_def_dim(nc_file, buf, clusters, &nc_clusters); assert(result == NC_NOERR); /* Define "coeffs" dimension */ prefix_name(buf, bufsize, prefix, "coeffs"); result = nc_def_dim(nc_file, buf, coeffs, &nc_coeffs); assert(result == NC_NOERR); /* Define "totalsize" dimension */ prefix_name(buf, bufsize, prefix, "totalsize"); result = nc_def_dim(nc_file, buf, t->size, &nc_totalsize); assert(result == NC_NOERR); /* Define "dim" dimension */ prefix_name(buf, bufsize, prefix, "dim"); result = nc_def_dim(nc_file, buf, t->dim, &nc_dim); assert(result == NC_NOERR); /* Define "sons" variable */ prefix_name(buf, bufsize, prefix, "sons"); result = nc_def_var(nc_file, buf, NC_INT, 1, &nc_clusters, &nc_sons); assert(result == NC_NOERR); /* Define "size" variable */ prefix_name(buf, bufsize, prefix, "size"); result = nc_def_var(nc_file, buf, NC_INT, 1, &nc_clusters, &nc_size); assert(result == NC_NOERR); /* Define "idx" variable */ prefix_name(buf, bufsize, prefix, "idx"); result = nc_def_var(nc_file, buf, NC_INT, 1, &nc_totalsize, &nc_idx); assert(result == NC_NOERR); /* Define "coeff" variable */ prefix_name(buf, bufsize, prefix, "coeff"); result = nc_def_var(nc_file, buf, NC_DOUBLE, 1, &nc_coeffs, &nc_coeff); assert(result == NC_NOERR); /* Finish NetCDF define mode */ result = nc_enddef(nc_file); assert(result == NC_NOERR); /* Write index to NetCDF variable */ result = nc_put_var(nc_file, nc_idx, t->idx); /* Write coefficiencs to NetCDF variables */ clusteridx = 0; coeffidx = 0; write_cdf(t, clusters, coeffs, &clusteridx, &coeffidx, nc_file, nc_sons, nc_size, nc_coeff); assert(clusteridx == clusters); assert(coeffidx == coeffs); /* Clean up */ nc_sync(nc_file); freemem(buf); }