docs: 优化 TypePromoteUtils 的代码注释

This commit is contained in:
Luke 2025-07-11 10:00:23 +08:00
parent 81ca858cc1
commit 099f4f934c

View File

@ -1,25 +1,35 @@
package org.jcnc.snow.compiler.backend.utils; package org.jcnc.snow.compiler.backend.utils;
/** /**
* 基本数值类型提升工具 * 工具类提供基本数值类型的提升与类型转换辅助功能
* 类型优先级低的类型转为优先级高的类型去参与比较计算等等, * <p>
* 比如 int + long那么结果的类型应为 long * 在进行数值类型运算比较等操作时低优先级的类型会被提升为高优先级类型参与运算
* 例如 int + long 运算int 会被提升为 long最终运算结果类型为 long
* <p>
* 类型优先级从高到低依次为
* Ddouble6
* Ffloat 5
* Llong 4
* Iint 3
* Sshort 2
* Bbyte 1
* 未识别类型 0
*/ */
public class TypePromoteUtils { public class TypePromoteUtils {
/** /**
* <b>类型宽度优先级</b>D > F > L > I > S > B * 返回数值类型的宽度优先级数值越大类型越宽
* <ul> * 类型及优先级映射如下
* <li>Ddouble6</li> * Ddouble: 6
* <li>Ffloat5</li> * Ffloat : 5
* <li>Llong4</li> * Llong : 4
* <li>Iint3</li> * Iint : 3
* <li>Sshort2</li> * Sshort : 2
* <li>Bbyte1</li> * Bbyte : 1
* <li>未识别类型0</li> * 未知类型 : 0
* </ul>
* *
* @param p 类型标记字符 * @param p 类型标记字符B/S/I/L/F/D
* @return 优先级数值越大类型越宽 * @return 优先级数值0 表示未知类型
*/ */
private static int rank(char p) { private static int rank(char p) {
return switch (p) { return switch (p) {
@ -34,32 +44,43 @@ public class TypePromoteUtils {
} }
/** /**
* 返回更的公共类型即优先级高的类型 * 返回两个类型中较的公共类型即优先级较高的类型
* 若优先级相等返回第一个参数的类型
* *
* @param a 类型标记字符 1 * @param a 类型标记字符1
* @param b 类型标记字符 2 * @param b 类型标记字符2
* @return 宽度更高的类型标记字符 * @return 优先级较高的类型标记字符
*/ */
public static char promote(char a, char b) { public static char promote(char a, char b) {
return rank(a) >= rank(b) ? a : b; return rank(a) >= rank(b) ? a : b;
} }
/** /**
* 单字符类型标记转字符串 * 字符类型标记转字符串
* *
* @param p 类型标记字符 * @param p 类型标记字符
* @return 类型字符串 * @return 类型标记的字符串形式
*/ */
public static String str(char p) { public static String str(char p) {
return String.valueOf(p); return String.valueOf(p);
} }
/** /**
* 获取 {@code from to} 的类型转换指令名如不需转换则返回 {@code null} * 获取类型转换指令名例如 "I2L", "F2D"表示从源类型到目标类型的转换操作
* 如果源类型和目标类型相同则返回 null表示无需转换
* <p>
* 支持的类型标记字符包括BbyteSshortIintLlongFfloatDdouble
* 所有可能的类型转换均已覆盖如下所示
* B S/I/L/F/D
* S B/I/L/F/D
* I B/S/L/F/D
* L B/S/I/F/D
* F B/S/I/L/D
* D B/S/I/L/F
* *
* @param from 源类型标记字符 * @param from 源类型标记字符
* @param to 目标类型标记字符 * @param to 目标类型标记字符
* @return 转换指令名L2I无转换返回 {@code null} * @return 类型转换指令名 "L2I"如无须转换则返回 null
*/ */
public static String convert(char from, char to) { public static String convert(char from, char to) {
if (from == to) return null; if (from == to) return null;