Following backtrace happen when i write wrong code when try to play with avram
migration macro.
e.g. i want to create a companies tables. like this:
class CreateCompanies::V20220730045700 < Avram::Migrator::Migration::V1
def migrate
# Learn about migrations at: https://luckyframework.org/guides/database/migrations
create table_for(Company) do
primary_key id : Int64
name : String # <= this line should be write like: `add name : String`
add_timestamps
end
end
def rollback
drop table_for(Company)
end
end
As you can see, i add wrong code name : String
, and it’s my fault.
But, The really issue is, crystal complain me a really obscurely backtrace like this:
╰─ $ lucky db.migrate
Crystal::ASTNode#dependencies cannot be nil (NilAssertionError)
from crystal/src/compiler/crystal/semantic/bindings.cr:3:5 in 'dependencies'
from crystal/src/compiler/crystal/codegen/codegen.cr:1936:7 in 'bound_to_mod_nil?'
from crystal/src/compiler/crystal/codegen/codegen.cr:1928:35 in 'reset_nilable_vars'
from crystal/src/compiler/crystal/codegen/codegen.cr:1587:11 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/call.cr:321:13 in 'codegen_call_with_block'
from crystal/src/compiler/crystal/codegen/call.cr:32:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/call.cr:73:7 in 'prepare_call_args_non_external'
from crystal/src/compiler/crystal/codegen/call.cr:57:7 in 'prepare_call_args'
from crystal/src/compiler/crystal/codegen/call.cr:21:26 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:1031:9 in 'codegen_assign'
from crystal/src/compiler/crystal/codegen/codegen.cr:995:7 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/fun.cr:167:11 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
from crystal/src/compiler/crystal/codegen/call.cr:454:12 in 'codegen_call'
from crystal/src/compiler/crystal/codegen/call.cr:35:7 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:839:7 in 'codegen_if_branch'
from crystal/src/compiler/crystal/codegen/codegen.cr:831:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/fun.cr:167:11 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
from crystal/src/compiler/crystal/codegen/call.cr:454:12 in 'codegen_call'
from crystal/src/compiler/crystal/codegen/call.cr:35:7 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:1596:11 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:1596:11 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:887:15 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/call.cr:321:13 in 'codegen_call_with_block'
from crystal/src/compiler/crystal/codegen/call.cr:32:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/call.cr:321:13 in 'codegen_call_with_block'
from crystal/src/compiler/crystal/codegen/call.cr:32:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:1596:11 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:839:7 in 'codegen_if_branch'
from crystal/src/compiler/crystal/codegen/codegen.cr:831:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/exception.cr:91:7 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/call.cr:321:13 in 'codegen_call_with_block'
from crystal/src/compiler/crystal/codegen/call.cr:32:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/fun.cr:167:11 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
from crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
from crystal/src/compiler/crystal/codegen/call.cr:454:12 in 'codegen_call'
from crystal/src/compiler/crystal/codegen/call.cr:35:7 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:436:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:665:9 in 'visit'
from crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:2279:7 in 'accept'
from crystal/src/compiler/crystal/codegen/codegen.cr:69:7 in 'codegen'
from crystal/src/compiler/crystal/codegen/codegen.cr:67:5 in 'codegen:debug:single_module'
from crystal/src/compiler/crystal/progress_tracker.cr:22:7 in 'codegen'
from crystal/src/compiler/crystal/compiler.cr:173:16 in 'compile'
from crystal/src/compiler/crystal/command.cr:309:3 in 'compile'
from crystal/src/compiler/crystal/command.cr:307:5 in 'compile'
from crystal/src/compiler/crystal/command.cr:192:5 in 'build'
from crystal/src/compiler/crystal/command.cr:74:7 in 'run'
from crystal/src/compiler/crystal/command.cr:51:5 in 'run'
from crystal/src/compiler/crystal/command.cr:50:3 in 'run'
from crystal/src/compiler/crystal.cr:11:1 in '__crystal_main'
from crystal/src/crystal/main.cr:115:5 in 'main_user_code'
from crystal/src/crystal/main.cr:101:7 in 'main'
from crystal/src/crystal/main.cr:127:3 in 'main'
from /usr/lib/libc.so.6 in '??'
from /usr/lib/libc.so.6 in '__libc_start_main'
from ../sysdeps/x86_64/start.S:117 in '_start'
from ???
Error: you've found a bug in the Crystal compiler. Please open an issue, including source code that will allow us to reproduce the bug: https://github.com/crystal-lang/crystal/issues
Yes, it probably a avram issue, anyway, i report it here, i guess it can be improve from compiler?
I can reproduce it on a kemal + avaram project. for the discuss, can check here