#pragma once #include #include #include #include "value.h" #include "AST.h" #include "memory.h" #include "annotation.h" class Assignment : public ASTNode { public: Assignment(std::string name, const Location &loc) : ASTNode(loc), name(name) { } Assignment(std::string name, shared_ptr expr = shared_ptr(), const Location &loc = Location::NONE) : ASTNode(loc), name(name), expr(expr) { } std::string name; shared_ptr expr; virtual void addAnnotations(AnnotationList *annotations); virtual bool hasAnnotations() const; virtual const Annotation *annotation(const std::string &name) const; protected: AnnotationMap annotations; }; typedef std::vector AssignmentList; typedef std::unordered_map AssignmentMap;