devalang_core/core/parser/handler/identifier/
print.rs

1use crate::core::{
2    lexer::token::{ Token, TokenKind },
3    parser::{ driver::Parser, statement::{ Statement, StatementKind } },
4    store::global::GlobalStore,
5};
6
7pub fn parse_print_token(
8    parser: &mut Parser,
9    current_token: Token,
10    _global_store: &mut GlobalStore
11) -> Statement {
12    // consume 'print'
13    parser.advance();
14
15    let collected = parser.collect_until(|t| matches!(t.kind, TokenKind::Newline | TokenKind::EOF));
16    // If single identifier, store as Identifier; else store as String of concatenated lexemes
17    let value = if collected.len() == 1 && collected[0].kind == TokenKind::Identifier {
18        crate::core::shared::value::Value::Identifier(collected[0].lexeme.clone())
19    } else {
20        let mut text = String::new();
21        for t in collected.iter() {
22            if matches!(t.kind, TokenKind::Newline | TokenKind::EOF) { break; }
23            text.push_str(&t.lexeme);
24        }
25        crate::core::shared::value::Value::String(text.trim().to_string())
26    };
27
28    Statement { kind: StatementKind::Print, value, indent: current_token.indent, line: current_token.line, column: current_token.column }
29}