ir_print_visitor.h revision 78b51b0fdd61b58940f9043ef9046217552f2c70
178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/*
278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Copyright © 2010 Intel Corporation
378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick *
478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Permission is hereby granted, free of charge, to any person obtaining a
578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * copy of this software and associated documentation files (the "Software"),
678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * to deal in the Software without restriction, including without limitation
778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense,
878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * and/or sell copies of the Software, and to permit persons to whom the
978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software is furnished to do so, subject to the following conditions:
1078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick *
1178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * The above copyright notice and this permission notice (including the next
1278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * paragraph) shall be included in all copies or substantial portions of the
1378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Software.
1478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick *
1578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * DEALINGS IN THE SOFTWARE.
2278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */
2378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
2478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#pragma once
2578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#ifndef IR_PRINT_VISITOR_H
2678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#define IR_PRINT_VISITOR_H
2778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
2878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include "ir.h"
2978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#include "ir_visitor.h"
3078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
3178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick/**
3278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick * Abstract base class of visitors of IR instruction trees
3378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick */
3478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickclass ir_print_visitor : public ir_visitor {
3578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanickpublic:
3678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   ir_print_visitor()
3778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   {
3878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick      /* empty */
3978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   }
4078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
4178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual ~ir_print_visitor()
4278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   {
4378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick      /* empty */
4478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   }
4578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
4678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   /**
4778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    * \name Visit methods
4878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    *
4978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    * As typical for the visitor pattern, there must be one \c visit method for
5078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    * each concrete subclass of \c ir_instruction.  Virtual base classes within
5178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    * the hierarchy should not have \c visit methods.
5278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick    */
5378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   /*@{*/
5478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_variable *);
5578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_label *);
5678b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_function_signature *);
5778b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_function *);
5878b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_expression *);
5978b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_dereference *);
6078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_assignment *);
6178b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   virtual void visit(ir_constant *);
6278b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick   /*@}*/
6378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick};
6478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick
6578b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick#endif /* IR_PRINT_VISITOR_H */
66