Changeset 18070ee for src/GenPoly
- Timestamp:
- Jul 22, 2022, 11:59:15 AM (2 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- 5ce7f4a
- Parents:
- b9e2b87
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
rb9e2b87 r18070ee 189 189 /// Enters a new scope for type-variables, adding the type variables from ty 190 190 void beginTypeScope( Type *ty ); 191 /// Exits the type-variable scope192 void endTypeScope();193 191 /// Enters a new scope for knowLayouts and knownOffsets and queues exit calls 194 192 void beginGenericScope(); … … 198 196 UniqueName bufNamer; ///< Namer for VLA buffers 199 197 Expression * addrMember = nullptr; ///< AddressExpr argument is MemberExpr? 198 bool expect_func_type = false; ///< used to avoid recursing too deep in type decls 200 199 }; 201 200 … … 1419 1418 void PolyGenericCalculator::beginGenericScope() { 1420 1419 GuardScope( *this ); 1420 // We expect the first function type see to be the type relating to this scope 1421 // but any further type is probably some unrelated function pointer 1422 // keep track of which is the first 1423 GuardValue( expect_func_type ); 1424 expect_func_type = true; 1421 1425 } 1422 1426 … … 1468 1472 void PolyGenericCalculator::premutate( FunctionType *funcType ) { 1469 1473 beginTypeScope( funcType ); 1474 1475 GuardValue( expect_func_type ); 1476 1477 if(!expect_func_type) { 1478 GuardAction( [this]() { 1479 knownLayouts.endScope(); 1480 knownOffsets.endScope(); 1481 }); 1482 // If this is the first function type we see 1483 // Then it's the type of the declaration and we care about it 1484 knownLayouts.beginScope(); 1485 knownOffsets.beginScope(); 1486 } 1487 1488 // The other functions type we will see in this scope are probably functions parameters 1489 // they don't help us with the layout and offsets so don't mark them as known in this scope 1490 expect_func_type = false; 1470 1491 1471 1492 // make sure that any type information passed into the function is accounted for … … 1746 1767 } 1747 1768 1769 // std::cout << "TRUE 2" << std::endl; 1770 1748 1771 return true; 1749 1772 } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
Note: See TracChangeset
for help on using the changeset viewer.