[Tinyos-commits]
CVS: tinyos-1.x/tos/lib/VM/languages/motlle/standalone
lexer.l, 1.7, 1.8 types.c, 1.2, 1.3
David Gay
idgay at users.sourceforge.net
Tue Oct 25 16:08:55 PDT 2005
Update of /cvsroot/tinyos/tinyos-1.x/tos/lib/VM/languages/motlle/standalone
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24466/standalone
Modified Files:
lexer.l types.c
Log Message:
pick default language for mload
more scheme-like lexing (chars, #t, #f, number-radix prefixes)
more scheme-like constants
Index: lexer.l
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/tos/lib/VM/languages/motlle/standalone/lexer.l,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** lexer.l 25 Oct 2005 22:33:21 -0000 1.7
--- lexer.l 25 Oct 2005 23:08:52 -0000 1.8
***************
*** 174,178 ****
"..." { return ELLIPSIS; }
! <INITIAL,schemelex>'\\.' {
switch (yytext[2])
{
--- 174,178 ----
"..." { return ELLIPSIS; }
! '\\.' {
switch (yytext[2])
{
***************
*** 185,191 ****
return INTEGER;
}
! <INITIAL,schemelex>'[^\\]' { yylval.integer = (unsigned char) yytext[1]; return INTEGER; }
! <INITIAL,schemelex>-?({DIGIT}+|0[xX]{HEXDIGIT}+) {
if (!mudlle_strtoint(yytext, &yylval.integer))
log_error(lexloc, "Integer constant out of bounds.");
--- 185,191 ----
return INTEGER;
}
! '[^\\]' { yylval.integer = (unsigned char) yytext[1]; return INTEGER; }
! <INITIAL,schemelex>(#[bodx])?-?({DIGIT}+|0[xX]{HEXDIGIT}+) {
if (!mudlle_strtoint(yytext, &yylval.integer))
log_error(lexloc, "Integer constant out of bounds.");
***************
*** 244,247 ****
--- 244,253 ----
<schemelex>#\( { return '['; }
+ <schemelex>#\\space { yylval.integer = ' '; return INTEGER; }
+ <schemelex>#\\newline { yylval.integer = '\n'; return INTEGER; }
+ <schemelex>#\\. { yylval.integer = yytext[2]; return INTEGER; }
+ <schemelex>#t { yylval.integer = 1; return INTEGER; }
+ <schemelex>#f { yylval.integer = 0; return INTEGER; }
+
<INITIAL,schemelex>. { log_error(lexloc, "Bad character %s(%02x)", yytext, (unsigned char)yytext[0]); }
Index: types.c
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/tos/lib/VM/languages/motlle/standalone/types.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** types.c 30 Nov 2004 18:52:44 -0000 1.2
--- types.c 25 Oct 2005 23:08:52 -0000 1.3
***************
*** 183,191 ****
int n = 0;
int lim, limrad;
! int sign, radix;
while (isspace(*strp))
++strp;
if (*strp == '+' || *strp == '-')
sign = *(strp++) == '-' ? -1 : 1;
--- 183,205 ----
int n = 0;
int lim, limrad;
! int sign, radix = 10;
while (isspace(*strp))
++strp;
+ /* Just scheme's radix support */
+ if (strp[0] == '#')
+ {
+ switch (strp[1])
+ {
+ case 'b': radix = 2; break;
+ case 'o': radix = 8; break;
+ case 'd': radix = 10; break;
+ case 'x': radix = 16; break;
+ default: return 0;
+ }
+ strp += 2;
+ }
+
if (*strp == '+' || *strp == '-')
sign = *(strp++) == '-' ? -1 : 1;
***************
*** 193,201 ****
sign = 0;
- /* only allow the sign bit to be set if no + or - and radix != 10 */
-
- lim = (!sign ? (MAX_TAGGED_INT << 1) + 1 :
- sign == -1 ? -MIN_TAGGED_INT : MAX_TAGGED_INT);
-
if (*strp == '0' && *(strp + 1) == 'x')
{
--- 207,210 ----
***************
*** 203,212 ****
strp += 2;
}
! else
! {
! radix = 10;
! if (!sign)
! lim = MAX_TAGGED_INT;
! }
if (!*strp)
--- 212,223 ----
strp += 2;
}
!
! /* only allow the sign bit to be set if no + or - and radix != 10 */
!
! lim = (!sign ? (MAX_TAGGED_INT << 1) + 1 :
! sign == -1 ? -MIN_TAGGED_INT : MAX_TAGGED_INT);
!
! if (!sign && radix == 10)
! lim = MAX_TAGGED_INT;
if (!*strp)
More information about the Tinyos-commits
mailing list