ROSE  0.11.145.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
Rosebud::RoseGenerator Class Reference

Description

Generator that produces ROSE code.

Definition at line 8 of file RoseGenerator.h.

#include <Rosebud/RoseGenerator.h>

Inheritance diagram for Rosebud::RoseGenerator:
Inheritance graph
[legend]
Collaboration diagram for Rosebud::RoseGenerator:
Collaboration graph
[legend]

Public Types

using Ptr = std::shared_ptr< RoseGenerator >
 
- Public Types inherited from Rosebud::Generator
using Ptr = GeneratorPtr
 

Public Member Functions

virtual std::string name () const override
 Every generator should have a unique name. More...
 
virtual std::string purpose () const override
 Single-line description for documentation. More...
 
virtual void adjustParser (Sawyer::CommandLine::Parser &) override
 Add command-line switches and documentation to a parser. More...
 
virtual void generate (const Ast::ProjectPtr &) override
 Generate code. More...
 
- Public Member Functions inherited from Rosebud::Generator
virtual std::string propertyDataMemberName (const Ast::PropertyPtr &) const
 Data member name for a property. More...
 
virtual std::vector< std::string > propertyAccessorNames (const Ast::PropertyPtr &) const
 Accessor names for a property. More...
 
virtual std::vector< std::string > propertyMutatorNames (const Ast::PropertyPtr &) const
 Mutator names for a property. More...
 

Static Public Member Functions

static Ptr instance ()
 
- Static Public Member Functions inherited from Rosebud::Generator
static void registerGenerator (const Ptr &)
 Register a backend for use later. More...
 
static const std::vector< Ptr > & registeredGenerators ()
 Return all registered backends. More...
 
static Ptr lookup (const std::string &)
 Return the registered generator with the specified name. More...
 
static void addAllToParser (Sawyer::CommandLine::Parser &)
 Add all known generator switches to parser. More...
 

Protected Member Functions

virtual std::string ctorInitializerExpression (const Ast::PropertyPtr &, const std::string &expr) override
 Expression for initializing a property in a constructor, or empty. More...
 
virtual std::string valueType (const Ast::PropertyPtr &) override
 Type of value for initializing a property. More...
 
- Protected Member Functions inherited from Rosebud::CxxGenerator
virtual std::string machineGenerated (char commentType= '/')
 Return a title comment that says the file is machine generated. More...
 
virtual std::string resetStatement (const Ast::PropertyPtr &)
 Statement to initialize a property. More...
 
virtual std::string dataMemberType (const Ast::PropertyPtr &)
 Type for the data member for a property. More...
 
virtual std::string initialValue (const Ast::PropertyPtr &)
 Initial value expression for the property. More...
 
virtual void genDestructor (std::ostream &header, std::ostream &impl, const Ast::ClassPtr &)
 Emit code for the class destructor. More...
 
virtual void genDefaultConstructor (std::ostream &header, std::ostream &impl, const Ast::ClassPtr &, Access)
 Emit code for the class default constructor. More...
 
virtual void genArgsConstructor (std::ostream &header, std::ostream &impl, const Ast::ClassPtr &, const Hierarchy &, Access)
 Emit code for the constructor with ctor_args property arguments. More...
 
virtual void genInitProperties (std::ostream &header, std::ostream &impl, const Ast::ClassPtr &)
 Emit code that initializes all local properties. More...
 

Additional Inherited Members

- Protected Attributes inherited from Rosebud::CxxGenerator
size_t outputWidth = 130
 

Member Function Documentation

virtual std::string Rosebud::RoseGenerator::name ( ) const
overridevirtual

Every generator should have a unique name.

Implements Rosebud::Generator.

virtual std::string Rosebud::RoseGenerator::purpose ( ) const
overridevirtual

Single-line description for documentation.

Implements Rosebud::Generator.

virtual void Rosebud::RoseGenerator::adjustParser ( Sawyer::CommandLine::Parser )
overridevirtual

Add command-line switches and documentation to a parser.

Any command-line switches and documentation that is specific to the backend are added to the specified parser. In order to not conflict with other backends that might also be adding switch parsers, the backend should create a switch group and give it a unique prefix.

Reimplemented from Rosebud::Generator.

virtual void Rosebud::RoseGenerator::generate ( const Ast::ProjectPtr )
overridevirtual

Generate code.

The specified project AST is used to generate code.

Implements Rosebud::Generator.

virtual std::string Rosebud::RoseGenerator::ctorInitializerExpression ( const Ast::PropertyPtr ,
const std::string &  expr 
)
overrideprotectedvirtual

Expression for initializing a property in a constructor, or empty.

For most properties, this is simply the initialization expression parsed from the input. However, some properties need extra arguments, etc. that can be returned by this funciton. For instance, a TreeEdge property is initialized in a special way:

// Class with property definition
class Node: public TreeNode {
[[Rosebud::property]]
TreeEdge<Foo> foo = Foo::instance();
[[Rosebud::property]]
int bar = 42;
};
// Generated default constructor
Node::Node()
: foo_(*this, Foo::instance()), bar_(42) {}

So the initializer expression for the "foo" property is overridden to add the "*this" argument, but for "bar" it is not overridden.

The expr argument is the default initializer expression such as the string from the right hand side of the "=" in the property definition, or some other expression.

Reimplemented from Rosebud::CxxGenerator.

virtual std::string Rosebud::RoseGenerator::valueType ( const Ast::PropertyPtr )
overrideprotectedvirtual

Type of value for initializing a property.

This is the type used by mutator arguments, but without the const reference part. The base implementation simply returns the type from the property definition after removing volatile and mutable, but sometimes we need something else. For instance, a property of type TreeEdge<T> is never initialized from another tree edge, but rather from a std::shared_ptr<T>, as follows:

// Class with property definition
class Node: public TreeNode {
[[Rosebud::property]]
TreeEdge<Foo> foo;
};
// Generated mutator member function declaration
void foo(std::shared_ptr<Foo> const&);

Reimplemented from Rosebud::CxxGenerator.


The documentation for this class was generated from the following file: