summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-06-06 14:15:00 -0400
committerAdrian Thurston <thurston@complang.org>2015-06-06 14:15:00 -0400
commitc158a685a7bad2c4d06b4c160704b6913f5e70bf (patch)
tree5df6fc5983a0957b0acd327bf6516ccab69d2d56
parent5a5cf0547b01d3c95dfa00b8f36f93a5143e25a7 (diff)
downloadcolm-c158a685a7bad2c4d06b4c160704b6913f5e70bf.tar.gz
some nameing cleanup around list and list el
-rw-r--r--src/loadcolm.cc6
-rw-r--r--src/parser.cc6
-rw-r--r--src/parsetree.cc30
-rw-r--r--src/parsetree.h23
-rw-r--r--src/resolve.cc135
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: