Extract base classes from a C++ base_class_clause node.
| 2076 | |
| 2077 | // Extract base classes from a C++ base_class_clause node. |
| 2078 | static const char **extract_cpp_base_classes(CBMArena *a, TSNode clause, const char *source) { |
| 2079 | const char *bases[MAX_BASES]; |
| 2080 | int base_count = 0; |
| 2081 | uint32_t bnc = ts_node_named_child_count(clause); |
| 2082 | for (uint32_t bi = 0; bi < bnc && base_count < MAX_BASES_MINUS_1; bi++) { |
| 2083 | char *text = extract_cpp_base_text(a, ts_node_named_child(clause, bi), source); |
| 2084 | if (text && text[0]) { |
| 2085 | bases[base_count++] = text; |
| 2086 | } |
| 2087 | } |
| 2088 | if (base_count > 0) { |
| 2089 | const char **result = |
| 2090 | (const char **)cbm_arena_alloc(a, (base_count + NULL_TERM) * sizeof(const char *)); |
| 2091 | if (result) { |
| 2092 | for (int j = 0; j < base_count; j++) { |
| 2093 | result[j] = bases[j]; |
| 2094 | } |
| 2095 | result[base_count] = NULL; |
| 2096 | return result; |
| 2097 | } |
| 2098 | } |
| 2099 | return NULL; |
| 2100 | } |
| 2101 | |
| 2102 | // Build a single-element NULL-terminated base class array. |
| 2103 | static const char **make_single_base(CBMArena *a, const char *text) { |
no test coverage detected