Changeset d4b6638 for src/AST/Node.hpp


Ignore:
Timestamp:
Jun 5, 2019, 11:24:29 AM (5 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
2a8f0c1, 300fbee
Parents:
4741dfe (diff), 0e42794 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Node.hpp

    r4741dfe rd4b6638  
    1818#include <cassert>
    1919#include <iosfwd>
     20
     21#include "Common/ErrorObjects.h"  // for SemanticErrorException
    2022
    2123namespace ast {
     
    100102}
    101103
     104/// Call a visitor on a collection of nodes, throwing any exceptions when completed
     105template< typename Container >
     106void accept_each( const Container & c, Visitor & v ) {
     107        SemanticErrorException errors;
     108        for ( const auto & i : c ) {
     109                try {
     110                        if ( i ) {
     111                                i->accept( v );
     112                        }
     113                } catch ( SemanticErrorException & e ) {
     114                        errors.append( e );
     115                }
     116        }
     117        if ( ! errors.isEmpty() ) {
     118                throw errors;
     119        }
     120}
     121
    102122/// Base class for the smart pointer types
    103123/// should never really be used.
     
    166186        const o_node_t * as() const { return dynamic_cast<const o_node_t *>(node); }
    167187
     188        /// wrapper for convenient access to strict_dynamic_cast
     189        template<typename o_node_t>
     190        const o_node_t * strict_as() const { return strict_dynamic_cast<const o_node_t *>(node); }
     191
    168192        /// Returns a mutable version of the pointer in this node.
    169193        node_t * get_and_mutate();
Note: See TracChangeset for help on using the changeset viewer.