diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-18 09:18:52 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-18 09:19:11 -0500 |
commit | be3e5bf912deb2cbc2aca6228091dbb615d17ce6 (patch) | |
tree | adf19f6ecf862ff9f1800b76a04b1f0571054d6b /src/resolve.cc | |
parent | d0e845b0e960762d4382195384a34ef3229699a1 (diff) | |
download | colm-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.cc | 14 |
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; + } } } |