Lines Matching refs:symbol
44 : symbol{&s}, offset{off}, object{&obj} {} in SymbolAndOffset()
46 Symbol *symbol; member
85 if (scope.symbol() && scope.IsParameterizedDerivedType()) { in DoScope()
100 for (auto &[symbol, dep] : dependents_) { in DoScope()
102 CHECK(symbol->size() == 0); in DoScope()
103 auto symInfo{GetSizeAndAlignment(*symbol)}; in DoScope()
104 symbol->set_size(symInfo.size); in DoScope()
105 Symbol &base{*dep.symbol}; in DoScope()
118 for (auto &[symbol, blockInfo] : equivalenceBlock_) { in DoScope()
119 if (!InCommonBlock(*symbol)) { in DoScope()
120 DoSymbol(*symbol); in DoScope()
121 DoEquivalenceBlockBase(*symbol, blockInfo); in DoScope()
122 offset_ = std::max(offset_, symbol->offset() + blockInfo.size); in DoScope()
127 for (auto &symbol : scope.GetSymbols()) { in DoScope() local
128 if (!InCommonBlock(*symbol) && in DoScope()
129 dependents_.find(symbol) == dependents_.end() && in DoScope()
130 equivalenceBlock_.find(symbol) == equivalenceBlock_.end()) { in DoScope()
131 DoSymbol(*symbol); in DoScope()
140 for (auto &[symbol, dep] : dependents_) { in DoScope()
141 symbol->set_offset(dep.symbol->offset() + dep.offset); in DoScope()
142 if (const auto *block{FindCommonBlockContaining(*dep.symbol)}) { in DoScope()
143 symbol->get<ObjectEntityDetails>().set_commonBlock(*block); in DoScope()
150 auto it{dependents_.find(*dep.symbol)}; in Resolve()
168 Symbol &symbol{*object}; in DoCommonBlock() local
169 DoSymbol(symbol); in DoCommonBlock()
170 auto iter{dependents_.find(symbol)}; in DoCommonBlock()
173 auto eqIter{equivalenceBlock_.find(symbol)}; in DoCommonBlock()
176 DoEquivalenceBlockBase(symbol, blockInfo); in DoCommonBlock()
178 minSize, std::max(offset_, symbol.offset() + blockInfo.size)); in DoCommonBlock()
183 Symbol &base{*dep.symbol}; in DoCommonBlock()
185 commonBlock.name().empty() ? symbol.name() : commonBlock.name()}; in DoCommonBlock()
190 symbol.name(), base.name(), commonBlock.name()); in DoCommonBlock()
194 symbol.name(), commonBlock.name(), base.name(), in DoCommonBlock()
197 } else if (dep.offset > symbol.offset()) { // 8.10.3(3) in DoCommonBlock()
200 symbol.name(), commonBlock.name(), base.name()); in DoCommonBlock()
203 base.set_offset(symbol.offset() - dep.offset); in DoCommonBlock()
212 Symbol &symbol, SizeAndAlignment &blockInfo) { in DoEquivalenceBlockBase() argument
213 if (symbol.size() > blockInfo.size) { in DoEquivalenceBlockBase()
214 blockInfo.size = symbol.size(); in DoEquivalenceBlockBase()
224 Resolve(SymbolAndOffset{object.symbol, offset, object})}; in DoEquivalenceSet()
236 for (const auto &[symbol, offset, object] : symbolOffsets) { in DoEquivalenceSet()
237 if (symbol == base.symbol) { in DoEquivalenceSet()
240 context_.foldingContext(), *symbol, base.offset, 1)}; in DoEquivalenceSet()
242 context_.foldingContext(), *symbol, offset, 1)}; in DoEquivalenceSet()
254 symbol->name(), base.offset, offset) in DoEquivalenceSet()
257 symbol->name(), offset); in DoEquivalenceSet()
261 dependents_.emplace(*symbol, in DoEquivalenceSet()
262 SymbolAndOffset{*base.symbol, base.offset - offset, *object}); in DoEquivalenceSet()
272 const ArraySpec &shape{object.symbol.get<ObjectEntityDetails>().shape()}; in ComputeOffset()
288 auto result{offset * GetElementSize(object.symbol).size}; in ComputeOffset()
291 if (const DeclTypeSpec * type{object.symbol.GetType()}) { in ComputeOffset()
301 void ComputeOffsetsHelper::DoSymbol(Symbol &symbol) { in DoSymbol() argument
302 if (!symbol.has<ObjectEntityDetails>() && !symbol.has<ProcEntityDetails>()) { in DoSymbol()
305 SizeAndAlignment s{GetSizeAndAlignment(symbol)}; in DoSymbol()
310 symbol.set_size(s.size); in DoSymbol()
311 symbol.set_offset(offset_); in DoSymbol()
316 auto ComputeOffsetsHelper::GetSizeAndAlignment(const Symbol &symbol) in GetSizeAndAlignment() argument
318 SizeAndAlignment result{GetElementSize(symbol)}; in GetSizeAndAlignment()
319 std::size_t elements{CountElements(symbol)}; in GetSizeAndAlignment()
327 auto ComputeOffsetsHelper::GetElementSize(const Symbol &symbol) in GetElementSize() argument
329 const DeclTypeSpec *type{symbol.GetType()}; in GetElementSize()
336 if (IsDescriptor(symbol) || IsProcedurePointer(symbol)) { in GetElementSize()
342 runtime::Descriptor::SizeInBytes(symbol.Rank(), false, lenParams)}; in GetElementSize()
345 if (IsProcedure(symbol)) { in GetElementSize()
374 std::size_t ComputeOffsetsHelper::CountElements(const Symbol &symbol) { in CountElements() argument
375 if (auto shape{GetShape(foldingContext_, symbol)}) { in CountElements()