Changeset 46da46b for src/ResolvExpr/Unify.cc
- Timestamp:
- May 2, 2023, 3:44:31 AM (16 months ago)
- Branches:
- ast-experimental, master
- Children:
- 0c840fc
- Parents:
- 1ab773e0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/Unify.cc
r1ab773e0 r46da46b 134 134 env.apply( newSecond ); 135 135 136 findOpenVars( newFirst, open, closed, need, have, FirstClosed );137 findOpenVars( newSecond, open, closed, need, have, FirstOpen );136 // findOpenVars( newFirst, open, closed, need, have, FirstClosed ); 137 findOpenVars( newSecond, open, closed, need, have, newEnv, FirstOpen ); 138 138 139 139 return unifyExact(newFirst, newSecond, newEnv, need, have, open, noWiden(), symtab ); … … 1029 1029 1030 1030 void postvisit( const ast::TypeInstType * typeInst ) { 1031 assert( open.find( *typeInst ) == open.end() );1031 // assert( open.find( *typeInst ) == open.end() ); 1032 1032 handleRefType( typeInst, type2 ); 1033 1033 } … … 1142 1142 ) { 1143 1143 ast::OpenVarSet closed; 1144 findOpenVars( type1, open, closed, need, have, FirstClosed );1145 findOpenVars( type2, open, closed, need, have, FirstOpen );1144 // findOpenVars( type1, open, closed, need, have, FirstClosed ); 1145 findOpenVars( type2, open, closed, need, have, env, FirstOpen ); 1146 1146 return unifyInexact( 1147 1147 type1, type2, env, need, have, open, WidenMode{ true, true }, symtab, common ); … … 1160 1160 entry1 = var1 ? open.find( *var1 ) : open.end(), 1161 1161 entry2 = var2 ? open.find( *var2 ) : open.end(); 1162 bool isopen1 = entry1 != open.end(); 1163 bool isopen2 = entry2 != open.end(); 1164 1162 // bool isopen1 = entry1 != open.end(); 1163 // bool isopen2 = entry2 != open.end(); 1164 bool isopen1 = var1 && env.lookup(*var1); 1165 bool isopen2 = var2 && env.lookup(*var2); 1166 1167 /* 1165 1168 if ( isopen1 && isopen2 ) { 1166 1169 if ( entry1->second.kind != entry2->second.kind ) return false; … … 1172 1175 } else if ( isopen2 ) { 1173 1176 return env.bindVar( var2, type1, entry2->second, need, have, open, widen, symtab ); 1174 } else { 1177 } */ 1178 if ( isopen1 && isopen2 ) { 1179 if ( var1->base->kind != var2->base->kind ) return false; 1180 return env.bindVarToVar( 1181 var1, var2, ast::TypeData{ var1->base->kind, var1->base->sized||var2->base->sized }, need, have, 1182 open, widen, symtab ); 1183 } else if ( isopen1 ) { 1184 return env.bindVar( var1, type2, ast::TypeData{var1->base}, need, have, open, widen, symtab ); 1185 } else if ( isopen2 ) { 1186 return env.bindVar( var2, type1, ast::TypeData{var2->base}, need, have, open, widen, symtab ); 1187 }else { 1175 1188 return ast::Pass<Unify_new>::read( 1176 1189 type1, type2, env, need, have, open, widen, symtab ); 1177 1190 } 1191 1178 1192 } 1179 1193
Note: See TracChangeset
for help on using the changeset viewer.