source: src/Virtual/Tables.h @ 1784e9e

ADTast-experimentalpthread-emulationqualifiedEnum
Last change on this file since 1784e9e was 4f6dda0, checked in by Andrew Beach <ajbeach@…>, 3 years ago

Converted Implement Concurrent Keywords to the new AST. Includes updates to various helpers, including the virtual table and a lot of examine helpers.

  • Property mode set to 100644
File size: 2.8 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 StructDecl;
22class Expression;
23
24namespace Virtual {
25
26std::string typeIdType( std::string const & type_name );
27std::string typeIdName( std::string const & type_name );
28std::string vtableTypeName( std::string const & type_name );
29std::string instanceName( std::string const & vtable_name );
30std::string vtableInstanceName( std::string const & type_name );
31std::string concurrentDefaultVTableName();
32bool isVTableInstanceName( std::string const & name );
33
34ObjectDecl * makeVtableForward(
35        std::string const & name, StructInstType * vtableType );
36/* Create a forward declaration of a vtable of the given type.
37 * vtableType node is consumed.
38 */
39ast::ObjectDecl * makeVtableForward(
40        CodeLocation const & location, std::string const & name,
41        ast::StructInstType const * vtableType );
42
43ObjectDecl * makeVtableInstance(
44        std::string const & name,
45        StructInstType * vtableType, Type * objectType,
46        Initializer * init = nullptr );
47/* Create an initialized definition of a vtable.
48 * vtableType and init (if provided) nodes are consumed.
49 */
50ast::ObjectDecl * makeVtableInstance(
51        CodeLocation const & location,
52        std::string const & name,
53        ast::StructInstType const * vtableType,
54        ast::Type const * objectType,
55        ast::Init const * init = nullptr );
56
57// Some special code for how exceptions interact with virtual tables.
58FunctionDecl * makeGetExceptionForward( Type * vtableType, Type * exceptType );
59/* Create a forward declaration of the exception virtual function
60 * linking the vtableType to the exceptType. Both nodes are consumed.
61 */
62ast::FunctionDecl * makeGetExceptionForward(
63        CodeLocation const & location,
64        ast::Type const * vtableType,
65        ast::Type const * exceptType );
66
67FunctionDecl * makeGetExceptionFunction(
68        ObjectDecl * vtableInstance, Type * exceptType );
69/* Create the definition of the exception virtual function.
70 * exceptType node is consumed.
71 */
72ast::FunctionDecl * makeGetExceptionFunction(
73        CodeLocation const & location,
74        ast::ObjectDecl const * vtableInstance, ast::Type const * exceptType );
75
76ObjectDecl * makeTypeIdInstance( StructInstType const * typeIdType );
77/* Build an instance of the type-id from the type of the type-id.
78 * TODO: Should take the parent type. Currently locked to the exception_t.
79 */
80ast::ObjectDecl * makeTypeIdInstance(
81        const CodeLocation & location, ast::StructInstType const * typeIdType );
82
83}
Note: See TracBrowser for help on using the repository browser.