From 16eeea252423713cefb41f3f8a306a96446849de Mon Sep 17 00:00:00 2001
From: Username404 <w.iron.zombie@gmail.com>
Date: Wed, 18 May 2022 18:56:54 +0200
Subject: [PATCH] Target.hpp: Use reinterpret_cast instead of dynamic_cast

CMakeLists.txt: Disable the reinterpret-base-class warning when using Clang

Signed-off-by: Username404 <w.iron.zombie@gmail.com>
---
 CMakeLists.txt                    | 2 +-
 src/headers/transpiler/Target.hpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f8cb8d8..d801f8c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -99,7 +99,7 @@ elseif(${IS_CLANG})
             set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fwhole-program-vtables")
         endif()
     endif()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -Wno-unqualified-std-cast-call")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -Wno-unqualified-std-cast-call -Wno-reinterpret-base-class")
     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fstrict-vtable-pointers")
 elseif(MSVC)
     if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MINIMAL_MSVC} AND NOT ${IGNORE_MINIMAL_COMPILER_VERSION})
diff --git a/src/headers/transpiler/Target.hpp b/src/headers/transpiler/Target.hpp
index d4d5fec..9e84a84 100644
--- a/src/headers/transpiler/Target.hpp
+++ b/src/headers/transpiler/Target.hpp
@@ -67,7 +67,7 @@ protected:
     }
     typedef function<void (const ParseTree& parsedTree, unsigned int& index)> task;
     #define make_task_base(start, type, captures, function_body) make_pair(type_index(typeid(type)), [captures](const ParseTree& parsedTree, unsigned int& index) { start; function_body })
-    #define make_task_base_R(T, C, F) make_task_base(const T& parseComponent = dynamic_cast<T&>(*parsedTree[index]), T, C, F)
+    #define make_task_base_R(T, C, F) make_task_base(const T& parseComponent = reinterpret_cast<T&>(*parsedTree[index]), T, C, F)
     #define make_task(T, F) make_task_base_R(T, this, F)
     #define make_task_noR(T, F) make_task_base(,T, this, F)
     #define make_nonlocal_task(T, F) make_task_base_R(T, , F)