### 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
output.clear();
	state = p_state;
	CommentRemover remover(p_code);
	String stripped = remover.strip();
	String error = remover.get_error();
	if (!error.is_empty()) {
		set_error(error, remover.get_error_line());
		return FAILED;
	}
	
	uint64_t code_hash = p_code.hash64();
	state->cyclic_include_hashes.push_back(code_hash);
	Tokenizer p_tokenizer(stripped);
	int last_size = 0;
	bool has_symbols_before_directive = false;
	while (true) {
		const Token &t = p_tokenizer.get_token();
		if (t.text == 0) {
			break;
		}
		
		p_tokenizer.get_and_clear_generated(&output);
		if (state->disabled) {
			
			
			output.push_back(t.text);
			continue;
		}
		if (t.text == '#') {