Skip to content

当给一个int变量赋值超过 INT_MAX 的数时,编译器崩溃 #47

Description

@771835

版本

1.0.2
git commit: a0ab9386e47379fd2eb4772930ff73aee749596c

复现代码

func test(){
    var i = 2147483648;
}

期望输出

编译器合理的报错,不抛出堆栈信息

实际输出

$ java -jar MCFPP-1.0.2-SNAPSHOT.jar p.json 
[INFO/MCFPPKt.main](22:34:18,415): Tips: 今天的编译器也很可爱呢w
[DEBUG/Project.readConfig](22:47:43,821): Reading project from file "p.json"
[INFO/Project.readProject](22:47:43,923): Reading lib file at: datapack/bin.mclib
[DEBUG/Project.indexType](22:47:44,194): Generate Type Index...
[DEBUG/Project.resolveField](22:47:44,325): Generate Function Index...
[DEBUG/Project.runAnnotation](22:47:44,333): Run Annotation...
[DEBUG/Project.compile](22:47:44,338): Compiling mcfpp code in "C:\Users\debug\Desktop\mcfpp-test\main.mcfpp"
[ERROR/MCFPPExprVisitor.visitNbtValue](22:47:44,364): Error while compiling C:\Users\debug\Desktop\mcfpp-test\main.mcfpp>>
Fatal error. Caused by:
2 |     var i = 2147483648;
  |             ^~~~~~~~~~

java.lang.NumberFormatException: For input string: "2147483648"
        at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
        at java.base/java.lang.Integer.parseInt(Integer.java:666)
        at java.base/java.lang.Integer.parseInt(Integer.java:778)
        at top.mcfpp.antlr.MCFPPExprVisitor.visitNbtValue(MCFPPExprVisitor.kt:662)
        at top.mcfpp.antlr.MCFPPExprVisitor.visitNbtValue(MCFPPExprVisitor.kt:40)
        at top.mcfpp.antlr.mcfppParser$NbtValueContext.accept(mcfppParser.java:12241)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
        at top.mcfpp.antlr.MCFPPExprVisitor.visitValue(MCFPPExprVisitor.kt:603)
        at top.mcfpp.antlr.MCFPPExprVisitor.visitPrimary(MCFPPExprVisitor.kt:335)
        at top.mcfpp.antlr.MCFPPExprVisitor.visitExpression(MCFPPExprVisitor.kt:59)
        at top.mcfpp.antlr.MCFPPImVisitor.visitFieldDeclaration(MCFPPImVisitor.kt:123)
        at top.mcfpp.antlr.mcfppParser$FieldDeclarationContext.accept(mcfppParser.java:4913)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
        at top.mcfpp.antlr.mcfppParserBaseVisitor.visitStatement(mcfppParserBaseVisitor.java:546)
        at top.mcfpp.antlr.MCFPPImVisitor.visitStatement(MCFPPImVisitor.kt:790)
        at top.mcfpp.antlr.MCFPPImVisitor.visitCurlBlock(MCFPPImVisitor.kt:89)
        at top.mcfpp.antlr.mcfppParser$CurlBlockContext.accept(mcfppParser.java:10018)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
        at top.mcfpp.antlr.mcfppParserBaseVisitor.visitFunctionDeclaration(mcfppParserBaseVisitor.java:245)
        at top.mcfpp.antlr.MCFPPImVisitor.visitFunctionDeclaration(MCFPPImVisitor.kt:59)
        at top.mcfpp.antlr.mcfppParser$FunctionDeclarationContext.accept(mcfppParser.java:3976)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
        at top.mcfpp.antlr.mcfppParserBaseVisitor.visitDeclarations(mcfppParserBaseVisitor.java:77)
        at top.mcfpp.antlr.mcfppParser$DeclarationsContext.accept(mcfppParser.java:1132)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
        at top.mcfpp.antlr.mcfppParserBaseVisitor.visitTypeDeclaration(mcfppParserBaseVisitor.java:70)
        at top.mcfpp.antlr.mcfppParser$TypeDeclarationContext.accept(mcfppParser.java:1032)
        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:291)
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
        at top.mcfpp.io.MCFPPFile.compile(MCFPPFile.kt:185)
        at top.mcfpp.Project.compile(Project.kt:548)
        at top.mcfpp.MCFPPKt.compile(MCFPP.kt:54)
        at top.mcfpp.MCFPPKt.main(MCFPP.kt:38)

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