devalang_core/core/parser/handler/identifier/
print.rs1use 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 parser.advance();
14
15 let collected = parser.collect_until(|t| matches!(t.kind, TokenKind::Newline | TokenKind::EOF));
16 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}