Extract base classes from a C++ base_class_clause node.
| 2119 | |
| 2120 | // Extract base classes from a C++ base_class_clause node. |
| 2121 | static const char **extract_cpp_base_classes(CBMArena *a, TSNode clause, const char *source) { |
| 2122 | const char *bases[MAX_BASES]; |
| 2123 | int base_count = 0; |
| 2124 | uint32_t bnc = ts_node_named_child_count(clause); |
| 2125 | for (uint32_t bi = 0; bi < bnc && base_count < MAX_BASES_MINUS_1; bi++) { |
| 2126 | char *text = extract_cpp_base_text(a, ts_node_named_child(clause, bi), source); |
| 2127 | if (text && text[0]) { |
| 2128 | bases[base_count++] = text; |
| 2129 | } |
| 2130 | } |
| 2131 | if (base_count > 0) { |
| 2132 | const char **result = |
| 2133 | (const char **)cbm_arena_alloc(a, (base_count + NULL_TERM) * sizeof(const char *)); |
| 2134 | if (result) { |
| 2135 | for (int j = 0; j < base_count; j++) { |
| 2136 | result[j] = bases[j]; |
| 2137 | } |
| 2138 | result[base_count] = NULL; |
| 2139 | return result; |
| 2140 | } |
| 2141 | } |
| 2142 | return NULL; |
| 2143 | } |
| 2144 | |
| 2145 | // Build a single-element NULL-terminated base class array. |
| 2146 | static const char **make_single_base(CBMArena *a, const char *text) { |
no test coverage detected