@@ -70,13 +70,23 @@ EXPORT XplBool __WJEBool(WJElement container, const char *path, WJEAction action
7070 return (e -> value .boolean );
7171
7272 case WJR_TYPE_NUMBER :
73+ return (e -> value .number .d != 0 );
74+
75+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
76+ case WJR_TYPE_INTEGER :
77+ return (e -> value .number .i != 0 );
78+ #endif
79+
80+ /*
81+ case WJR_TYPE_NUMBER:
82+ case WJR_TYPE_INTEGER:
7383 if (e->value.number.hasDecimalPoint) {
7484 return(e->value.number.d != 0);
7585 } else {
7686 return(e->value.number.i != 0);
7787 }
7888 break;
79-
89+ */
8090 default :
8191 case WJR_TYPE_UNKNOWN :
8292 case WJR_TYPE_NULL :
@@ -118,7 +128,7 @@ static void _WJESetNum(void *dest, size_t size, XplBool issigned, uint64 src, Xp
118128 if (!negative ) {
119129 (* ((int64 * ) dest )) = src ;
120130 } else {
121- (* ((int64 * ) dest )) = - src ;
131+ (* ((int64 * ) dest )) = - (( int64 ) src ) ;
122132 }
123133 } else {
124134 (* ((uint64 * ) dest )) = src ;
@@ -128,7 +138,7 @@ static void _WJESetNum(void *dest, size_t size, XplBool issigned, uint64 src, Xp
128138 if (!negative ) {
129139 (* ((int32 * ) dest )) = src ;
130140 } else {
131- (* ((int32 * ) dest )) = - src ;
141+ (* ((int32 * ) dest )) = - (( int64 ) src ) ;
132142 }
133143 } else {
134144 (* ((uint32 * ) dest )) = src ;
@@ -200,6 +210,9 @@ static void _WJENum(WJElement container, const char *path, WJEAction action, WJE
200210 break ;
201211
202212 case WJR_TYPE_NUMBER :
213+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
214+ case WJR_TYPE_INTEGER :
215+ #endif
203216 negative = FALSE;
204217
205218 if ((e -> value .number .i == _WJEGetNum (value , size , issigned , & negative )) &&
@@ -228,6 +241,9 @@ static void _WJENum(WJElement container, const char *path, WJEAction action, WJE
228241
229242 switch (e -> pub .type ) {
230243 case WJR_TYPE_NUMBER :
244+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
245+ case WJR_TYPE_INTEGER :
246+ #endif
231247 _WJESetNum (value , size , issigned , e -> value .number .i , e -> value .number .negative );
232248 return ;
233249
@@ -274,6 +290,11 @@ static void _WJENum(WJElement container, const char *path, WJEAction action, WJE
274290
275291 e -> value .number .i = _WJEGetNum (value , size , issigned , & e -> value .number .negative );
276292 e -> value .number .d = (double ) e -> value .number .i ;
293+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
294+ e -> pub .type = WJR_TYPE_INTEGER ;
295+ #else
296+ e -> pub .type = WJR_TYPE_NUMBER ;
297+ #endif
277298 return ;
278299 } else {
279300 /* Negate the value - It must NOT match the original */
@@ -368,6 +389,9 @@ EXPORT char * __WJEStringN(WJElement container, const char *path, WJEAction acti
368389
369390 default :
370391 case WJR_TYPE_NUMBER :
392+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
393+ case WJR_TYPE_INTEGER :
394+ #endif
371395 case WJR_TYPE_UNKNOWN :
372396 case WJR_TYPE_NULL :
373397 case WJR_TYPE_OBJECT :
@@ -602,7 +626,11 @@ EXPORT double __WJEDouble(WJElement container, const char *path, WJEAction actio
602626 break ;
603627
604628 case WJR_TYPE_NUMBER :
605- if (e -> value .number .hasDecimalPoint ) {
629+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
630+ case WJR_TYPE_INTEGER :
631+ #endif
632+ if (e -> pub .type == WJR_TYPE_NUMBER )
633+ {
606634 if (e -> value .number .negative ) {
607635 if (e -> value .number .d * -1.0 == value ) {
608636 break ;
@@ -612,7 +640,9 @@ EXPORT double __WJEDouble(WJElement container, const char *path, WJEAction actio
612640 break ;
613641 }
614642 }
615- } else {
643+ }
644+ else
645+ {
616646 if (e -> value .number .negative ) {
617647 if ((double ) e -> value .number .i * -1.0 == value ) {
618648 break ;
@@ -641,21 +671,23 @@ EXPORT double __WJEDouble(WJElement container, const char *path, WJEAction actio
641671
642672 switch (e -> pub .type ) {
643673 case WJR_TYPE_NUMBER :
644- if (e -> value .number .hasDecimalPoint ) {
645- if (e -> value .number .negative ) {
646- return (e -> value .number .d * -1.0 );
647- } else {
648- return (e -> value .number .d );
649- }
674+ if (e -> value .number .negative ) {
675+ return (e -> value .number .d * -1.0 );
650676 } else {
651- if (e -> value .number .negative ) {
652- return ((double ) e -> value .number .i * -1.0 );
653- } else {
654- return ((double ) e -> value .number .i );
655- }
677+ return (e -> value .number .d );
656678 }
657679 break ;
658680
681+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
682+ case WJR_TYPE_INTEGER :
683+ if (e -> value .number .negative ) {
684+ return ((double ) e -> value .number .i * -1.0 );
685+ } else {
686+ return ((double ) e -> value .number .i );
687+ }
688+ break ;
689+ #endif
690+
659691 case WJR_TYPE_BOOL :
660692 case WJR_TYPE_TRUE :
661693 case WJR_TYPE_FALSE :
@@ -686,7 +718,13 @@ EXPORT double __WJEDouble(WJElement container, const char *path, WJEAction actio
686718
687719 if (e -> value .number .d != (double ) e -> value .number .i ) {
688720 e -> value .number .hasDecimalPoint = TRUE;
721+ e -> pub .type = WJR_TYPE_NUMBER ;
689722 } else {
723+ #ifdef WJE_DISTINGUISH_INTEGER_TYPE
724+ e -> pub .type = WJR_TYPE_INTEGER ;
725+ #else
726+ e -> pub .type = WJR_TYPE_NUMBER ;
727+ #endif
690728 e -> value .number .hasDecimalPoint = FALSE;
691729 }
692730
0 commit comments