Extract base classes from a C++ base_class_clause node.
| 1955 | |
| 1956 | // Extract base classes from a C++ base_class_clause node. |
| 1957 | static const char **extract_cpp_base_classes(CBMArena *a, TSNode clause, const char *source) { |
| 1958 | const char *bases[MAX_BASES]; |
| 1959 | int base_count = 0; |
| 1960 | uint32_t bnc = ts_node_named_child_count(clause); |
| 1961 | for (uint32_t bi = 0; bi < bnc && base_count < MAX_BASES_MINUS_1; bi++) { |
| 1962 | char *text = extract_cpp_base_text(a, ts_node_named_child(clause, bi), source); |
| 1963 | if (text && text[0]) { |
| 1964 | bases[base_count++] = text; |
| 1965 | } |
| 1966 | } |
| 1967 | if (base_count > 0) { |
| 1968 | const char **result = |
| 1969 | (const char **)cbm_arena_alloc(a, (base_count + NULL_TERM) * sizeof(const char *)); |
| 1970 | if (result) { |
| 1971 | for (int j = 0; j < base_count; j++) { |
| 1972 | result[j] = bases[j]; |
| 1973 | } |
| 1974 | result[base_count] = NULL; |
| 1975 | return result; |
| 1976 | } |
| 1977 | } |
| 1978 | return NULL; |
| 1979 | } |
| 1980 | |
| 1981 | // Build a single-element NULL-terminated base class array. |
| 1982 | static const char **make_single_base(CBMArena *a, const char *text) { |
no test coverage detected