diff --git a/src/Lib/Script/Ast/IrType.cc b/src/Lib/Script/Ast/IrType.cc
index 23e8b6df27050af5496a24135d5cb07eef6d83d8..9b9b0312b2402591d80a7a9d9d551672b40fb2de 100644
--- a/src/Lib/Script/Ast/IrType.cc
+++ b/src/Lib/Script/Ast/IrType.cc
@@ -120,11 +120,17 @@ IrTAss::parse(std::vector<Token> *)
 
 namespace Vivy::Script
 {
+IrTOption::IrTOption(IrOption *opt) noexcept
+    : selfInnerOption(opt)
+{
+}
+
 IrType::Type
 IrTOption::type() const noexcept
 {
     return Type::Option;
 }
+
 const IrOption *
 IrTOption::innerType() const noexcept
 {
diff --git a/src/Lib/Script/Ast/IrType.hh b/src/Lib/Script/Ast/IrType.hh
index 24497e12e790ca7da5bc6b62b2acaaec8efae371..e6f9ad3eaf64d96fcb5fd50d45b3641a30cb69fc 100644
--- a/src/Lib/Script/Ast/IrType.hh
+++ b/src/Lib/Script/Ast/IrType.hh
@@ -52,6 +52,8 @@ class IrTOption final : public IrType {
 
     IrOption *selfInnerOption = nullptr;
 
+    IrTOption(IrOption *) noexcept;
+
 public:
     Type type() const noexcept override;
     const IrOption *innerType() const noexcept;