summaryrefslogtreecommitdiff
path: root/src/resolve.cc
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-18 09:18:52 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-18 09:19:11 -0500
commitbe3e5bf912deb2cbc2aca6228091dbb615d17ce6 (patch)
treeadf19f6ecf862ff9f1800b76a04b1f0571054d6b /src/resolve.cc
parentd0e845b0e960762d4382195384a34ef3229699a1 (diff)
downloadcolm-be3e5bf912deb2cbc2aca6228091dbb615d17ce6.tar.gz
support recursive list elements references
The search for list_el invoked a recursive evaluation of the types.
Diffstat (limited to 'src/resolve.cc')
-rw-r--r--src/resolve.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/resolve.cc b/src/resolve.cc
index c6f45076..e1d9dba5 100644
--- a/src/resolve.cc
+++ b/src/resolve.cc
@@ -111,12 +111,14 @@ UniqueType *TypeRef::resolveTypeList( Compiler *pd )
ObjectField *listEl = 0;
FieldList *fieldList = utValue->structEl->structDef->objectDef->fieldList;
for ( FieldList::Iter f = *fieldList; f.lte(); f++, off++ ) {
- UniqueType *fUT = f->value->typeRef->resolveType( pd );
- if ( fUT->typeId == TYPE_GENERIC && fUT->generic != 0 &&
- fUT->generic->typeId == GEN_LIST_EL )
- {
- listEl = f->value;
- break;
+ if ( f->value->type == ObjectField::GenericElementType ) {
+ UniqueType *fUT = f->value->typeRef->resolveType( pd );
+ if ( fUT->typeId == TYPE_GENERIC && fUT->generic != 0 &&
+ fUT->generic->typeId == GEN_LIST_EL )
+ {
+ listEl = f->value;
+ break;
+ }
}
}