MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / scan

Method scan

modules/gdscript/gdscript_tokenizer_buffer.cpp:422–499  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

420}
421
422GDScriptTokenizer::Token GDScriptTokenizerBuffer::scan() {
423 // Add final newline.
424 if (current >= tokens.size() && !last_token_was_newline) {
425 Token newline;
426 newline.type = Token::NEWLINE;
427 newline.start_line = current_line;
428 newline.end_line = current_line;
429 last_token_was_newline = true;
430 return newline;
431 }
432
433 // Resolve pending indentation change.
434 if (pending_indents > 0) {
435 pending_indents--;
436 Token indent;
437 indent.type = Token::INDENT;
438 indent.start_line = current_line;
439 indent.end_line = current_line;
440 return indent;
441 } else if (pending_indents < 0) {
442 pending_indents++;
443 Token dedent;
444 dedent.type = Token::DEDENT;
445 dedent.start_line = current_line;
446 dedent.end_line = current_line;
447 return dedent;
448 }
449
450 if (current >= tokens.size()) {
451 if (!indent_stack.is_empty()) {
452 pending_indents -= indent_stack.size();
453 indent_stack.clear();
454 return scan();
455 }
456 Token eof;
457 eof.type = Token::TK_EOF;
458 return eof;
459 };
460
461 if (!last_token_was_newline && token_lines.has(current)) {
462 current_line = token_lines[current];
463 uint32_t current_column = token_columns[current];
464
465 // Check if there's a need to indent/dedent.
466 if (!multiline_mode) {
467 uint32_t previous_indent = 0;
468 if (!indent_stack.is_empty()) {
469 previous_indent = indent_stack.back()->get();
470 }
471 if (current_column - 1 > previous_indent) {
472 pending_indents++;
473 indent_stack.push_back(current_column - 1);
474 } else {
475 while (current_column - 1 < previous_indent) {
476 pending_indents--;
477 indent_stack.pop_back();
478 if (indent_stack.is_empty()) {
479 break;

Callers 1

parse_code_stringMethod · 0.45

Calls 8

sizeMethod · 0.65
is_emptyMethod · 0.45
clearMethod · 0.45
hasMethod · 0.45
getMethod · 0.45
backMethod · 0.45
push_backMethod · 0.45
pop_backMethod · 0.45

Tested by

no test coverage detected