sqmem.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. see copyright notice in squirrel.h
  3. */
  4. #include "sqpcheader.h"
  5. #ifndef SQ_EXCLUDE_DEFAULT_MEMFUNCTIONS
  6. #ifdef SQ_DEBUG_MEMORY
  7. int _sq_total_malloc = 0;
  8. int _sq_total_realloc = 0;
  9. int _sq_total_free = 0;
  10. #endif
  11. void *sq_vm_malloc(SQUnsignedInteger size){
  12. #ifdef SQ_DEBUG_MEMORY
  13. ++_sq_total_malloc;
  14. #endif
  15. return malloc(size);
  16. }
  17. void *sq_vm_realloc(void *p, SQUnsignedInteger SQ_UNUSED_ARG(oldsize), SQUnsignedInteger size){
  18. #ifdef SQ_DEBUG_MEMORY
  19. ++_sq_total_realloc;
  20. #endif
  21. return realloc(p, size);
  22. }
  23. void sq_vm_free(void *p, SQUnsignedInteger SQ_UNUSED_ARG(size)){
  24. #ifdef SQ_DEBUG_MEMORY
  25. ++_sq_total_free;
  26. #endif
  27. free(p);
  28. }
  29. #endif
  30. #ifdef CUSTOM_DELETE_OPERATOR
  31. //made public to allow link without libstdc++
  32. void operator delete(void *p, unsigned int len)
  33. {
  34. printf("DELETE SHOULD NOT BE CALLED %p : %d\n", p, (int)len);
  35. assert(0);
  36. }
  37. void operator delete(void *p, unsigned long len)
  38. {
  39. printf("DELETE SHOULD NOT BE CALLED %p : %d\n", p, (int)len);
  40. assert(0);
  41. }
  42. void operator delete(void *p, unsigned long long len)
  43. {
  44. printf("DELETE SHOULD NOT BE CALLED %p : %d\n", p, (int)len);
  45. assert(0);
  46. }
  47. void operator delete(void *p)
  48. {
  49. printf("DELETE SHOULD NOT BE CALLED %p\n", p);
  50. assert(0);
  51. }
  52. #endif
  53. #ifdef WITH_SQSTDCPP
  54. #include <stdio.h>
  55. #include <stdlib.h>
  56. // MSVC uses __cdecl calling convention for new/delete :-O
  57. #ifdef _MSC_VER
  58. # define NEWDEL_CALL __cdecl
  59. #else
  60. # define NEWDEL_CALL
  61. #endif
  62. extern "C" void __cxa_pure_virtual ()
  63. {
  64. puts("__cxa_pure_virtual called\n");
  65. abort ();
  66. }
  67. void * NEWDEL_CALL operator new (size_t size)
  68. {
  69. void *p = malloc (size);
  70. if(!p)
  71. {
  72. puts("not enough memory\n");
  73. abort ();
  74. }
  75. return p;
  76. }
  77. void * NEWDEL_CALL operator new [] (size_t size)
  78. {
  79. return ::operator new(size);
  80. }
  81. void NEWDEL_CALL operator delete (void *p)
  82. {
  83. if (p) free (p);
  84. }
  85. void NEWDEL_CALL operator delete [] (void *p)
  86. {
  87. if (p) free (p);
  88. }
  89. void NEWDEL_CALL operator delete (void *p, size_t)
  90. {
  91. if (p) free (p);
  92. }
  93. #endif // WITH_MYSTDCPP