PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/tcl/tclprimtypes.swg

#
Unknown | 239 lines | 219 code | 20 blank | 0 comment | 0 complexity | d47de7ab6c8f06f3645312f69aeba330 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* ------------------------------------------------------------
  2. * Primitive Types
  3. * ------------------------------------------------------------ */
  4. /* boolean */
  5. %fragment(SWIG_From_frag(bool),"header") {
  6. %define_as(SWIG_From_dec(bool), Tcl_NewBooleanObj)
  7. }
  8. %fragment(SWIG_AsVal_frag(bool),"header") {
  9. SWIGINTERN int
  10. SWIG_AsVal_dec(bool)(Tcl_Obj *obj, bool *val)
  11. {
  12. int v;
  13. if (Tcl_GetBooleanFromObj(0, obj, &v) == TCL_OK) {
  14. if (val) *val = v ? true : false;
  15. return SWIG_OK;
  16. }
  17. return SWIG_TypeError;
  18. }
  19. }
  20. /* long */
  21. %fragment(SWIG_From_frag(long),"header",
  22. fragment="<limits.h>") {
  23. SWIGINTERNINLINE Tcl_Obj*
  24. SWIG_From_dec(long)(long value)
  25. {
  26. if (((long) INT_MIN <= value) && (value <= (long) INT_MAX)) {
  27. return Tcl_NewIntObj(%numeric_cast(value,int));
  28. } else {
  29. return Tcl_NewLongObj(value);
  30. }
  31. }
  32. }
  33. %fragment(SWIG_AsVal_frag(long),"header") {
  34. SWIGINTERN int
  35. SWIG_AsVal_dec(long)(Tcl_Obj *obj, long* val)
  36. {
  37. long v;
  38. if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
  39. if (val) *val = (long) v;
  40. return SWIG_OK;
  41. }
  42. return SWIG_TypeError;
  43. }
  44. }
  45. /* unsigned long */
  46. %fragment(SWIG_From_frag(unsigned long),"header",
  47. fragment=SWIG_From_frag(long),
  48. fragment="<stdio.h>") {
  49. SWIGINTERNINLINE Tcl_Obj*
  50. SWIG_From_dec(unsigned long)(unsigned long value)
  51. {
  52. if (value < (unsigned long) LONG_MAX) {
  53. return SWIG_From(long)(%numeric_cast(value, long));
  54. } else {
  55. char temp[256];
  56. sprintf(temp, "%lu", value);
  57. return Tcl_NewStringObj(temp,-1);
  58. }
  59. }
  60. }
  61. %fragment(SWIG_AsVal_frag(unsigned long),"header",
  62. fragment="<limits.h>") {
  63. SWIGINTERN int
  64. SWIG_AsVal_dec(unsigned long)(Tcl_Obj *obj, unsigned long *val) {
  65. long v;
  66. if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
  67. if (v >= 0) {
  68. if (val) *val = (unsigned long) v;
  69. return SWIG_OK;
  70. }
  71. /* If v is negative, then this could be a negative number, or an
  72. unsigned value which doesn't fit in a signed long, so try to
  73. get it as a string so we can distinguish these cases. */
  74. }
  75. {
  76. int len = 0;
  77. const char *nptr = Tcl_GetStringFromObj(obj, &len);
  78. if (nptr && len > 0) {
  79. char *endptr;
  80. unsigned long v;
  81. if (*nptr == '-') return SWIG_OverflowError;
  82. errno = 0;
  83. v = strtoul(nptr, &endptr,0);
  84. if (nptr[0] == '\0' || *endptr != '\0')
  85. return SWIG_TypeError;
  86. if (v == ULONG_MAX && errno == ERANGE) {
  87. errno = 0;
  88. return SWIG_OverflowError;
  89. } else {
  90. if (*endptr == '\0') {
  91. if (val) *val = v;
  92. return SWIG_OK;
  93. }
  94. }
  95. }
  96. }
  97. return SWIG_TypeError;
  98. }
  99. }
  100. /* long long */
  101. %fragment(SWIG_From_frag(long long),"header",
  102. fragment=SWIG_From_frag(long),
  103. fragment="<limits.h>",
  104. fragment="<stdio.h>") {
  105. SWIGINTERNINLINE Tcl_Obj*
  106. SWIG_From_dec(long long)(long long value)
  107. {
  108. if (((long long) LONG_MIN <= value) && (value <= (long long) LONG_MAX)) {
  109. return SWIG_From(long)(%numeric_cast(value,long));
  110. } else {
  111. char temp[256];
  112. sprintf(temp, "%lld", value);
  113. return Tcl_NewStringObj(temp,-1);
  114. }
  115. }
  116. }
  117. %fragment(SWIG_AsVal_frag(long long),"header",
  118. fragment="<limits.h>",
  119. fragment="<stdlib.h>") {
  120. SWIGINTERN int
  121. SWIG_AsVal_dec(long long)(Tcl_Obj *obj, long long *val)
  122. {
  123. long v;
  124. if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
  125. if (val) *val = v;
  126. return SWIG_OK;
  127. } else {
  128. int len = 0;
  129. const char *nptr = Tcl_GetStringFromObj(obj, &len);
  130. if (nptr && len > 0) {
  131. char *endptr;
  132. long long v;
  133. errno = 0;
  134. v = strtoll(nptr, &endptr,0);
  135. if (nptr[0] == '\0' || *endptr != '\0')
  136. return SWIG_TypeError;
  137. if ((v == LLONG_MAX || v == LLONG_MIN) && errno == ERANGE) {
  138. errno = 0;
  139. return SWIG_OverflowError;
  140. } else {
  141. if (*endptr == '\0') {
  142. if (val) *val = v;
  143. return SWIG_OK;
  144. }
  145. }
  146. }
  147. }
  148. return SWIG_TypeError;
  149. }
  150. }
  151. /* unsigned long long */
  152. %fragment(SWIG_From_frag(unsigned long long),"header",
  153. fragment=SWIG_From_frag(long long),
  154. fragment="<limits.h>",
  155. fragment="<stdio.h>") {
  156. SWIGINTERNINLINE Tcl_Obj*
  157. SWIG_From_dec(unsigned long long)(unsigned long long value)
  158. {
  159. if (value < (unsigned long long) LONG_MAX) {
  160. return SWIG_From(long long)(%numeric_cast(value, long long));
  161. } else {
  162. char temp[256];
  163. sprintf(temp, "%llu", value);
  164. return Tcl_NewStringObj(temp,-1);
  165. }
  166. }
  167. }
  168. %fragment(SWIG_AsVal_frag(unsigned long long),"header",
  169. fragment=SWIG_AsVal_frag(unsigned long),
  170. fragment="<limits.h>",
  171. fragment="<stdlib.h>") {
  172. SWIGINTERN int
  173. SWIG_AsVal_dec(unsigned long long)(Tcl_Obj *obj, unsigned long long *val)
  174. {
  175. long v;
  176. if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
  177. if (val) *val = (unsigned long) v;
  178. return SWIG_OK;
  179. } else {
  180. int len = 0;
  181. const char *nptr = Tcl_GetStringFromObj(obj, &len);
  182. if (nptr && len > 0) {
  183. char *endptr;
  184. unsigned long long v;
  185. if (*nptr == '-') return SWIG_OverflowError;
  186. errno = 0;
  187. v = strtoull(nptr, &endptr,0);
  188. if (nptr[0] == '\0' || *endptr != '\0')
  189. return SWIG_TypeError;
  190. if (v == ULLONG_MAX && errno == ERANGE) {
  191. errno = 0;
  192. return SWIG_OverflowError;
  193. } else {
  194. if (*endptr == '\0') {
  195. if (val) *val = v;
  196. return SWIG_OK;
  197. }
  198. }
  199. }
  200. }
  201. return SWIG_TypeError;
  202. }
  203. }
  204. /* double */
  205. %fragment(SWIG_From_frag(double),"header") {
  206. %define_as(SWIG_From(double), Tcl_NewDoubleObj)
  207. }
  208. %fragment(SWIG_AsVal_frag(double),"header") {
  209. SWIGINTERN int
  210. SWIG_AsVal_dec(double)(Tcl_Obj *obj, double *val)
  211. {
  212. double v;
  213. if (Tcl_GetDoubleFromObj(0, obj, &v) == TCL_OK) {
  214. if (val) *val = v;
  215. return SWIG_OK;
  216. }
  217. return SWIG_TypeError;
  218. }
  219. }