//
// Created by pgess on 19/03/2020.
//

#ifndef XREATE_PREDEFINEDANNS_H
#define XREATE_PREDEFINEDANNS_H

#include "ast.h"

namespace xreate{ namespace analysis{
class PredefinedAnns{
public:
  enum class FnAnnotations{
    ENTRY
  };
  enum class ExprAnnotations{
    I12N
  };
  enum class I12ModeTag{
    ON, OFF
  };
  enum class IntHints{
    SIZE
  };

  enum class ContHints{
    ARRAY
  };

  TypeAnnotation fnAnnsT;
  TypeAnnotation exprAnnsT;
  TypeAnnotation hintsIntT;
  TypeAnnotation hintsContT;

  //Interpretation
  TypeAnnotation i12nModeT;

  PredefinedAnns();
  static const PredefinedAnns& instance(){ return __instance; }
  void fillRegistry(std::map<std::string, std::pair<TypeAnnotation, int>> &__registry) const;

private:
  static PredefinedAnns __instance;
};

}} // end of xreate::analysis

#endif //XREATE_PREDEFINEDANNS_H
