source: src/Virtual/Tables.h @ cf34e82

Last change on this file since cf34e82 was 6a896b0, checked in by Andrew Beach <ajbeach@…>, 2 years ago

Translated the Exception Declaration pass.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 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// Tables.h --
8//
9// Author           : Andrew Beach
10// Created On       : Mon Aug 31 11:07:00 2020
11// Last Modified By : Andrew Beach
12// Last Modified On : Wec Dec  8 16:58:00 2021
13// Update Count     : 3
14//
15
16#include <list>  // for list
17
18#include <string>
19#include "AST/Fwd.hpp"
20class Declaration;
21class Expression;
22class FunctionDecl;
23class Initializer;
24class ObjectDecl;
25class StructDecl;
26class StructInstType;
27class Type;
28
29namespace Virtual {
30
31std::string typeIdType( std::string const & type_name );
32std::string typeIdName( std::string const & type_name );
33std::string vtableTypeName( std::string const & type_name );
34std::string instanceName( std::string const & vtable_name );
35std::string vtableInstanceName( std::string const & type_name );
36std::string concurrentDefaultVTableName();
37bool isVTableInstanceName( std::string const & name );
38
39ObjectDecl * makeVtableForward(
40        std::string const & name, StructInstType * vtableType );
41/* Create a forward declaration of a vtable of the given type.
42 * vtableType node is consumed.
43 */
44ast::ObjectDecl * makeVtableForward(
45        CodeLocation const & location, std::string const & name,
46        ast::StructInstType const * vtableType );
47
48ObjectDecl * makeVtableInstance(
49        std::string const & name,
50        StructInstType * vtableType, Type * objectType,
51        Initializer * init = nullptr );
52/* Create an initialized definition of a vtable.
53 * vtableType and init (if provided) nodes are consumed.
54 */
55ast::ObjectDecl * makeVtableInstance(
56        CodeLocation const & location,
57        std::string const & name,
58        ast::StructInstType const * vtableType,
59        ast::Type const * objectType,
60        ast::Init const * init = nullptr );
61
62// Some special code for how exceptions interact with virtual tables.
63FunctionDecl * makeGetExceptionForward( Type * vtableType, Type * exceptType );
64/* Create a forward declaration of the exception virtual function
65 * linking the vtableType to the exceptType. Both nodes are consumed.
66 */
67ast::FunctionDecl * makeGetExceptionForward(
68        CodeLocation const & location,
69        ast::Type const * vtableType,
70        ast::Type const * exceptType );
71
72FunctionDecl * makeGetExceptionFunction(
73        ObjectDecl * vtableInstance, Type * exceptType );
74/* Create the definition of the exception virtual function.
75 * exceptType node is consumed.
76 */
77ast::FunctionDecl * makeGetExceptionFunction(
78        CodeLocation const & location,
79        ast::ObjectDecl const * vtableInstance, ast::Type const * exceptType );
80
81ObjectDecl * makeTypeIdInstance( StructInstType const * typeIdType );
82/* Build an instance of the type-id from the type of the type-id.
83 * TODO: Should take the parent type. Currently locked to the exception_t.
84 */
85ast::ObjectDecl * makeTypeIdInstance(
86        const CodeLocation & location, ast::StructInstType const * typeIdType );
87
88}
Note: See TracBrowser for help on using the repository browser.