diff options
author | Adrian Thurston <thurston@complang.org> | 2011-06-22 02:37:47 +0000 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2011-06-22 02:37:47 +0000 |
commit | 07e6ce6d8ecd4d16fe4aca157cbbe31369edb2af (patch) | |
tree | 3eebcee6fa2ce3c2669ab7cf8539db4ee3898f1f | |
parent | fd3816edcfa104c890ae3b072a12a6d18f3a04c3 (diff) | |
download | colm-07e6ce6d8ecd4d16fe4aca157cbbe31369edb2af.tar.gz |
More movement into the resolve pass.
-rw-r--r-- | colm/compile.cc | 6 | ||||
-rw-r--r-- | colm/resolve.cc | 12 |
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. */ |