Jostarの開発メモ

プログラミング言語Jostar

NULLポインタエラーが出力される(#001)

2025-01-31 22:20:42
2025-01-31 22:22:33
目次

バグ報告

状況:

Cygwinでjostarディレクトリに移動して、以下のコマンドを実行します

java -cp coins/classes jostarfront.JostarDriver -coins:target=x86_64 sample/classtest.j

すると、以下のNULLポインタの例外が出力されます

Compile error in Jostar parser: java.lang.NullPointerException: Cannot invoke "coins.sym.Var.getSymType()" because "pSym" is null

Exception in thread "Thread-0" java.lang.NullPointerException: Cannot invoke "coins.ir.hir.HIR.getOperator()" because "pHir" is null

at coins.hir2lir.ConvToNewLIR.convertSubpDef(ConvToNewLIR.java:1329)

at coins.hir2lir.ConvToNewLIR.doConvert(ConvToNewLIR.java:1011)

at coins.driver.Driver.makeNewLirFromHir(Driver.java:1044)

at coins.driver.Driver.compile(Driver.java:2143)

at coins.driver.CompileThread.doCompile(CompileThread.java:229)

at coins.driver.CompileThread$Compiler.go(CompileThread.java:355)

at coins.driver.CompileThread$PassGroup.go(CompileThread.java:276)

at coins.driver.CompileThread.callPassGroup(CompileThread.java:535)

at coins.driver.CompileThread.run(CompileThread.java:594)

原因:

 現時点の予測として、COINSのパッケージcoins.ir.hir.HIRにおいて、setChildメソッドが引数にNULLを指定するのを許しています。そのため、getChildメソッドがnullを返してしまいます。

 これは仕様です。HIR APIの仕様には、NULLについて何の記述もありません。それが原因で、getChildメソッドの利用者が上記のエラーを作り出してしまいます。

対策:

 HIRのAPIは広い範囲で使われている可能性があるので、それ自体に修正はしません。それゆえ、バグを引き起こしている部分だけ、nullチェックをすることでバグを修正していきます。この修正は0.04で反映されます

この記事を書いた人

dhrname

Jostar言語の開発者