package org.jcnc.snow.compiler.semantic.analyzers.expression;

import org.jcnc.snow.compiler.parser.ast.NumberLiteralNode;
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.semantic.analyzers.base.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;

/**
 * {@code NumberLiteralAnalyzer} 是用于处理数字字面量表达式（如整数常量）的语义分析器。
 * <p>
 * 在该语言的设计中，所有数字字面量（如 {@code 42}, {@code 0}, {@code -7}）统一视为整型，
 * 因此该分析器总是返回 {@link BuiltinType#INT} 类型。
 * <p>
 * 特点：
 * <ul>
 *   <li>不依赖符号表、函数上下文或模块信息，属于上下文无关表达式分析器。</li>
 *   <li>不会引发任何语义错误或日志输出，语义稳定、处理简单。</li>
 * </ul>
 */
public class NumberLiteralAnalyzer implements ExpressionAnalyzer<NumberLiteralNode> {

    /**
     * 分析数字字面量表达式并返回其固定类型。
     *
     * @param ctx    当前语义分析上下文（本分析器不使用该参数，但为接口统一性保留）
     * @param mi     当前模块信息（未使用，因字面量无模块依赖）
     * @param fn     当前所在的函数节点（未使用，因字面量无函数依赖）
     * @param locals 当前作用域的符号表（未使用，因字面量不引用符号）
     * @param expr   要分析的 {@link NumberLiteralNode} 节点
     * @return 始终返回 {@link BuiltinType#INT} 类型，表示整型字面量
     */
    @Override
    public Type analyze(Context ctx,
                        ModuleInfo mi,
                        FunctionNode fn,
                        SymbolTable locals,
                        NumberLiteralNode expr) {
        return BuiltinType.INT;
    }
}
