source: src/InitTweak/GenInit.h @ 314c9d8

Last change on this file since 314c9d8 was 4e2f1b2, checked in by Andrew Beach <ajbeach@…>, 9 months ago

Clean-up of GenImplicitCall? module. Changing the return type for consistency spilled out into some other files, but that should also saves some operations. The other big one is the template instances were reduced to one and then the templates removed.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// GenInit.h -- Generate initializers, and other stuff.
8//
9// Author           : Rodolfo G. Esteves
10// Created On       : Mon May 18 07:44:20 2015
11// Last Modified By : Andrew Beach
12// Last Modified On : Fri Mar 18 14:22:00 2022
13// Update Count     : 7
14//
15
16#pragma once
17
18#include <list>                // for list
19#include <string>              // for string
20
21#include "AST/Fwd.hpp"
22#include "Common/CodeLocation.h"
23#include "GenPoly/ScopedSet.h" // for ScopedSet
24
25namespace InitTweak {
26
27/// Adds return value temporaries and wraps Initializers in ConstructorInit nodes
28void genInit( ast::TranslationUnit & translationUnit );
29
30/// Converts return statements into copy constructor calls on the hidden return variable.
31/// This pass must happen before auto-gen.
32void fixReturnStatements( ast::TranslationUnit & translationUnit );
33
34/// generates a single ctor/dtor statement using objDecl as the 'this' parameter and arg as the optional argument
35const ast::Stmt * genCtorDtor( const CodeLocation & loc, const std::string & fname, const ast::ObjectDecl * objDecl, const ast::Expr * arg = nullptr );
36
37/// creates an appropriate ConstructorInit node which contains a constructor, destructor, and C-initializer
38ast::ConstructorInit * genCtorInit( const CodeLocation & loc, const ast::ObjectDecl * objDecl );
39
40class ManagedTypes final {
41public:
42        bool isManaged( const ast::ObjectDecl * objDecl ) const ; // determine if object is managed
43        bool isManaged( const ast::Type * type ) const; // determine if type is managed
44
45        void handleDWT( const ast::DeclWithType * dwt ); // add type to managed if ctor/dtor
46        void handleStruct( const ast::StructDecl * aggregateDecl ); // add type to managed if child is managed
47
48        void beginScope();
49        void endScope();
50private:
51        GenPoly::ScopedSet< std::string > managedTypes;
52};
53
54} // namespace
55
56// Local Variables: //
57// tab-width: 4 //
58// mode: c++ //
59// compile-command: "make install" //
60// End: //
Note: See TracBrowser for help on using the repository browser.