MCFPP
MCFPP copied to clipboard
🐛 Bug : 在处理乘法表达式时发生空指针异常
描述:
在使用变量进行乘法操作时,编译器抛出空指针异常,无法正确生成数据包。
复现步骤:
- 创建如下内容的 mcfpp 文件:
# example.mcfpp
func hello {
var i = 5;
var b = 10 * i;
}
# example.json
{
"description": "",
"namespace": "mcfpp",
"targetPath": "datapacks"
}
- 使用 Java 运行 MCFPP.jar 编译项目
java -jar MCFPP.jar example.json
日志输出:
C:\Users\debug\Desktop\test_>java -jar MCFPP.jar example.json
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
[INFO/MCFPPKt.main](20:19:02,697): Tips: 娉ㄦ剰浼戞伅鍠碉紙姝ご
[DEBUG/Project.readConfig](20:19:02,733): Reading project from file "example.json"
[WARN/Project.checkConfig](20:19:02,841): Set source path default to "C:\Users\debug\Desktop\test_"
[WARN/Project.checkConfig](20:19:02,841): Set source path default to "C:\Users\debug\Desktop\test_"
[INFO/Project.readProject](20:19:02,841): Reading lib file at: datapack/bin.mclib
[DEBUG/Project.indexType](20:19:03,143): Generate Type Index...
[DEBUG/Project.resolveField](20:19:03,893): Generate Function Index...
[DEBUG/Project.runAnnotation](20:19:03,905): Run Annotation...
[DEBUG/Project.compile](20:19:03,907): Compiling mcfpp code in "C:\Users\debug\Desktop\test_\example.mcfpp"
[ERROR/MCFPPExprVisitor.visitMultiplicativeExpression](20:19:03,926): Error while compiling C:\Users\debug\Desktop\test_\example.mcfpp>>
Fatal error
4 | var b = 10 * i;
| ^~~~~~
[ERROR/MCFPPExprVisitor.visitMultiplicativeExpression](20:19:03,928): Caused by:
java.lang.NullPointerException
at top.mcfpp.antlr.MCFPPExprVisitor.visitMultiplicativeExpression(MCFPPExprVisitor.kt:214)
at top.mcfpp.antlr.MCFPPExprVisitor.visitAdditiveExpression(MCFPPExprVisitor.kt:180)
at top.mcfpp.antlr.MCFPPExprVisitor.visitRelationalExpression(MCFPPExprVisitor.kt:164)
at top.mcfpp.antlr.MCFPPExprVisitor.visitEqualityExpression(MCFPPExprVisitor.kt:146)
at top.mcfpp.antlr.MCFPPExprVisitor.visitConditionalAndExpression(MCFPPExprVisitor.kt:128)
at top.mcfpp.antlr.MCFPPExprVisitor.visitConditionalOrExpression(MCFPPExprVisitor.kt:104)
at top.mcfpp.antlr.MCFPPExprVisitor.visitCommonBinaryOperatorExpression(MCFPPExprVisitor.kt:82)
at top.mcfpp.antlr.MCFPPExprVisitor.visitExpression(MCFPPExprVisitor.kt:68)
at top.mcfpp.antlr.MCFPPImVisitor.visitFieldDeclaration(MCFPPImVisitor.kt:130)
at top.mcfpp.antlr.mcfppParser$FieldDeclarationContext.accept(mcfppParser.java:5152)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at top.mcfpp.antlr.mcfppParserBaseVisitor.visitStatement(mcfppParserBaseVisitor.java:672)
at top.mcfpp.antlr.MCFPPImVisitor.visitStatement(MCFPPImVisitor.kt:736)
at top.mcfpp.antlr.MCFPPImVisitor.visitFunctionBody(MCFPPImVisitor.kt:93)
at top.mcfpp.antlr.mcfppParser$FunctionBodyContext.accept(mcfppParser.java:7658)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at top.mcfpp.antlr.mcfppParserBaseVisitor.visitFunctionDeclaration(mcfppParserBaseVisitor.java:322)
at top.mcfpp.antlr.MCFPPImVisitor.visitFunctionDeclaration(MCFPPImVisitor.kt:56)
at top.mcfpp.antlr.mcfppParser$FunctionDeclarationContext.accept(mcfppParser.java:4359)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at top.mcfpp.antlr.mcfppParserBaseVisitor.visitDeclarations(mcfppParserBaseVisitor.java:70)
at top.mcfpp.antlr.mcfppParser$DeclarationsContext.accept(mcfppParser.java:866)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at top.mcfpp.antlr.mcfppParserBaseVisitor.visitTypeDeclaration(mcfppParserBaseVisitor.java:63)
at top.mcfpp.antlr.mcfppParser$TypeDeclarationContext.accept(mcfppParser.java:765)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at top.mcfpp.antlr.mcfppParserBaseVisitor.visitCompilationUnit(mcfppParserBaseVisitor.java:21)
at top.mcfpp.antlr.mcfppParser$CompilationUnitContext.accept(mcfppParser.java:294)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
at top.mcfpp.io.MCFPPFile.compile(MCFPPFile.kt:172)
at top.mcfpp.Project.compile(Project.kt:548)
at top.mcfpp.MCFPPKt.compile(MCFPP.kt:52)
at top.mcfpp.MCFPPKt.main(MCFPP.kt:36)
环境信息:
- 操作系统:Windows 10
- java版本: java version "21.0.5" 2024-10-15 LTS Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239) Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
- MCFPP版本: 25m08a