diff --git a/src/Lib/Script/Ast/IrAttribute.hh b/src/Lib/Script/Ast/IrAttribute.hh
index 0371e98976f10bac7304765fb6988fc2c7e14c64..a9f824a564e7d21cb931bd114c0dbe35ac68a616 100644
--- a/src/Lib/Script/Ast/IrAttribute.hh
+++ b/src/Lib/Script/Ast/IrAttribute.hh
@@ -22,7 +22,7 @@ class IrAttribute : public IrElement {
 
 public:
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     std::vector<StrV> attribute(const std::string &name) const noexcept;
     std::vector<StrV> attribute(StrV askedName) const noexcept;
diff --git a/src/Lib/Script/Ast/IrCallableSignature.cc b/src/Lib/Script/Ast/IrCallableSignature.cc
index 563fad09378b1893e0057b42eccb3bb322077bf5..e0846b23c5694e65195eea535669bfcffda0b1d0 100644
--- a/src/Lib/Script/Ast/IrCallableSignature.cc
+++ b/src/Lib/Script/Ast/IrCallableSignature.cc
@@ -11,7 +11,7 @@ IrCallableSignature::toString() const noexcept
 void
 IrCallableSignature::parse(std::vector<Token> *)
 {
-    throw std::logic_error("Not implemented");
+    throw std::logic_error("IrCallableSignature::parse => Not implemented");
 }
 
 const std::vector<IrType *> &
diff --git a/src/Lib/Script/Ast/IrCallableSignature.hh b/src/Lib/Script/Ast/IrCallableSignature.hh
index 7b03626dadec3c3dc5e899e5fed9b51359d630ac..4100da33d745b00bb4a67529a38f83af94a80b7f 100644
--- a/src/Lib/Script/Ast/IrCallableSignature.hh
+++ b/src/Lib/Script/Ast/IrCallableSignature.hh
@@ -17,7 +17,7 @@ private:
 
 public:
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     const std::vector<IrType *> &inTypes() const noexcept;
     const IrType *retType() const noexcept;
diff --git a/src/Lib/Script/Ast/IrElement.hh b/src/Lib/Script/Ast/IrElement.hh
index cc70e75689d149debf53496af795f4f75b845031..5ee9aa8e41cab9e6ea7e40b82391c9c2f7edfd7b 100644
--- a/src/Lib/Script/Ast/IrElement.hh
+++ b/src/Lib/Script/Ast/IrElement.hh
@@ -123,7 +123,6 @@ public:
     void setAttribute(IrAttribute *a) noexcept;
 
     virtual std::string toString() const noexcept = 0;
-    virtual void parse(std::vector<Token> *)      = 0;
 
     /*
     ** Get attributes for an element!
diff --git a/src/Lib/Script/Ast/IrExpression.cc b/src/Lib/Script/Ast/IrExpression.cc
index 7669714d229d8eb7b7a7ffe0fc74b57e45556fef..967812df4b06e43f2a40dde55509e22ac217f5a1 100644
--- a/src/Lib/Script/Ast/IrExpression.cc
+++ b/src/Lib/Script/Ast/IrExpression.cc
@@ -78,12 +78,6 @@ IrEVariableRef::toString() const noexcept
 {
     return "IrEVariableRef";
 }
-
-void
-IrEVariableRef::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 /*
@@ -168,12 +162,6 @@ IrEConstExpr::toString() const noexcept
         case IrType::PrimitiveType::Bool: return inner.boolean ? std::string("true") : std::string("false");
     }
 }
-
-void
-IrEConstExpr::parse(std::vector<Token> *)
-{
-    throw std::logic_error("IrEConstExpr::parse Not implemented");
-}
 }
 
 /*
@@ -188,12 +176,6 @@ IrECall::toString() const noexcept
     return "IrECall";
 }
 
-void
-IrECall::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
-
 const IrFunction *IrECall::call() const noexcept
 {
     return callPtr;
@@ -212,12 +194,6 @@ IrECompOp::toString() const noexcept
 {
     return "IrECompOp";
 }
-
-void
-IrECompOp::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 namespace Vivy::Script
@@ -227,12 +203,6 @@ IrEArithmeticOp::toString() const noexcept
 {
     return "IrEArithmeticOp";
 }
-
-void
-IrEArithmeticOp::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 namespace Vivy::Script
@@ -242,10 +212,4 @@ IrELogicOp::toString() const noexcept
 {
     return "IrELogicOp";
 }
-
-void
-IrELogicOp::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
diff --git a/src/Lib/Script/Ast/IrExpression.hh b/src/Lib/Script/Ast/IrExpression.hh
index 95688f629b1c407bf0b2f5e00d5d9d228dd30949..2de5505aedb32cce7f2a60c0bf391a0297fa820d 100644
--- a/src/Lib/Script/Ast/IrExpression.hh
+++ b/src/Lib/Script/Ast/IrExpression.hh
@@ -24,7 +24,7 @@ protected:
 
 public:
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     Type type() const noexcept;
     virtual IrType *innerType() const noexcept;
diff --git a/src/Lib/Script/Ast/IrFunction.cc b/src/Lib/Script/Ast/IrFunction.cc
index 99bab6d965cd40ec4915e0a0c7d2e95cb6c2d740..dc7ce0c496dd6c72a8ba74f8d665aa654dfe04df 100644
--- a/src/Lib/Script/Ast/IrFunction.cc
+++ b/src/Lib/Script/Ast/IrFunction.cc
@@ -11,12 +11,6 @@ IrFunction::IrFunction(StrV name, const std::vector<IrType *> &argInTypes, const
 {
 }
 
-void
-IrFunction::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
-
 const IrModule *
 IrFunction::parent() const noexcept
 {
@@ -64,12 +58,6 @@ IrImportedFunction::toString() const noexcept
     return "IrImportedFunction";
 }
 
-void
-IrImportedFunction::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Unsuported parse operation on imported function");
-}
-
 IrFunction::Type
 IrImportedFunction::type() const noexcept
 {
diff --git a/src/Lib/Script/Ast/IrFunction.hh b/src/Lib/Script/Ast/IrFunction.hh
index 9ba35e0fa1f1205bca8786f1cf107042641152ff..fb4446bc6f0d60c2e5f19ce25578b56b8516cb03 100644
--- a/src/Lib/Script/Ast/IrFunction.hh
+++ b/src/Lib/Script/Ast/IrFunction.hh
@@ -24,7 +24,6 @@ public:
     IrModule *parent() noexcept override;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
     const IrType *retType() const noexcept;
     const std::vector<IrType *> &args() const noexcept;
     StrV name() const noexcept;
@@ -43,8 +42,6 @@ class IrImportedFunction : public IrFunction {
 
     IrImportedFunction(IrModule *p, const IrFunction *original, StrV name) noexcept;
 
-    void parse(std::vector<Token> *) override;
-
 public:
     std::string toString() const noexcept override;
     Type type() const noexcept override;
diff --git a/src/Lib/Script/Ast/IrImport.hh b/src/Lib/Script/Ast/IrImport.hh
index 6f79fdcd455cc56c3bbc428a08db63b6dcef3906..401e2cf0b18e752ba984d43c18e4e9c3b1229644 100644
--- a/src/Lib/Script/Ast/IrImport.hh
+++ b/src/Lib/Script/Ast/IrImport.hh
@@ -50,7 +50,7 @@ public:
     const IrModule *parent() const noexcept override;
     IrModule *parent() noexcept override;
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     Type type() const noexcept { return importType; }
     const IrElement *imported() const noexcept { return importedElement; }
diff --git a/src/Lib/Script/Ast/IrInstruction.hh b/src/Lib/Script/Ast/IrInstruction.hh
index 832c23976a6b6a67514efa8317f8ce50f5b8b4b1..1ee058c1587a835f447b3b472d5ad888dd846157 100644
--- a/src/Lib/Script/Ast/IrInstruction.hh
+++ b/src/Lib/Script/Ast/IrInstruction.hh
@@ -10,6 +10,6 @@ private:
 
 public:
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 };
 }
diff --git a/src/Lib/Script/Ast/IrJob.cc b/src/Lib/Script/Ast/IrJob.cc
index d6d393bc3f89aad38e0aeacc46a4da70f6192e7f..6f5fdc586a0b573d8c240bd2bcbf611ed57b9ba4 100644
--- a/src/Lib/Script/Ast/IrJob.cc
+++ b/src/Lib/Script/Ast/IrJob.cc
@@ -51,12 +51,6 @@ IrImportedJob::toString() const noexcept
     return "IrJob";
 }
 
-void
-IrJob::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
-
 IrJob::Type
 IrImportedJob::type() const noexcept
 {
@@ -105,12 +99,6 @@ IrJob::type() const noexcept
     return Type::Local;
 }
 
-void
-IrImportedJob::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Unsuported parse operation on imported job");
-}
-
 const IrInstruction *
 IrJob::body() const noexcept
 {
diff --git a/src/Lib/Script/Ast/IrJob.hh b/src/Lib/Script/Ast/IrJob.hh
index 28b59b9852bfc6dcf6e6361f16aa4db9c6e59235..800fea3941bcee12d8e384ac8976976af54b3311 100644
--- a/src/Lib/Script/Ast/IrJob.hh
+++ b/src/Lib/Script/Ast/IrJob.hh
@@ -40,7 +40,6 @@ public:
     IrModule *parent() noexcept override;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
 
     const std::vector<IrType *> &args() const noexcept;
     const IrOption *options() const noexcept;
@@ -67,8 +66,6 @@ class IrImportedJob : public IrJob {
 
     IrImportedJob(IrModule *p, IrJob *original, StrV name) noexcept;
 
-    void parse(std::vector<Token> *) override;
-
 public:
     std::string toString() const noexcept override;
     Type type() const noexcept override;
diff --git a/src/Lib/Script/Ast/IrModule.hh b/src/Lib/Script/Ast/IrModule.hh
index 7da7b612e97202386d45d4b2b8b4b510bdf07d46..75c386e39631f4bd330e3f6160166be8558bc36f 100644
--- a/src/Lib/Script/Ast/IrModule.hh
+++ b/src/Lib/Script/Ast/IrModule.hh
@@ -22,7 +22,7 @@ public:
     IrRoot *parent() noexcept override;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     StrV name() const noexcept { return moduleName; }
 
diff --git a/src/Lib/Script/Ast/IrOption.hh b/src/Lib/Script/Ast/IrOption.hh
index 6e4fae6d57bbc1b27a2ddf178ccc2527929ad764..7057ceac12a29b2b21e4238cb4467cf3fa8abc2f 100644
--- a/src/Lib/Script/Ast/IrOption.hh
+++ b/src/Lib/Script/Ast/IrOption.hh
@@ -45,7 +45,7 @@ public:
     bool isEmpty() const noexcept;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 
     static IrOption *empty() noexcept;
 };
diff --git a/src/Lib/Script/Ast/IrRoot.hh b/src/Lib/Script/Ast/IrRoot.hh
index 6d31e20722afa3316bfe412de1a77e6154d1bbaa..1c4d5d87d3a313e0e219a10f34970d2d24c1e147 100644
--- a/src/Lib/Script/Ast/IrRoot.hh
+++ b/src/Lib/Script/Ast/IrRoot.hh
@@ -16,7 +16,7 @@ public:
     IrRoot *parent() noexcept override;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *tokens) override;
+    void parse(std::vector<Token> *tokens);
 
     const IrModule *module(const std::string &name) const noexcept;
     IrModule *module(const std::string &name) noexcept;
diff --git a/src/Lib/Script/Ast/IrType.cc b/src/Lib/Script/Ast/IrType.cc
index 9b9b0312b2402591d80a7a9d9d551672b40fb2de..972e4a8b5f06d8efcb178621c4bc9745b5eef2e6 100644
--- a/src/Lib/Script/Ast/IrType.cc
+++ b/src/Lib/Script/Ast/IrType.cc
@@ -106,12 +106,6 @@ void IrTAss::assertInnerType(AssType type) const
         throw std::runtime_error("Expected inner type " + std::to_string(static_cast<int>(t)) + " but was type " + std::to_string(static_cast<int>(innerType())));
     }
 }
-
-void
-IrTAss::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 /*
@@ -142,12 +136,6 @@ IrTOption::toString() const noexcept
 {
     return "IrTOption";
 }
-
-void
-IrTOption::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 /*
diff --git a/src/Lib/Script/Ast/IrType.hh b/src/Lib/Script/Ast/IrType.hh
index e6f9ad3eaf64d96fcb5fd50d45b3641a30cb69fc..7b09d2b741a73383215e30d18671c859ed3a0c4e 100644
--- a/src/Lib/Script/Ast/IrType.hh
+++ b/src/Lib/Script/Ast/IrType.hh
@@ -44,7 +44,6 @@ public:
     unsigned int getArrayDimensionAt(unsigned int level) const;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
 };
 
 class IrTOption final : public IrType {
@@ -59,7 +58,6 @@ public:
     const IrOption *innerType() const noexcept;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
 };
 
 class IrTPrimitive final : public IrType {
@@ -87,7 +85,7 @@ public:
     unsigned int getArrayDimensionAt(unsigned int level) const;
 
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
+    void parse(std::vector<Token> *);
 };
 
 [[maybe_unused]] static bool
diff --git a/src/Lib/Script/Ast/IrVariable.cc b/src/Lib/Script/Ast/IrVariable.cc
index b45064437ec60f0821dabcee27a15e119acf17fb..573c0130ec6358a86246950b69cbe20f82ecf83f 100644
--- a/src/Lib/Script/Ast/IrVariable.cc
+++ b/src/Lib/Script/Ast/IrVariable.cc
@@ -37,12 +37,6 @@ IrVPrimitive::toString() const noexcept
 {
     return "IrVPrimitive";
 }
-
-void
-IrVPrimitive::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
 
 namespace Vivy::Script
@@ -58,10 +52,4 @@ IrVTable::toString() const noexcept
 {
     return "IrVTable";
 }
-
-void
-IrVTable::parse(std::vector<Token> *)
-{
-    throw std::logic_error("Not implemented");
-}
 }
diff --git a/src/Lib/Script/Ast/IrVariable.hh b/src/Lib/Script/Ast/IrVariable.hh
index 6ca0a278eb1f117079186dd2c66db1e52a944eae..161fa99e63f01c19804e8092f509153c7dff853f 100644
--- a/src/Lib/Script/Ast/IrVariable.hh
+++ b/src/Lib/Script/Ast/IrVariable.hh
@@ -24,7 +24,6 @@ class IrVPrimitive : public IrVariable {
 public:
     Type type() const noexcept override;
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
 };
 
 class IrVTable : public IrVariable {
@@ -33,6 +32,5 @@ class IrVTable : public IrVariable {
 public:
     Type type() const noexcept override;
     std::string toString() const noexcept override;
-    void parse(std::vector<Token> *) override;
 };
 }