diff options
author | Adrian Thurston <thurston@complang.org> | 2015-06-06 14:15:00 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-06-06 14:15:00 -0400 |
commit | c158a685a7bad2c4d06b4c160704b6913f5e70bf (patch) | |
tree | 5df6fc5983a0957b0acd327bf6516ccab69d2d56 /src | |
parent | 5a5cf0547b01d3c95dfa00b8f36f93a5143e25a7 (diff) | |
download | colm-c158a685a7bad2c4d06b4c160704b6913f5e70bf.tar.gz |
some nameing cleanup around list and list el
Diffstat (limited to 'src')
-rw-r--r-- | src/loadcolm.cc | 6 | ||||
-rw-r--r-- | src/parser.cc | 6 | ||||
-rw-r--r-- | src/parsetree.cc | 30 | ||||
-rw-r--r-- | src/parsetree.h | 23 | ||||
-rw-r--r-- | src/resolve.cc | 135 |
5 files changed, 42 insertions, 158 deletions
diff --git a/src/loadcolm.cc b/src/loadcolm.cc index b62069a6..6071beea 100644 --- a/src/loadcolm.cc +++ b/src/loadcolm.cc @@ -850,7 +850,7 @@ struct LoadColm } TypeRef *elType = TypeRef::cons( typeRef.loc(), emptyNspaceQual(), name ); - return TypeRef::cons( typeRef.loc(), TypeRef::ValueList, 0, elType, valType ); + return TypeRef::cons( typeRef.loc(), TypeRef::List, 0, elType, valType ); } TypeRef *walkListEl( type_ref typeRef ) @@ -909,8 +909,8 @@ struct LoadColm } TypeRef *elType = TypeRef::cons( typeRef.loc(), emptyNspaceQual(), name ); - return TypeRef::cons( typeRef.loc(), TypeRef::ValueMap, - 0, keyType, elType, valType ); + + return TypeRef::cons( typeRef.loc(), TypeRef::Map, 0, keyType, elType, valType ); } TypeRef *walkMapEl( type_ref typeRef ) diff --git a/src/parser.cc b/src/parser.cc index 21e7652b..5d4775aa 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -57,7 +57,7 @@ void BaseParser::listElDef( String name ) String id = curStruct()->objectDef->name; RepeatType repeatType = RepeatNone; TypeRef *objTr = TypeRef::cons( InputLoc(), nspaceQual, id, repeatType ); - TypeRef *elTr = TypeRef::cons( InputLoc(), TypeRef::ListEl, 0, objTr, 0 ); + TypeRef *elTr = TypeRef::cons( InputLoc(), TypeRef::ListPtrs, 0, objTr, 0 ); ObjectField *of = ObjectField::cons( InputLoc(), ObjectField::GenericElementType, elTr, name ); @@ -88,7 +88,7 @@ void BaseParser::mapElDef( String name, TypeRef *keyType ) NamespaceQual *nspaceQual = NamespaceQual::cons( curNspace() ); String id = curStruct()->objectDef->name; TypeRef *objTr = TypeRef::cons( InputLoc(), nspaceQual, id, RepeatNone ); - TypeRef *elTr = TypeRef::cons( InputLoc(), TypeRef::MapEl, 0, objTr, keyType ); + TypeRef *elTr = TypeRef::cons( InputLoc(), TypeRef::MapPtrs, 0, objTr, keyType ); ObjectField *of = ObjectField::cons( InputLoc(), ObjectField::GenericElementType, elTr, name ); @@ -452,7 +452,7 @@ void BaseParser::addArgvList() emptyNspaceQual(), name ); pd->argvTypeRef = TypeRef::cons( internal, - TypeRef::ValueList, 0, elType, valType ); + TypeRef::List, 0, elType, valType ); } ObjectDef *BaseParser::blockOpen() diff --git a/src/parsetree.cc b/src/parsetree.cc index 52b61776..6f6758de 100644 --- a/src/parsetree.cc +++ b/src/parsetree.cc @@ -57,24 +57,18 @@ string TypeRef::stringify() case Iterator: s = "iterator"; break; -// case List: -// s = "list"; -// break; - case ValueList: - s = "vlist"; + case List: + s = "list"; break; -// case ListEl: -// s = "listel"; -// break; -// case Map: -// s = "map"; -// break; - case ValueMap: - s = "vmap"; + case ListPtrs: + s = "list_ptrs"; + break; + case Map: + s = "map"; + break; + case MapPtrs: + s = "map_ptrs"; break; -// case MapEl: -// s = "mapel"; -// break; case Parser: s = "parser"; break; @@ -219,12 +213,12 @@ int CmpUniqueGeneric::compare( const UniqueGeneric &ut1, const UniqueGeneric &ut else { switch ( ut1.type ) { case UniqueGeneric::List: - case UniqueGeneric::ListEl: + case UniqueGeneric::ListPtrs: case UniqueGeneric::Parser: break; case UniqueGeneric::Map: - case UniqueGeneric::MapEl: + case UniqueGeneric::MapPtrs: if ( ut1.key < ut2.key ) return -1; else if ( ut1.key > ut2.key ) diff --git a/src/parsetree.h b/src/parsetree.h index fec20ffc..dece2439 100644 --- a/src/parsetree.h +++ b/src/parsetree.h @@ -1954,9 +1954,9 @@ struct UniqueGeneric enum Type { List, - ListEl, + ListPtrs, Map, - MapEl, + MapPtrs, Parser }; @@ -1998,10 +1998,10 @@ struct TypeRef Name, Literal, Iterator, - ValueList, - ListEl, - ValueMap, - MapEl, + List, + ListPtrs, + Map, + MapPtrs, Parser, Ref }; @@ -2185,20 +2185,13 @@ struct TypeRef UniqueType *resolveIterator( Compiler *pd ); UniqueType *resolveTypeName( Compiler *pd ); UniqueType *resolveTypeLiteral( Compiler *pd ); - UniqueType *resolveTypeListObj( Compiler *pd ); UniqueType *resolveTypeList( Compiler *pd ); - UniqueType *resolveTypeListElObj( Compiler *pd ); - UniqueType *resolveTypeListEl( Compiler *pd ); - UniqueType *resolveTypeMapObj( Compiler *pd ); + UniqueType *resolveTypeListPtrs( Compiler *pd ); UniqueType *resolveTypeMap( Compiler *pd ); - UniqueType *resolveTypeMapElObj( Compiler *pd ); - UniqueType *resolveTypeMapEl( Compiler *pd ); - UniqueType *resolveTypeParserObj( Compiler *pd ); + UniqueType *resolveTypeMapPtrs( Compiler *pd ); UniqueType *resolveTypeParser( Compiler *pd ); UniqueType *resolveType( Compiler *pd ); UniqueType *resolveTypeRef( Compiler *pd ); - UniqueType *resolveTypeValueList( Compiler *pd ); - UniqueType *resolveTypeValueMap( Compiler *pd ); Type type; InputLoc loc; diff --git a/src/resolve.cc b/src/resolve.cc index 7dd69b31..947231e2 100644 --- a/src/resolve.cc +++ b/src/resolve.cc @@ -114,7 +114,6 @@ UniqueType *TypeRef::resolveTypeLiteral( Compiler *pd ) return 0; } -#if 0 UniqueType *TypeRef::resolveTypeList( Compiler *pd ) { nspace = pd->rootNamespace; @@ -149,8 +148,8 @@ UniqueType *TypeRef::resolveTypeList( Compiler *pd ) inMap = new UniqueGeneric( searchKey ); pd->uniqueGenericMap.insert( inMap ); - GenericType *generic = new GenericType( GEN_LIST, - pd->nextGenericId++, typeRef1, 0, 0, listEl ); + GenericType *generic = new GenericType( GEN_VLIST, + pd->nextGenericId++, typeRef1, 0, typeRef2, listEl ); nspace->genericList.append( generic ); @@ -162,15 +161,15 @@ UniqueType *TypeRef::resolveTypeList( Compiler *pd ) generic = inMap->generic; return pd->findUniqueType( TYPE_GENERIC, inMap->generic ); } -#endif -UniqueType *TypeRef::resolveTypeListEl( Compiler *pd ) + +UniqueType *TypeRef::resolveTypeListPtrs( Compiler *pd ) { nspace = pd->rootNamespace; UniqueType *utValue = typeRef1->resolveType( pd ); - UniqueGeneric searchKey( UniqueGeneric::ListEl, utValue ); + UniqueGeneric searchKey( UniqueGeneric::ListPtrs, utValue ); UniqueGeneric *inMap = pd->uniqueGenericMap.find( &searchKey ); if ( inMap == 0 ) { inMap = new UniqueGeneric( searchKey ); @@ -190,61 +189,13 @@ UniqueType *TypeRef::resolveTypeListEl( Compiler *pd ) return pd->findUniqueType( TYPE_GENERIC, inMap->generic ); } -#if 0 -UniqueType *TypeRef::resolveTypeMap( Compiler *pd ) -{ - nspace = pd->rootNamespace; - - UniqueType *utKey = typeRef1->resolveType( pd ); - UniqueType *utEl = typeRef2->resolveType( pd ); - - if ( utEl->typeId != TYPE_STRUCT ) - error( loc ) << "only structs can be map elements" << endp; - - /* Find the list element. */ - ObjectField *mapEl = 0; - FieldList *fieldList = utEl->structEl->structDef->objectDef->fieldList; - for ( FieldList::Iter f = *fieldList; f.lte(); f++ ) { - UniqueType *fUT = f->value->typeRef->resolveType( pd ); - if ( fUT->typeId == TYPE_GENERIC && fUT->generic != 0 && - fUT->generic->typeId == GEN_MAP_EL ) - { - mapEl = f->value; - break; - } - } - - if ( !mapEl ) - error( loc ) << "could not find list element in type ref" << endp; - - UniqueGeneric searchKey( UniqueGeneric::Map, utKey, utEl ); - UniqueGeneric *inMap = pd->uniqueGenericMap.find( &searchKey ); - if ( inMap == 0 ) { - inMap = new UniqueGeneric( searchKey ); - pd->uniqueGenericMap.insert( inMap ); - - GenericType *generic = new GenericType( GEN_MAP, - pd->nextGenericId++, typeRef2, typeRef1, 0, mapEl ); - - nspace->genericList.append( generic ); - - generic->declare( pd, nspace ); - - inMap->generic = generic; - } - - generic = inMap->generic; - return pd->findUniqueType( TYPE_GENERIC, inMap->generic ); -} -#endif - -UniqueType *TypeRef::resolveTypeMapEl( Compiler *pd ) +UniqueType *TypeRef::resolveTypeMapPtrs( Compiler *pd ) { nspace = pd->rootNamespace; UniqueType *utValue = typeRef1->resolveType( pd ); - UniqueGeneric searchKey( UniqueGeneric::MapEl, utValue ); + UniqueGeneric searchKey( UniqueGeneric::MapPtrs, utValue ); UniqueGeneric *inMap = pd->uniqueGenericMap.find( &searchKey ); if ( inMap == 0 ) { inMap = new UniqueGeneric( searchKey ); @@ -264,55 +215,7 @@ UniqueType *TypeRef::resolveTypeMapEl( Compiler *pd ) return pd->findUniqueType( TYPE_GENERIC, inMap->generic ); } -UniqueType *TypeRef::resolveTypeValueList( Compiler *pd ) -{ - nspace = pd->rootNamespace; - - UniqueType *utValue = typeRef1->resolveType( pd ); - - if ( utValue->typeId != TYPE_STRUCT ) - error( loc ) << "only structs can be list elements" << endp; - - /* Find the offset of the list element. */ - int off = 0; - ObjectField *listEl = 0; - FieldList *fieldList = utValue->structEl->structDef->objectDef->fieldList; - for ( FieldList::Iter f = *fieldList; f.lte(); f++, off++ ) { - 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; - } - } - } - - if ( !listEl ) - error( loc ) << "could not find list element in type ref" << endp; - - UniqueGeneric searchKey( UniqueGeneric::List, utValue ); - UniqueGeneric *inMap = pd->uniqueGenericMap.find( &searchKey ); - if ( inMap == 0 ) { - inMap = new UniqueGeneric( searchKey ); - pd->uniqueGenericMap.insert( inMap ); - - GenericType *generic = new GenericType( GEN_VLIST, - pd->nextGenericId++, typeRef1, 0, typeRef2, listEl ); - - nspace->genericList.append( generic ); - - generic->declare( pd, nspace ); - - inMap->generic = generic; - } - - generic = inMap->generic; - return pd->findUniqueType( TYPE_GENERIC, inMap->generic ); -} - -UniqueType *TypeRef::resolveTypeValueMap( Compiler *pd ) +UniqueType *TypeRef::resolveTypeMap( Compiler *pd ) { nspace = pd->rootNamespace; @@ -478,17 +381,11 @@ UniqueType *TypeRef::resolveType( Compiler *pd ) case Literal: uniqueType = resolveTypeLiteral( pd ); break; -// case List: -// uniqueType = resolveTypeList( pd ); -// break; - case ListEl: - uniqueType = resolveTypeListEl( pd ); + case ListPtrs: + uniqueType = resolveTypeListPtrs( pd ); break; -// case Map: -// uniqueType = resolveTypeMap( pd ); -// break; - case MapEl: - uniqueType = resolveTypeMapEl( pd ); + case MapPtrs: + uniqueType = resolveTypeMapPtrs( pd ); break; case Parser: uniqueType = resolveTypeParser( pd ); @@ -499,11 +396,11 @@ UniqueType *TypeRef::resolveType( Compiler *pd ) case Iterator: uniqueType = resolveIterator( pd ); break; - case ValueList: - uniqueType = resolveTypeValueList( pd ); + case List: + uniqueType = resolveTypeList( pd ); break; - case ValueMap: - uniqueType = resolveTypeValueMap( pd ); + case Map: + uniqueType = resolveTypeMap( pd ); break; case Unspecified: |