### Godot version

4.0.1(flatpak)

### System information

Linux openSUSE

### Issue description

Cyclic Dependencies in shader result in infinite loop

### Steps to reproduce

Create 'main' shader that includes other shader, let's say `inc_me1` and `inc_me2` if 'inc_me1' that includes 'main' shader and 'inc_me2' includes 'inc_me1'. It results in a freeze.

### Minimal reproduction project

[Shader dependency.zip](https://github.com/godotengine/godot/files/11547654/Shader.dependency.zip)
uncomment include, and the editor will freeze and crash
while (is_char_space(peek())) {
		next();
	}
}
bool ShaderPreprocessor::Tokenizer::consume_empty_line() {
	
	return tokens_to_string(advance('\n')).strip_edges().size() == 0;
}
String ShaderPreprocessor::Tokenizer::get_identifier(bool *r_is_cursor, bool p_started) {
	if (r_is_cursor != nullptr) {
		*r_is_cursor = false;
	}
	LocalVector<char32_t> text;
	while (true) {
		char32_t c = peek();
		if (c == '\\' && consume_line_continuations(0) > 0) {
			continue;
		}
		if (is_char_end(c) || c == '(' || c == ')' || c == ',' || c == ';') {
			break;
		}
		if (is_whitespace(c) && p_started) {
			break;