Changes in src/AST/porting.md [fdbd4fd:6d51bd7]
- File:
-
- 1 edited
-
src/AST/porting.md (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/porting.md
rfdbd4fd r6d51bd7 3 3 ## Pointer Types ## 4 4 * raw pointer `T*` is used for construction, but not storage 5 * `ast::ptr_base<T,R>` is a pointer to AST node `T` with reference type `R` 6 * specialization: strong pointer `ast::ptr<T>` is used for an ownership relationship 7 * specialization: weak pointer `ast::readonly<T>` is used for an observation relationship 8 * added `ast::ptr_base<T,R>::as<S>()` with same semantics as `dynamic_cast<S*>(p)` 5 * strong pointer `ast::ptr<T>` is used for an ownership relationship 6 * weak pointer `ast::readonly<T>` is used for an observation relationship 9 7 10 8 ## Visitors ## 11 9 * `Visitor` and `Mutator` are combined into a single `ast::Visitor` class 12 * Base nodes now override ` Node* accept( Visitor& v ) = 0` with, e.g. `Stmt* accept( Visitor& v )override = 0`10 * Base nodes now override `const Node * accept( Visitor & v ) const = 0` with, e.g. `const Stmt * accept( Visitor & v ) const override = 0` 13 11 * `PassVisitor` is replaced with `ast::Pass` 14 12 … … 26 24 `clone` is private to `Node` now 27 25 * still needs to be overriden to return appropriate type 28 * e.g. `private: virtual Stmt* clone() const override = 0;` 26 * e.g. `private: virtual Stmt * clone() const override = 0;` 27 * because friendship is not inherited, all implementations of clone need 28 /// Must be copied in ALL derived classes 29 template<typename node_t> 30 friend auto mutate(const node_t * node); 29 31 30 32 All leaves of the `Node` inheritance tree are now declared `final` … … 58 60 * Strong justification required for private fields 59 61 * No `get_` prefix on getters (including for generated fields) 60 * exception is `DeclWithType::get_type()`61 62 * Notable changes: 62 63 * for concision and consistency with subclasses: … … 111 112 * Still a `std::list` for children, rather than `std::vector` 112 113 * allows more-efficient splicing for purposes of later code generation 113 114 `Type`115 * `forall` field split off into `ParameterizedType` subclass116 * any type that needs it can inherit from `ParameterizedType`117 * `get_qualifiers()` replaced with accessor `qualifiers()` and mutator `set_qualifiers()`118 * `get_CV()` replaced with `is_CV()` variants119 * A number of features only supported on aggregates pushed down to `ReferenceToType`:120 * `attributes`: per docs [1] GCC only supports type attributes on aggregates and typedefs121 * suggest adding a `TypeWithAttributes` wrapper type if this proves insufficient122 * `getAggr()`123 * `genericSubstitution()`124 125 `BasicType`126 * does not inherit from `Type` to allow pointer inlining127 * moved `Kind` before qualifiers in constructor to allow for default128 * **TODO** move `kind`, `typeNames` into code generator129 130 [1] https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Type-Attributes.html#Type-Attributes131
Note:
See TracChangeset
for help on using the changeset viewer.