Skip to content

🐛 Bug : 在处理乘法表达式时发生空指针异常 #40

@771835

Description

@771835

描述:

在使用变量进行乘法操作时,编译器抛出空指针异常,无法正确生成数据包。

复现步骤:

  1. 创建如下内容的 mcfpp 文件:
# example.mcfpp
func hello {
    var i = 5;
    var b =  10 * i;
}
# example.json
{
  "description": "",
  "namespace": "mcfpp",
  "targetPath": "datapacks"
}
  1. 使用 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions