[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