refactored parameterization support
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1102 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_value.c b/libasn1parser/asn1p_value.c
index 2242e3f..6686e49 100644
--- a/libasn1parser/asn1p_value.c
+++ b/libasn1parser/asn1p_value.c
@@ -110,6 +110,13 @@
asn1p_value_t *
asn1p_value_clone(asn1p_value_t *v) {
+ return asn1p_value_clone_with_resolver(v, 0, 0);
+}
+
+asn1p_value_t *
+asn1p_value_clone_with_resolver(asn1p_value_t *v,
+ asn1p_value_t *(*resolver)(asn1p_value_t *, void *rarg),
+ void *rarg) {
asn1p_value_t *clone = NULL;
if(v) {
switch(v->type) {
@@ -142,6 +149,11 @@
return asn1p_value_frombits(v->value.binary_vector.bits,
v->value.binary_vector.size_in_bits, 1);
case ATV_REFERENCED:
+ if(resolver) {
+ clone = resolver(v, rarg);
+ if(clone) return clone;
+ else if(errno != ESRCH) return NULL;
+ }
return asn1p_value_fromref(v->value.reference, 1);
case ATV_CHOICE_IDENTIFIER: {
char *id = v->value.choice_identifier.identifier;