Do not use dynamic_cast if RTTI is disabled.
Review URL: https://codereview.appspot.com/7250043
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1808 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/common/debug.h b/src/common/debug.h
index 5f8f60f..23ee26d 100644
--- a/src/common/debug.h
+++ b/src/common/debug.h
@@ -99,6 +99,13 @@
#define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__)
#endif
+// A macro that determines whether an object has a given runtime type.
+#if !defined(NDEBUG) && (!defined(_MSC_VER) || defined(_CPPRTTI))
+#define HAS_DYNAMIC_TYPE(type, obj) (dynamic_cast<type >(obj) != NULL)
+#else
+#define HAS_DYNAMIC_TYPE(type, obj) true
+#endif
+
// A macro functioning as a compile-time assert to validate constant conditions
#define META_ASSERT(condition) typedef int COMPILE_TIME_ASSERT_##__LINE__[static_cast<bool>(condition)?1:-1]
diff --git a/src/common/version.h b/src/common/version.h
index ab5fec6..182bb34 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
#define MAJOR_VERSION 1
#define MINOR_VERSION 1
#define BUILD_VERSION 0
-#define BUILD_REVISION 1801
+#define BUILD_REVISION 1808
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/libGLESv2/renderer/Image11.cpp b/src/libGLESv2/renderer/Image11.cpp
index a8a703b..677b875 100644
--- a/src/libGLESv2/renderer/Image11.cpp
+++ b/src/libGLESv2/renderer/Image11.cpp
@@ -37,7 +37,7 @@
Image11 *Image11::makeImage11(Image *img)
{
- ASSERT(dynamic_cast<rx::Image11*>(img) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Image11*, img));
return static_cast<rx::Image11*>(img);
}
diff --git a/src/libGLESv2/renderer/Image9.cpp b/src/libGLESv2/renderer/Image9.cpp
index 10ae6f2..453b8fc 100644
--- a/src/libGLESv2/renderer/Image9.cpp
+++ b/src/libGLESv2/renderer/Image9.cpp
@@ -98,7 +98,7 @@
Image9 *Image9::makeImage9(Image *img)
{
- ASSERT(dynamic_cast<rx::Image9*>(img) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Image9*, img));
return static_cast<rx::Image9*>(img);
}
diff --git a/src/libGLESv2/renderer/IndexBuffer11.cpp b/src/libGLESv2/renderer/IndexBuffer11.cpp
index 48c0c64..5936b13 100644
--- a/src/libGLESv2/renderer/IndexBuffer11.cpp
+++ b/src/libGLESv2/renderer/IndexBuffer11.cpp
@@ -65,7 +65,7 @@
IndexBuffer11 *IndexBuffer11::makeIndexBuffer11(IndexBuffer *indexBuffer)
{
- ASSERT(dynamic_cast<IndexBuffer11*>(indexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer11*, indexBuffer));
return static_cast<IndexBuffer11*>(indexBuffer);
}
diff --git a/src/libGLESv2/renderer/IndexBuffer9.cpp b/src/libGLESv2/renderer/IndexBuffer9.cpp
index a0ab216..0472a13 100644
--- a/src/libGLESv2/renderer/IndexBuffer9.cpp
+++ b/src/libGLESv2/renderer/IndexBuffer9.cpp
@@ -86,7 +86,7 @@
IndexBuffer9 *IndexBuffer9::makeIndexBuffer9(IndexBuffer *indexBuffer)
{
- ASSERT(dynamic_cast<IndexBuffer9*>(indexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer9*, indexBuffer));
return static_cast<IndexBuffer9*>(indexBuffer);
}
diff --git a/src/libGLESv2/renderer/RenderTarget11.cpp b/src/libGLESv2/renderer/RenderTarget11.cpp
index 98cc78d..5f16b79 100644
--- a/src/libGLESv2/renderer/RenderTarget11.cpp
+++ b/src/libGLESv2/renderer/RenderTarget11.cpp
@@ -349,7 +349,7 @@
RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
{
- ASSERT(dynamic_cast<rx::RenderTarget11*>(target) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
return static_cast<rx::RenderTarget11*>(target);
}
diff --git a/src/libGLESv2/renderer/RenderTarget9.cpp b/src/libGLESv2/renderer/RenderTarget9.cpp
index f112f63..ff83c45 100644
--- a/src/libGLESv2/renderer/RenderTarget9.cpp
+++ b/src/libGLESv2/renderer/RenderTarget9.cpp
@@ -94,7 +94,7 @@
RenderTarget9 *RenderTarget9::makeRenderTarget9(RenderTarget *target)
{
- ASSERT(dynamic_cast<rx::RenderTarget9*>(target) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget9*, target));
return static_cast<rx::RenderTarget9*>(target);
}
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 7779a76..bc2dab8 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -142,7 +142,7 @@
Renderer11 *Renderer11::makeRenderer11(Renderer *renderer)
{
- ASSERT(dynamic_cast<rx::Renderer11*>(renderer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer11*, renderer));
return static_cast<rx::Renderer11*>(renderer);
}
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index e05d875..be10afd 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -164,7 +164,7 @@
Renderer9 *Renderer9::makeRenderer9(Renderer *renderer)
{
- ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer9*, renderer));
return static_cast<rx::Renderer9*>(renderer);
}
diff --git a/src/libGLESv2/renderer/ShaderExecutable11.cpp b/src/libGLESv2/renderer/ShaderExecutable11.cpp
index 4a944fe..971843e 100644
--- a/src/libGLESv2/renderer/ShaderExecutable11.cpp
+++ b/src/libGLESv2/renderer/ShaderExecutable11.cpp
@@ -67,7 +67,7 @@
ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
{
- ASSERT(dynamic_cast<ShaderExecutable11*>(executable) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable));
return static_cast<ShaderExecutable11*>(executable);
}
diff --git a/src/libGLESv2/renderer/ShaderExecutable9.cpp b/src/libGLESv2/renderer/ShaderExecutable9.cpp
index a9a079f..5efac3f 100644
--- a/src/libGLESv2/renderer/ShaderExecutable9.cpp
+++ b/src/libGLESv2/renderer/ShaderExecutable9.cpp
@@ -42,7 +42,7 @@
ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
{
- ASSERT(dynamic_cast<ShaderExecutable9*>(executable) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable9*, executable));
return static_cast<ShaderExecutable9*>(executable);
}
diff --git a/src/libGLESv2/renderer/SwapChain11.cpp b/src/libGLESv2/renderer/SwapChain11.cpp
index 98e251d..61832c3 100644
--- a/src/libGLESv2/renderer/SwapChain11.cpp
+++ b/src/libGLESv2/renderer/SwapChain11.cpp
@@ -592,7 +592,7 @@
SwapChain11 *SwapChain11::makeSwapChain11(SwapChain *swapChain)
{
- ASSERT(dynamic_cast<rx::SwapChain11*>(swapChain) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain11*, swapChain));
return static_cast<rx::SwapChain11*>(swapChain);
}
diff --git a/src/libGLESv2/renderer/SwapChain9.cpp b/src/libGLESv2/renderer/SwapChain9.cpp
index d2ac019..dc458c7 100644
--- a/src/libGLESv2/renderer/SwapChain9.cpp
+++ b/src/libGLESv2/renderer/SwapChain9.cpp
@@ -392,7 +392,7 @@
SwapChain9 *SwapChain9::makeSwapChain9(SwapChain *swapChain)
{
- ASSERT(dynamic_cast<rx::SwapChain9*>(swapChain) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain9*, swapChain));
return static_cast<rx::SwapChain9*>(swapChain);
}
diff --git a/src/libGLESv2/renderer/TextureStorage11.cpp b/src/libGLESv2/renderer/TextureStorage11.cpp
index 3ca5d63..a3a3ebf 100644
--- a/src/libGLESv2/renderer/TextureStorage11.cpp
+++ b/src/libGLESv2/renderer/TextureStorage11.cpp
@@ -33,7 +33,7 @@
TextureStorage11 *TextureStorage11::makeTextureStorage11(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage11*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11*, storage));
return static_cast<TextureStorage11*>(storage);
}
@@ -275,7 +275,7 @@
TextureStorage11_2D *TextureStorage11_2D::makeTextureStorage11_2D(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage11_2D*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_2D*, storage));
return static_cast<TextureStorage11_2D*>(storage);
}
@@ -453,7 +453,7 @@
TextureStorage11_Cube *TextureStorage11_Cube::makeTextureStorage11_Cube(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage11_Cube*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_Cube*, storage));
return static_cast<TextureStorage11_Cube*>(storage);
}
diff --git a/src/libGLESv2/renderer/TextureStorage9.cpp b/src/libGLESv2/renderer/TextureStorage9.cpp
index 1ba83a1..6b9bd07 100644
--- a/src/libGLESv2/renderer/TextureStorage9.cpp
+++ b/src/libGLESv2/renderer/TextureStorage9.cpp
@@ -33,7 +33,7 @@
TextureStorage9 *TextureStorage9::makeTextureStorage9(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage9*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9*, storage));
return static_cast<TextureStorage9*>(storage);
}
@@ -153,7 +153,7 @@
TextureStorage9_2D *TextureStorage9_2D::makeTextureStorage9_2D(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage9_2D*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_2D*, storage));
return static_cast<TextureStorage9_2D*>(storage);
}
@@ -258,7 +258,7 @@
TextureStorage9_Cube *TextureStorage9_Cube::makeTextureStorage9_Cube(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage9_Cube*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_Cube*, storage));
return static_cast<TextureStorage9_Cube*>(storage);
}
diff --git a/src/libGLESv2/renderer/VertexBuffer11.cpp b/src/libGLESv2/renderer/VertexBuffer11.cpp
index 6f118bb..169f295 100644
--- a/src/libGLESv2/renderer/VertexBuffer11.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer11.cpp
@@ -65,7 +65,7 @@
VertexBuffer11 *VertexBuffer11::makeVertexBuffer11(VertexBuffer *vetexBuffer)
{
- ASSERT(dynamic_cast<VertexBuffer11*>(vetexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer11*, vetexBuffer));
return static_cast<VertexBuffer11*>(vetexBuffer);
}
diff --git a/src/libGLESv2/renderer/VertexBuffer9.cpp b/src/libGLESv2/renderer/VertexBuffer9.cpp
index 6aae461..00caeee 100644
--- a/src/libGLESv2/renderer/VertexBuffer9.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer9.cpp
@@ -75,7 +75,7 @@
VertexBuffer9 *VertexBuffer9::makeVertexBuffer9(VertexBuffer *vertexBuffer)
{
- ASSERT(dynamic_cast<VertexBuffer9*>(vertexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer9*, vertexBuffer));
return static_cast<VertexBuffer9*>(vertexBuffer);
}