Changes in / [9b81fed3:768b3b4f]
- Location:
- src/AST
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Node.hpp
r9b81fed3 r768b3b4f 133 133 operator const node_t * const() const { return node; } 134 134 135 template<typename o_node_t>136 const o_node_t * as() const { return dynamic_cast<o_node_t *>(node); }137 138 135 using ptr = const node_t *; 139 136 -
src/AST/porting.md
r9b81fed3 r768b3b4f 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 ## … … 58 56 * Strong justification required for private fields 59 57 * No `get_` prefix on getters (including for generated fields) 60 * exception is `DeclWithType::get_type()`61 58 * Notable changes: 62 59 * for concision and consistency with subclasses: … … 111 108 * Still a `std::list` for children, rather than `std::vector` 112 109 * 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.