summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2011-06-22 02:37:47 +0000
committerAdrian Thurston <thurston@complang.org>2011-06-22 02:37:47 +0000
commit07e6ce6d8ecd4d16fe4aca157cbbe31369edb2af (patch)
tree3eebcee6fa2ce3c2669ab7cf8539db4ee3898f1f
parentfd3816edcfa104c890ae3b072a12a6d18f3a04c3 (diff)
downloadcolm-07e6ce6d8ecd4d16fe4aca157cbbe31369edb2af.tar.gz
More movement into the resolve pass.
-rw-r--r--colm/compile.cc6
-rw-r--r--colm/resolve.cc12
2 files changed, 13 insertions, 5 deletions
diff --git a/colm/compile.cc b/colm/compile.cc
index f674cea8..3a77b6e7 100644
--- a/colm/compile.cc
+++ b/colm/compile.cc
@@ -1469,7 +1469,7 @@ UniqueType *LangTerm::evaluate( ParseData *pd, CodeVect &code ) const
return evaluateNew( pd, code );
case TypeIdType: {
/* Evaluate the expression. */
- UniqueType *ut = typeRef->lookupType( pd );
+ UniqueType *ut = typeRef->uniqueType;//lookupType( pd );
if ( ut->typeId != TYPE_TREE )
error() << "typeid can only be applied to tree types" << endp;
@@ -1886,7 +1886,7 @@ void LangStmt::compileForIter( ParseData *pd, CodeVect &code ) const
iterCallTerm = chooseDefaultIter( pd, langTerm );
/* The type we are searching for. */
- UniqueType *searchUT = typeRef->lookupType( pd );
+ UniqueType *searchUT = typeRef->uniqueType;
/*
* Declare the iterator variable.
@@ -2886,7 +2886,7 @@ void ParseData::makeFuncVisible( Function *func, bool isUserIter )
long paramPos = 0, paramListSize = 0;
UniqueType **paramUTs = new UniqueType*[func->paramList->length()];
for ( ParameterList::Iter param = *func->paramList; param.lte(); param++ ) {
- paramUTs[paramPos] = param->typeRef->lookupType( this );
+ paramUTs[paramPos] = param->typeRef->uniqueType;
if ( func->localFrame->findField( param->name ) != 0 )
error(param->loc) << "parameter " << param->name << " redeclared" << endp;
diff --git a/colm/resolve.cc b/colm/resolve.cc
index 9592f569..b64ce871 100644
--- a/colm/resolve.cc
+++ b/colm/resolve.cc
@@ -133,12 +133,16 @@ void LangTerm::resolve( ParseData *pd ) const
break;
case VarRefType:
break;
+
+ case MakeTreeType:
+ case MakeTokenType:
case MethodCallType:
if ( args != 0 ) {
for ( ExprVect::Iter pe = *args; pe.lte(); pe++ )
(*pe)->resolve( pd );
}
break;
+
case NumberType:
case StringType:
case MatchType:
@@ -147,6 +151,7 @@ void LangTerm::resolve( ParseData *pd ) const
expr->resolve( pd );
break;
case TypeIdType:
+ typeRef->lookupType( pd );
break;
case SearchType:
typeRef->lookupType( pd );
@@ -162,8 +167,6 @@ void LangTerm::resolve( ParseData *pd ) const
typeRef->lookupType( pd );
break;
- case MakeTreeType:
- case MakeTokenType:
case EmbedStringType:
break;
}
@@ -262,6 +265,8 @@ void LangStmt::resolve( ParseData *pd ) const
break;
}
case ForIterType: {
+ typeRef->lookupType( pd );
+
/* Evaluate and push the arguments. */
langTerm->resolve( pd );
@@ -344,6 +349,9 @@ void ParseData::resolveParseTree()
if ( f->typeRef != 0 )
f->typeRef->lookupType( this );
+
+ for ( ParameterList::Iter param = *f->paramList; param.lte(); param++ )
+ param->typeRef->lookupType( this );
}
/* Compile the reduction code. */