Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Fri, 4 Apr 2014, Sergei Gavrikov wrote: On Fri, 4 Apr 2014, Jan Nijtmans wrote: An additional issue is that binary/octal/hex numbers cannot contain dots, so they must be handled separately anyway. Done here: http://fossil-scm.org/index.html/info/a306f771d8 [the issues went away] Thank you very much! Now we have the comfortable way to manage any numbers on embedded targets. Hi Jan I found one exception, if there is digit 'b' (only) on the second position (only) in a hexadecimal number % fossil test-th-eval 'expr 0+0xb' 11 % fossil test-th-eval 'expr 0+0x0b' 0 % fossil test-th-eval 'expr 0+0x00b' 11 % fossil test-th-eval 'expr 0+0xbc' 188 % fossil test-th-eval 'expr 0+0x0bc' TH_ERROR: expected number, got: 0x0bc % fossil test-th-eval 'expr 0+0x00bc' 188 First, I thought that (0b) somehow shadows (0x), but this expressions also fail % fossil test-th-eval 'expr 0+0xab' 0 % fossil test-th-eval 'expr 0+0xabc' TH_ERROR: expected number, got: 0xabc Could you, please, take a look on this puzzle? Sergei ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-07 19:34 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: Hi Jan I found one exception, if there is digit 'b' (only) on the second position (only) in a hexadecimal number Could you, please, take a look on this puzzle? fossil-scm.org/index.html/info/b153caf67e Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Mon, 7 Apr 2014, Jan Nijtmans wrote: 2014-04-07 19:34 GMT+02:00 Sergei Gavrikov wrote: Could you, please, take a look on this puzzle? fossil-scm.org/index.html/info/b153caf67e Thanks! Regards, Sergei ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-04 10:57 GMT+02:00 Stephan Beal sgb...@googlemail.com: Maybe if you want to output your UUIDs in binary format... that might be fun to do each year on April 1st. http://fossil-scm.org/index.html/info/0b10 ;-) Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-03 23:23 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: It seems that should not reload isdigit validator for octal and binary numbers, otherwise early break on illegal digit returns bad tokens: for example, for 0b2 sequence thNextNumber() will return 0b token, for 0o8 sequence it will return 0o. But, tokens should be 0b2 or 0o8. Only hexadecimal numbers is a case to change the validator. An additional issue is that binary/octal/hex numbers cannot contain dots, so they must be handled separately anyway. Done here: http://fossil-scm.org/index.html/info/a306f771d8 Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Fri, Apr 4, 2014 at 10:28 AM, Jan Nijtmans jan.nijtm...@gmail.comwrote: An additional issue is that binary/octal/hex numbers cannot contain dots, so they must be handled separately anyway. Done here: http://fossil-scm.org/index.html/info/a306f771d8 Why can't n-ary numbers have dots? 0b1.11 is a perfectly valid representation of 1.75. Mark ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Fri, Apr 4, 2014 at 10:54 AM, Mark Janssen mpc.jans...@gmail.com wrote: Why can't n-ary numbers have dots? 0b1.11 is a perfectly valid representation of 1.75. i would argue that in the context of fossil, which rarely uses floating point numbers and never uses binary numbers, such a feature is YAGNI[1]. Maybe if you want to output your UUIDs in binary format... that might be fun to do each year on April 1st. [1] http://en.wikipedia.org/wiki/You_aren't_gonna_need_it -- - stephan beal http://wanderinghorse.net/home/stephan/ http://gplus.to/sgbeal Freedom is sloppy. But since tyranny's the only guaranteed byproduct of those who insist on a perfect world, freedom will have to do. -- Bigby Wolf ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-04 10:54 GMT+02:00 Mark Janssen mpc.jans...@gmail.com: Why can't n-ary numbers have dots? 0b1.11 is a perfectly valid representation of 1.75. $ tclsh8.6 % expr 0+0b1.1 missing operator at _@_ in expression 0+0b1_@_.1 % Since th1 is supposed to be a subset of Tcl, I don't think that th1 should invent any syntax which Tcl doesn't support. (Feel free to write a Tcl TIP, but I don't think it has a high chance to be accepted.) Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-04 11:06 GMT+02:00 Jan Nijtmans jan.nijtm...@gmail.com: Since th1 is supposed to be a subset of Tcl, I don't think that th1 should invent any syntax which Tcl doesn't support. (Feel free to write a Tcl TIP, but I don't think it has a high chance to be accepted.) Noted that the floating point format accepted for TH1 is a subset of that accepted by Tcl already: $ tclsh8.6 % expr 0+1. 1.0 % expr 0+1e-1 0.1 $ fossil test-th-eval expr 0+1. TH_ERROR: expected number, got: 1. $ fossil test-th-eval expr 0+1e-1 TH_ERROR: syntax error in expression: 0+1e-1 I'm not going to enhance fossil to accept the same floating point syntax as Tcl (since I simply don't need it), but if someone else needs it I wouldn't object. Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Fri, 4 Apr 2014, Jan Nijtmans wrote: An additional issue is that binary/octal/hex numbers cannot contain dots, so they must be handled separately anyway. Done here: http://fossil-scm.org/index.html/info/a306f771d8 [the issues went away] Thank you very much! Now we have the comfortable way to manage any numbers on embedded targets. Regards, Sergei ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
I think th1 happens to basically be a subset of Tcl, but is not designed to strictly be a subset of Tcl, fwiw. On 4/4/14, Jan Nijtmans jan.nijtm...@gmail.com wrote: 2014-04-04 10:54 GMT+02:00 Mark Janssen mpc.jans...@gmail.com: Why can't n-ary numbers have dots? 0b1.11 is a perfectly valid representation of 1.75. $ tclsh8.6 % expr 0+0b1.1 missing operator at _@_ in expression 0+0b1_@_.1 % Since th1 is supposed to be a subset of Tcl, I don't think that th1 should invent any syntax which Tcl doesn't support. (Feel free to write a Tcl TIP, but I don't think it has a high chance to be accepted.) Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users -- Brad Harder Method Logic Digital Consulting http://www.methodlogic.net/ http://twitter.com/bcharder ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
[fossil-users] TH1: support for octal and hexadecimal numbers in expressions
Hi I have a small patch (it is attached just for reference) to make TH1 use the integers also in other formats (hexadecimal and octal forms). For example, we would use the same expressions then % expr {010+10+0x10} 34 Could we add such a support in Fossil TH1? I believe the TH1 stands for Test Harness 1 and I use TH1 core with the extensions in my embedded projects and it is pity that I cannot just type 0x... :-) Could anyone take a look on the workaround, please? Well, Th_ToInt() become itself a bit more slow, but I think it is still more fast than strtoll(). At the least, I can say that the patch does not break the existing Fossil TH1 tests. Thanks for Fossil! SergeiIndex: src/th.c == --- src/th.c +++ src/th.c @@ -1867,10 +1867,12 @@ {|, OP_BITWISE_OR,10, ARG_INTEGER}, {0,0,0,0} }; +int th_ishexdig(char c); + /* ** The first part of the string (zInput,nInput) contains a number. ** Set *pnVarname to the number of bytes in the numeric string. */ static int thNextNumber( @@ -1877,15 +1879,20 @@ Th_Interp *interp, const char *zInput, int nInput, int *pnLiteral ){ - int i; + int i = 0; int seenDot = 0; - for(i=0; inInput; i++){ + int (*isdigit)(char) = th_isdigit; + if( nInput2 zInput[0]=='0' (zInput[1]=='x' || zInput[1]=='X') ){ +i=2; +isdigit = th_ishexdig; + } + for(; inInput; i++){ char c = zInput[i]; -if( (seenDot || c!='.') !th_isdigit(c) ) break; +if( (seenDot || c!='.') !isdigit(c) ) break; if( c=='.' ) seenDot = 1; } *pnLiteral = i; return TH_OK; } @@ -2411,11 +2418,12 @@ ** '\f' 0x0C ** '\r' 0x0D ** ** Whitespace characters have the 0x01 flag set. Decimal digits have the ** 0x2 flag set. Single byte printable characters have the 0x4 flag set. -** Alphabet characters have the 0x8 bit set. +** Alphabet characters have the 0x8 bit set. Hexadecimal digits have the +** 0x20 flag set. Octal digits have the 0x40 flag set. ** ** The special list characters have the 0x10 flag set ** **{ } [ ] \ ; ' ** @@ -2424,14 +2432,14 @@ */ static unsigned char aCharProp[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, /* 0x0. */ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1. */ 5, 4, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x2. */ - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 20, 4, 4, 4, 4, /* 0x3. */ - 4, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x4. */ +102,102,102,102,102,102,102,102,102,102, 4, 20, 4, 4, 4, 4, /* 0x3. */ + 4, 44, 44, 44, 44, 44, 44, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x4. */ 12, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 20, 20, 20, 4, 4, /* 0x5. */ - 4, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x6. */ + 4, 44, 44, 44, 44, 44, 44, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x6. */ 12, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 20, 4, 20, 4, 4, /* 0x7. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x8. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x9. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA. */ @@ -2455,10 +2463,16 @@ return (aCharProp[(unsigned char)c] 0x11); } int th_isalnum(char c){ return (aCharProp[(unsigned char)c] 0x0A); } +int th_ishexdig(char c){ + return (aCharProp[(unsigned char)c] 0x20); +} +int th_isoctdig(char c){ + return (aCharProp[(unsigned char)c] 0x40); +} #ifndef LONGDOUBLE_TYPE # define LONGDOUBLE_TYPE long double #endif @@ -2571,24 +2585,43 @@ ** interpreter result too. */ int Th_ToInt(Th_Interp *interp, const char *z, int n, int *piOut){ int i = 0; int iOut = 0; + int base = 10; + int (*isdigit)(char) = th_isdigit; if( n0 ){ n = th_strlen(z); } if( n0 (z[0]=='-' || z[0]=='+') ){ i = 1; } + if( n2 z[i]=='0' (z[i+1]=='x' || z[i+1]=='X') ){ +i += 2; +base = 16; +isdigit = th_ishexdig; + }else if( n1 z[i]=='0' ){ +i += 1; +base = 8; +isdigit = th_isoctdig; + } for(; in; i++){ -if( !th_isdigit(z[i]) ){ +int shift; +if( !isdigit(z[i]) ){ Th_ErrorMessage(interp, expected integer, got: \, z, n); return TH_ERROR; } -iOut = iOut * 10 + (z[i] - 48); +if( z[i]='a' ){ + shift = 87; +}else if( z[i]='A' ){ + shift = 55; +}else{ + shift = 48; +} +iOut = iOut * base + (z[i] - shift); } if( n0 z[0]=='-' ){ iOut *= -1; } ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-03 14:05 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: Could anyone take a look on the workaround, please? Well, Th_ToInt() become itself a bit more slow, but I think it is still more fast than strtoll(). At the least, I can say that the patch does not break the existing Fossil TH1 tests. I'm not fond of allowing a 0-prefix for octal numbers, better restrict it to 0o, which is more consistent with 0x for hex. Yes, Tcl 8.x allows it now, but in future Tcl versions it will most likely being abandoned. See: http://www.tcl.tk/cgi-bin/tct/tip/114 Other than that, it looks good to me. Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, 3 Apr 2014, Jan Nijtmans wrote: 2014-04-03 14:05 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: Could anyone take a look on the workaround, please? Well, Th_ToInt() become itself a bit more slow, but I think it is still more fast than strtoll(). At the least, I can say that the patch does not break the existing Fossil TH1 tests. I'm not fond of allowing a 0-prefix for octal numbers, better restrict it to 0o, which is more consistent with 0x for hex. Yes, Tcl 8.x allows it now, but in future Tcl versions it will most likely being abandoned. See: http://www.tcl.tk/cgi-bin/tct/tip/114 Good point. Thak you. With new patch TH1 works as Tcl 8.5 % expr {0o10+10+0x10} 34 % expr {0O10+10+0X10} 34 % expr {0o77+99+0xff} 417 Other than that, it looks good to me. Thanks you for review! SergeiIndex: src/th.c == --- src/th.c +++ src/th.c @@ -1867,10 +1867,13 @@ {|, OP_BITWISE_OR,10, ARG_INTEGER}, {0,0,0,0} }; +int th_ishexdig(char c); /* 0x* and 0X* */ +int th_isoctdig(char c); /* 0o* and 0O* */ + /* ** The first part of the string (zInput,nInput) contains a number. ** Set *pnVarname to the number of bytes in the numeric string. */ static int thNextNumber( @@ -1877,15 +1880,26 @@ Th_Interp *interp, const char *zInput, int nInput, int *pnLiteral ){ - int i; + int i = 0; int seenDot = 0; - for(i=0; inInput; i++){ + int (*isdigit)(char) = th_isdigit; + if( nInput2 ){ +if( zInput[0]=='0' (zInput[1]=='x' || zInput[1]=='X') ){ + i=2; + isdigit = th_ishexdig; +} +if( zInput[0]=='0' (zInput[1]=='o' || zInput[1]=='O') ){ + i=2; + isdigit = th_isoctdig; +} + } + for(; inInput; i++){ char c = zInput[i]; -if( (seenDot || c!='.') !th_isdigit(c) ) break; +if( (seenDot || c!='.') !isdigit(c) ) break; if( c=='.' ) seenDot = 1; } *pnLiteral = i; return TH_OK; } @@ -2411,11 +2425,12 @@ ** '\f' 0x0C ** '\r' 0x0D ** ** Whitespace characters have the 0x01 flag set. Decimal digits have the ** 0x2 flag set. Single byte printable characters have the 0x4 flag set. -** Alphabet characters have the 0x8 bit set. +** Alphabet characters have the 0x8 bit set. Hexadecimal digits have the +** 0x20 flag set. Octal digits have the 0x40 flag set. ** ** The special list characters have the 0x10 flag set ** **{ } [ ] \ ; ' ** @@ -2424,14 +2439,14 @@ */ static unsigned char aCharProp[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, /* 0x0. */ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1. */ 5, 4, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x2. */ - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 20, 4, 4, 4, 4, /* 0x3. */ - 4, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x4. */ +102,102,102,102,102,102,102,102,102,102, 4, 20, 4, 4, 4, 4, /* 0x3. */ + 4, 44, 44, 44, 44, 44, 44, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x4. */ 12, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 20, 20, 20, 4, 4, /* 0x5. */ - 4, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x6. */ + 4, 44, 44, 44, 44, 44, 44, 12,12, 12, 12, 12, 12, 12, 12, 12, /* 0x6. */ 12, 12, 12, 12, 12, 12, 12, 12,12, 12, 12, 20, 4, 20, 4, 4, /* 0x7. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x8. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x9. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA. */ @@ -2455,10 +2470,16 @@ return (aCharProp[(unsigned char)c] 0x11); } int th_isalnum(char c){ return (aCharProp[(unsigned char)c] 0x0A); } +int th_ishexdig(char c){ + return (aCharProp[(unsigned char)c] 0x20); +} +int th_isoctdig(char c){ + return (aCharProp[(unsigned char)c] 0x40); +} #ifndef LONGDOUBLE_TYPE # define LONGDOUBLE_TYPE long double #endif @@ -2571,24 +2592,46 @@ ** interpreter result too. */ int Th_ToInt(Th_Interp *interp, const char *z, int n, int *piOut){ int i = 0; int iOut = 0; + int base = 10; + int (*isdigit)(char) = th_isdigit; if( n0 ){ n = th_strlen(z); } if( n0 (z[0]=='-' || z[0]=='+') ){ i = 1; + } + if( n2 ){ +if( z[i]=='0' (z[i+1]=='x' || z[i+1]=='X') ){ + i += 2; + base = 16; + isdigit = th_ishexdig; +} +if( z[i]=='0' (z[i+1]=='o' || z[i+1]=='O') ){ + i += 2; + base = 8; + isdigit = th_isoctdig; +} } for(; in; i++){ -if( !th_isdigit(z[i]) ){ +int shift; +if( !isdigit(z[i]) ){ Th_ErrorMessage(interp, expected integer, got: \, z, n); return TH_ERROR; } -iOut = iOut * 10 + (z[i] - 48); +if( z[i]='a' ){ + shift = 87; +}else if( z[i]='A' ){ + shift = 55; +}else{ + shift = 48; +} +iOut =
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, Apr 3, 2014 at 3:10 PM, Sergei Gavrikov sergei.gavri...@gmail.comwrote: On Thu, 3 Apr 2014, Jan Nijtmans wrote:Good point. Thak you. With new patch TH1 works as Tcl 8.5 % expr {0o10+10+0x10} 34 % expr {0O10+10+0X10} 34 % expr {0o77+99+0xff} 417 Weird - i've never seen octals written that way, but i trust Jan's judgement implicitly regarding issued of TCL-ness. i'll get that patch added to the standalone th1 library in the next day or two. If you'd like access to that one, contact me off-list and i'll set you up (it's independent of the fossil tree, requires no license waiver, and this would be at least the second fix from you). Thanks, Sergei! -- - stephan beal http://wanderinghorse.net/home/stephan/ http://gplus.to/sgbeal Freedom is sloppy. But since tyranny's the only guaranteed byproduct of those who insist on a perfect world, freedom will have to do. -- Bigby Wolf ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-03 15:14 GMT+02:00 Stephan Beal sgb...@googlemail.com: Weird - i've never seen octals written that way, but i trust Jan's judgement implicitly regarding issued of TCL-ness. See: http://en.wikipedia.org/wiki/Octal Newer languages have been abandoning the prefix 0, as decimal numbers are often represented with leading zeroes. The prefix q was introduced to avoid the prefix o being mistaken for a zero, while the prefix 0o was introduced to avoid starting a numerical literal with an alphabetic character (like o or q), since these might cause the literal to be confused with a variable name. The prefix 0o also follows the model set by the prefix 0x used for hexadecimal literals in the C language; it is supported by Haskell,[10] OCaml,[11] Perl 6, [12] Python as of version 3.0,[13] Ruby,[14] Tcl as of version 9,[15] and it is intended to be supported by ECMAScript 6[16] (the prefix 0 has been discouraged in ECMAScript 3 and dropped in ECMAScript 5[17]). Actually, Tcl 8.5 was the first Tcl version which understands the 0o prefix, but since Tcl 8.4 is still in use somewhere availability is not guaranteed in all Tcl environments. That's my explanation why it isn't used very much. Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
2014-04-03 15:10 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: Good point. Thak you. With new patch TH1 works as Tcl 8.5 While on it, I added binary as well. http://www.fossil-scm.org/index.html/info/1f6734c30b Thanks! Regards, Jan Nijtmans ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, 3 Apr 2014, Jan Nijtmans wrote: 2014-04-03 15:10 GMT+02:00 Sergei Gavrikov sergei.gavri...@gmail.com: Good point. Thak you. With new patch TH1 works as Tcl 8.5 While on it, I added binary as well. http://www.fossil-scm.org/index.html/info/1f6734c30b Thanks! Sure, '0b' also will be helpful for folk who need to move the bits. However, TH does trig on such typos expr 0+0b2 expr 0+0o8 So, for the new three things I would enter three new bit sets for aCharProp[]. Sergei ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, 3 Apr 2014, Sergei Gavrikov wrote: TH does trig on such typos expr 0+0b2 expr 0+0o8 I mean % fossil test-th-eval 'expr 0+0b2' fossil: ../src/th.c:2140: exprMakeTree: Assertion `!apToken[jj] || !apToken[0]' failed. Aborted So, for the new three things I would enter three new bit sets for aCharProp[]. Jan, excuse me that was mistaken guess on the bit sets, the reason was my miss in src/th.c:thNexNumber(). The fix is attached. Thank you. SergeiIndex: src/th.c == --- src/th.c +++ src/th.c @@ -1879,31 +1879,35 @@ int nInput, int *pnLiteral ){ int i = 0; int seenDot = 0; + int seenPfx = 0; int (*isdigit)(char) = th_isdigit; if( nInput2 ){ if( zInput[0]=='0' (zInput[1]=='x' || zInput[1]=='X') ){ i=2; + seenPfx = 1; isdigit = th_ishexdig; } if( zInput[0]=='0' (zInput[1]=='o' || zInput[1]=='O') ){ i=2; + seenPfx = 1; isdigit = th_isoctdig; } if( zInput[0]=='0' (zInput[1]=='b' || zInput[1]=='B') ){ i=2; + seenPfx = 1; isdigit = th_isbindig; } } for(; inInput; i++){ char c = zInput[i]; if( (seenDot || c!='.') !isdigit(c) ) break; if( c=='.' ) seenDot = 1; } - *pnLiteral = i; + *pnLiteral = i - (seenPfx ? 2 : 0); return TH_OK; } /* ** Free an expression tree. ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, 3 Apr 2014, Sergei Gavrikov wrote: The fix is attached. ^^^ Please, forget it! Sorry. Sergei ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Re: [fossil-users] TH1: support for octal and hexadecimal numbers in expressions
On Thu, Apr 3, 2014 at 10:34 AM, Jan Nijtmans jan.nijtm...@gmail.comwrote: See: http://en.wikipedia.org/wiki/Octal Newer languages have been abandoning the prefix 0, as decimal numbers are often represented with leading zeroes. The prefix q was introduced to avoid the prefix o being mistaken for a zero, while the prefix 0o was introduced to avoid starting a numerical literal with an alphabetic character (like o or q), since these might cause the literal to be confused with a variable name. The prefix 0o also follows the model set by the prefix 0x used for hexadecimal literals in the C language; it is supported by Haskell,[10] OCaml,[11] Perl 6, [12] Python as of version 3.0,[13] Ruby,[14] Tcl as of version 9,[15] and it is intended to be supported by ECMAScript 6[16] (the prefix 0 has been discouraged in ECMAScript 3 and dropped in ECMAScript 5[17]). Interesting. Never heard of this trend, but 90% of my coding for work is in C/C++ as I develop SW for controlling electro-mechanical systems. I use 0x (for hexadecimal) and 0b (for binary), but almost never use any octal notation, as nearly all the integer values I work with are 8, 16 or 32 bits in length. (Occasionally, 24 bits) ___ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users