Fix tests.
This commit is contained in:
		
							parent
							
								
									0e4b913312
								
							
						
					
					
						commit
						680a8e0283
					
				@ -264,6 +264,7 @@ typedef struct svalue_s {
 | 
			
		||||
#define DECLFLAG_ENUMROOT        0x08 // Multi-dimensional arrays should have an enumroot.
 | 
			
		||||
#define DECLFLAG_MAYBE_FUNCTION  0x10 // Might be a named function.
 | 
			
		||||
#define DECLFLAG_DYNAMIC_ARRAYS  0x20 // Dynamic arrays are allowed.
 | 
			
		||||
#define DECLFLAG_OLD             0x40 // Known old-style declaration.
 | 
			
		||||
#define DECLMASK_NAMED_DECL      (DECLFLAG_ARGUMENT | DECLFLAG_VARIABLE | DECLFLAG_MAYBE_FUNCTION)
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
 | 
			
		||||
@ -1478,8 +1478,12 @@ static void dodecl(const token_t *tok)
 | 
			
		||||
  int fpublic = (tok->id == tPUBLIC);
 | 
			
		||||
  int fstock = (tok->id == tSTOCK);
 | 
			
		||||
  int fstatic = (tok->id == tSTATIC);
 | 
			
		||||
 | 
			
		||||
  int flags = DECLFLAG_MAYBE_FUNCTION | DECLFLAG_VARIABLE | DECLFLAG_ENUMROOT;
 | 
			
		||||
  if (tok->id == tNEW)
 | 
			
		||||
    flags |= DECLFLAG_OLD;
 | 
			
		||||
  
 | 
			
		||||
  parse_decl(&decl, DECLFLAG_MAYBE_FUNCTION|DECLFLAG_VARIABLE|DECLFLAG_ENUMROOT);
 | 
			
		||||
  parse_decl(&decl, flags);
 | 
			
		||||
 | 
			
		||||
  if (!decl.opertok && (tok->id == tNEW || decl.has_postdims || !lexpeek('('))) {
 | 
			
		||||
    if (tok->id == tNEW && decl.is_new)
 | 
			
		||||
@ -2119,7 +2123,9 @@ static void declloc(int tokid)
 | 
			
		||||
  int fstatic = (tokid == tSTATIC);
 | 
			
		||||
  declinfo_t decl;
 | 
			
		||||
 | 
			
		||||
  const int declflags = DECLFLAG_VARIABLE | DECLFLAG_ENUMROOT | DECLFLAG_DYNAMIC_ARRAYS;
 | 
			
		||||
  int declflags = DECLFLAG_VARIABLE | DECLFLAG_ENUMROOT | DECLFLAG_DYNAMIC_ARRAYS;
 | 
			
		||||
  if (tokid == tNEW || tokid == tDECL)
 | 
			
		||||
    declflags |= DECLFLAG_OLD;
 | 
			
		||||
 | 
			
		||||
  parse_decl(&decl, declflags);
 | 
			
		||||
 | 
			
		||||
@ -3286,6 +3292,19 @@ static int parse_old_decl(declinfo_t *decl, int flags)
 | 
			
		||||
      if (decl->opertok == 0)
 | 
			
		||||
        strcpy(decl->name, "<unknown>");
 | 
			
		||||
    } else {
 | 
			
		||||
      if (!lexpeek(tSYMBOL)) {
 | 
			
		||||
        switch (lextok(&tok)) {
 | 
			
		||||
          case tOBJECT:
 | 
			
		||||
          case tCHAR:
 | 
			
		||||
          case tVOID:
 | 
			
		||||
          case tINT:
 | 
			
		||||
            error(143);
 | 
			
		||||
            break;
 | 
			
		||||
          default:
 | 
			
		||||
            lexpush();
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (expecttoken(tSYMBOL, &tok))
 | 
			
		||||
        strcpy(decl->name, tok.str);
 | 
			
		||||
      else
 | 
			
		||||
@ -3400,6 +3419,11 @@ int parse_decl(declinfo_t *decl, int flags)
 | 
			
		||||
  if (matchtoken(tCONST))
 | 
			
		||||
    decl->type.usage |= uCONST;
 | 
			
		||||
 | 
			
		||||
  // Sometimes we know ahead of time whether the declaration will be old, for
 | 
			
		||||
  // example, if preceded by tNEW or tDECL.
 | 
			
		||||
  if (flags & DECLFLAG_OLD)
 | 
			
		||||
    return parse_old_decl(decl, flags);
 | 
			
		||||
 | 
			
		||||
  // If parsing an argument, there are two simple checks for whether this is a
 | 
			
		||||
  // new or old-style declaration.
 | 
			
		||||
  if ((flags & DECLFLAG_ARGUMENT) && (lexpeek('&') || lexpeek('{')))
 | 
			
		||||
@ -6480,7 +6504,7 @@ static void statement(int *lastindent,int allow_decl)
 | 
			
		||||
      lexpush();
 | 
			
		||||
      autozero = TRUE;
 | 
			
		||||
      lastst = tNEW;
 | 
			
		||||
      declloc(tNEW);
 | 
			
		||||
      declloc(tok);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -6939,7 +6963,7 @@ static int dofor(void)
 | 
			
		||||
         */
 | 
			
		||||
        nestlevel++;
 | 
			
		||||
        autozero=1;
 | 
			
		||||
        declloc(tFOR); /* declare local variable */
 | 
			
		||||
        declloc(tok.id); /* declare local variable */
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        lexpush();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user