case SIMPLE_HASH()

in contrib/elftoolchain/libelftc/libelftc_dem_gnu3.c [1500:1666]


	case SIMPLE_HASH('G', 'V'):
		/* sentry object for 1 time init */
		if (!DEM_PUSH_STR(ddata, "guard variable for "))
			return (0);
		ddata->cur += 2;
		break;

	case SIMPLE_HASH('T', 'c'):
		/* virtual function covariant override thunk */
		if (!DEM_PUSH_STR(ddata,
		    "virtual function covariant override "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		if (!cpp_demangle_read_offset(ddata))
			return (0);
		if (!cpp_demangle_read_offset(ddata))
			return (0);
		return (cpp_demangle_read_encoding(ddata));

	case SIMPLE_HASH('T', 'C'):
		/* construction vtable */
		if (!DEM_PUSH_STR(ddata, "construction vtable for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		if (!cpp_demangle_read_type_flat(ddata, &type))
			return (0);
		rtn = 0;
		if (!cpp_demangle_read_number(ddata, &offset))
			goto clean3;
		if (*ddata->cur++ != '_')
			goto clean3;
		if (!cpp_demangle_read_type(ddata, NULL))
			goto clean3;
		if (!DEM_PUSH_STR(ddata, "-in-"))
			goto clean3;
		if (!DEM_PUSH_STR(ddata, type))
			goto clean3;
		rtn = 1;
	clean3:
		free(type);
		return (rtn);

	case SIMPLE_HASH('T', 'D'):
		/* typeinfo common proxy */
		break;

	case SIMPLE_HASH('T', 'F'):
		/* typeinfo fn */
		if (!DEM_PUSH_STR(ddata, "typeinfo fn for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'h'):
		/* virtual function non-virtual override thunk */
		if (!DEM_PUSH_STR(ddata,
		    "virtual function non-virtual override "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		if (!cpp_demangle_read_nv_offset(ddata))
			return (0);
		return (cpp_demangle_read_encoding(ddata));

	case SIMPLE_HASH('T', 'H'):
		/* TLS init function */
		if (!DEM_PUSH_STR(ddata, "TLS init function for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		break;

	case SIMPLE_HASH('T', 'I'):
		/* typeinfo structure */
		if (!DEM_PUSH_STR(ddata, "typeinfo for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'J'):
		/* java class */
		if (!DEM_PUSH_STR(ddata, "java Class for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'S'):
		/* RTTI name (NTBS) */
		if (!DEM_PUSH_STR(ddata, "typeinfo name for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'T'):
		/* VTT table */
		if (!DEM_PUSH_STR(ddata, "VTT for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'v'):
		/* virtual function virtual override thunk */
		if (!DEM_PUSH_STR(ddata, "virtual function virtual override "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		if (!cpp_demangle_read_v_offset(ddata))
			return (0);
		return (cpp_demangle_read_encoding(ddata));

	case SIMPLE_HASH('T', 'V'):
		/* virtual table */
		if (!DEM_PUSH_STR(ddata, "vtable for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		return (cpp_demangle_read_type(ddata, NULL));

	case SIMPLE_HASH('T', 'W'):
		/* TLS wrapper function */
		if (!DEM_PUSH_STR(ddata, "TLS wrapper function for "))
			return (0);
		ddata->cur += 2;
		if (*ddata->cur == '\0')
			return (0);
		break;
	}

	return (cpp_demangle_read_name(ddata));
}

static int
cpp_demangle_read_local_name(struct cpp_demangle_data *ddata)
{
	struct vector_str local_name;
	struct type_delimit td;
	size_t limit;
	bool  more_type;

	if (ddata == NULL)
		return (0);
	if (*(++ddata->cur) == '\0')
		return (0);

	if (!vector_str_init(&local_name))
		return (0);
	ddata->cur_output = &local_name;

	if (!cpp_demangle_read_encoding(ddata)) {