### Godot version

v4.0.3.stable.official [5222a99f5]
Master [6101240231600c871f5c5473872532c68ea3268c] (confirmed by https://github.com/godotengine/godot/issues/77666#issuecomment-1568952502)

### System information

Window 10

### Issue description

References are not unreferenced at the end of `if` scopes.

### Steps to reproduce

Copy, paste and run the snippet below, check the results:

```gdscript
extends Node


func _ready() -> void:
  var ref := RefCounted.new()
  var ref_count : int

  # OK
  ref_count = ref.get_reference_count()
  print('Expected: 1, Result: %d' % ref_count)

  # OK
  if true:
    var temp := ref
    temp = null

  ref_count = ref.get_reference_count()
  print('Expected: 1, Result: %d' % ref_count)

  # FAIL
  if true:
    var temp := ref

  ref_count = ref.get_reference_count()
  print('Expected: 1, Result: %d' % ref_count)
```

Output example:

```
Expected: 1, Result: 1
Expected: 1, Result: 1
Expected: 1, Result: 2
```

### Minimal reproduction project

N/A
const HashMap<int, GDScriptTokenizer::CommentData> &comments = tokenizer.get_comments();
	if (!comments.has(p_line)) {
		return;
	}
	ERR_FAIL_COND(!p_brief.is_empty() || !p_desc.is_empty() || p_tutorials.size() != 0);
	int line = p_line;
	DocLineState state = DOC_LINE_NORMAL;
	enum Mode {
		BRIEF,
		DESC,
		TUTORIALS,
		DONE,
	};
	Mode mode = BRIEF;
	if (p_inner_class) {
		while (comments.has(line - 1)) {
			if (!comments[line - 1].new_line || !comments[line - 1].comment.begins_with("##")) {
				break;
			}
			line--;
		}
	}
	String space_prefix;
	if (comments.has(line) && comments[line].comment.begins_with("##")) {
		int i = 2;
		for (; i < comments[line].comment.length(); i++) {
			if (comments[line].comment[i] != ' ') {
				break;
			}