Issue with raven.cr and Hash/Array inheritance
mamantoha opened this issue · 1 comments
mamantoha commented
Hi.
I face an issue when trying to use raven.cr with jennifer.cr.
Module validation failed: Function return type does not match operand type of return inst!
ret %"(Array(AnyHash::JSONTypes::Value) | Bool | Float32 | Float64 | Hash(String | Symbol, AnyHash::JSONTypes::Value)+ | Int128 | Int16 | Int32 | Int64 | Int8 | JSON::Any | Set(AnyHash::JSONTypes::Value) | String | Symbol | Time | UInt128 | UInt16 | UInt32 | UInt64 | UInt8 | Nil)" %1, !dbg !21
%"(Array(AnyHash::JSONTypes::Value) | Bool | Float32 | Float64 | Hash(String | Symbol, AnyHash::JSONTypes::Value) | Int128 | Int16 | Int32 | Int64 | Int8 | JSON::Any | Set(AnyHash::JSONTypes::Value) | String | Symbol | Time | UInt128 | UInt16 | UInt32 | UInt64 | UInt8 | Nil)" = type { i32, [3 x i64] } (Exception)
from ???
from ???
from ???
from ???
from ???
from ???
from ???
from ???
from ???
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
I made some research, and this is the minimal code to reproduce this issue.
require "raven"
class MyHash(V) < Hash(String, V)
# Code.
# Actually, it doesn't matter.
end
begin
1 / 0
rescue ex : DivisionByZeroError
Raven.capture(ex)
end
The same with Array
.
Sija commented
Yep, that's a known limitation of raven.cr (yet inheriting from stdlib imo is a design smell).
I'd suggest to refactor the offending code with composition in mind.
For more information see:
- amberframework/amber#930 (such refactor in amberframework)
- crystal-lang/crystal#6253 (related crystal issue)
PRs fixing this behavior are always welcome :)