brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 8cd2ac9 Raw
58 lines · c
1//===-------lib/Semantics/check-data.h ------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef FORTRAN_SEMANTICS_CHECK_DATA_H_10#define FORTRAN_SEMANTICS_CHECK_DATA_H_11 12#include "data-to-inits.h"13#include "flang/Common/interval.h"14#include "flang/Evaluate/fold-designator.h"15#include "flang/Evaluate/initial-image.h"16#include "flang/Semantics/expression.h"17#include "flang/Semantics/semantics.h"18#include <list>19#include <map>20#include <vector>21 22namespace Fortran::parser {23struct DataStmtRepeat;24struct DataStmtObject;25struct DataIDoObject;26class DataStmtImpliedDo;27struct DataStmtSet;28} // namespace Fortran::parser29 30namespace Fortran::semantics {31 32class DataChecker : public virtual BaseChecker {33public:34  explicit DataChecker(SemanticsContext &context) : exprAnalyzer_{context} {}35  void Leave(const parser::DataStmtObject &);36  void Leave(const parser::DataIDoObject &);37  void Enter(const parser::DataImpliedDo &);38  void Leave(const parser::DataImpliedDo &);39  void Leave(const parser::DataStmtSet &);40  void Leave(const parser::EntityDecl &);41  // After all DATA statements have been processed, converts their42  // initializations into per-symbol static initializers.43  void CompileDataInitializationsIntoInitializers();44 45private:46  ConstantSubscript GetRepetitionCount(const parser::DataStmtRepeat &);47  template <typename T> void CheckIfConstantSubscript(const T &);48  void CheckSubscript(const parser::SectionSubscript &);49  bool CheckAllSubscriptsInDataRef(const parser::DataRef &, parser::CharBlock);50  template <typename A> void LegacyDataInit(const A &);51 52  DataInitializations inits_;53  evaluate::ExpressionAnalyzer exprAnalyzer_;54  bool currentSetHasFatalErrors_{false};55};56} // namespace Fortran::semantics57#endif // FORTRAN_SEMANTICS_CHECK_DATA_H_58