source: src/ResolvExpr/FindOpenVars.cc@ 76a395a

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 76a395a was ea6332d, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

Big header cleaning pass - commit 3

  • Property mode set to 100644
File size: 4.0 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// FindOpenVars.cc --
8//
9// Author : Richard C. Bilson
10// Created On : Sun May 17 09:42:48 2015
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Sun May 17 09:45:25 2015
13// Update Count : 3
14//
15
16#include "FindOpenVars.h"
17
18#include <list> // for _List_const_iterator, list<>::const...
19#include <map> // for map<>::mapped_type
20
21#include "SynTree/Declaration.h" // for TypeDecl, DeclarationWithType (ptr ...
22#include "SynTree/Type.h" // for Type, Type::ForallList, ArrayType
23#include "SynTree/Visitor.h" // for Visitor
24
25namespace ResolvExpr {
26 class FindOpenVars : public Visitor {
27 public:
28 FindOpenVars( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen );
29
30 private:
31 virtual void visit(PointerType *pointerType);
32 virtual void visit(ArrayType *arrayType);
33 virtual void visit(FunctionType *functionType);
34 virtual void visit(TupleType *tupleType);
35
36 void common_action( Type *type );
37
38 OpenVarSet &openVars, &closedVars;
39 AssertionSet &needAssertions, &haveAssertions;
40 bool nextIsOpen;
41 };
42
43 void findOpenVars( Type *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) {
44 FindOpenVars finder( openVars, closedVars, needAssertions, haveAssertions, firstIsOpen );
45 type->accept( finder );
46 }
47
48 FindOpenVars::FindOpenVars( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen )
49 : openVars( openVars ), closedVars( closedVars ), needAssertions( needAssertions ), haveAssertions( haveAssertions ), nextIsOpen( firstIsOpen ) {
50 }
51
52 void FindOpenVars::common_action( Type *type ) {
53 if ( nextIsOpen ) {
54 for ( Type::ForallList::const_iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
55 openVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
56 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
57 needAssertions[ *assert ].isUsed = false;
58 }
59/// cloneAll( (*i)->get_assertions(), needAssertions );
60/// needAssertions.insert( needAssertions.end(), (*i)->get_assertions().begin(), (*i)->get_assertions().end() );
61 }
62 } else {
63 for ( Type::ForallList::const_iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
64 closedVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
65 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
66 haveAssertions[ *assert ].isUsed = false;
67 }
68/// cloneAll( (*i)->get_assertions(), haveAssertions );
69/// haveAssertions.insert( haveAssertions.end(), (*i)->get_assertions().begin(), (*i)->get_assertions().end() );
70 } // for
71 } // if
72/// std::cout << "type is ";
73/// type->print( std::cout );
74/// std::cout << std::endl << "need is" << std::endl;
75/// printAssertionSet( needAssertions, std::cout );
76/// std::cout << std::endl << "have is" << std::endl;
77/// printAssertionSet( haveAssertions, std::cout );
78 }
79
80 void FindOpenVars::visit(PointerType *pointerType) {
81 common_action( pointerType );
82 Visitor::visit( pointerType );
83 }
84
85 void FindOpenVars::visit(ArrayType *arrayType) {
86 common_action( arrayType );
87 Visitor::visit( arrayType );
88 }
89
90 void FindOpenVars::visit(FunctionType *functionType) {
91 common_action( functionType );
92 nextIsOpen = ! nextIsOpen;
93 Visitor::visit( functionType );
94 nextIsOpen = ! nextIsOpen;
95 }
96
97 void FindOpenVars::visit(TupleType *tupleType) {
98 common_action( tupleType );
99 Visitor::visit( tupleType );
100 }
101} // namespace ResolvExpr
102
103// Local Variables: //
104// tab-width: 4 //
105// mode: c++ //
106// compile-command: "make install" //
107// End: //
Note: See TracBrowser for help on using the repository browser.