- assert(elem->which == Z_AttributeValue_numeric);
- setMember(hv2, "attributeValue",
- newSViv(*elem->value.numeric));
+ if (elem->which == Z_AttributeValue_numeric) {
+ setMember(hv2, "attributeValue",
+ newSViv(*elem->value.numeric));
+ } else {
+ assert(elem->which == Z_AttributeValue_complex);
+ Z_ComplexAttribute *complex = elem->value.complex;
+ Z_StringOrNumeric *son;
+ /* We ignore semantic actions and multiple values */
+ assert(complex->num_list > 0);
+ son = complex->list[0];
+ if (son->which == Z_StringOrNumeric_numeric) {
+ setMember(hv2, "attributeValue",
+ newSViv(*son->u.numeric));
+ } else { /*Z_StringOrNumeric_string*/
+ setMember(hv2, "attributeValue",
+ newSVpv(son->u.string, 0));
+ }
+ }