Move is_new and has_postdims bits out of declinfo and into typeinfo.
This commit is contained in:
		
							parent
							
								
									b89bd36335
								
							
						
					
					
						commit
						2c31b99ce3
					
				@ -287,14 +287,14 @@ typedef struct {
 | 
			
		||||
  int numtags;       // Number of tags found.
 | 
			
		||||
  int ident;         // Either iREFERENCE, iARRAY, or iVARIABLE.
 | 
			
		||||
  char usage;        // Usage flags.
 | 
			
		||||
  bool is_new;       // New-style declaration.
 | 
			
		||||
  bool has_postdims; // Dimensions, if present, were in postfix position.
 | 
			
		||||
} typeinfo_t;
 | 
			
		||||
 | 
			
		||||
/* For parsing declarations. */
 | 
			
		||||
typedef struct {
 | 
			
		||||
  char name[sNAMEMAX + 1];
 | 
			
		||||
  typeinfo_t type;
 | 
			
		||||
  int is_new;        // New-style declaration.
 | 
			
		||||
  int has_postdims;  // Dimensions, if present, were in postfix position.
 | 
			
		||||
  int opertok;       // Operator token, if applicable.
 | 
			
		||||
} declinfo_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1451,8 +1451,8 @@ static void dodecl(const token_t *tok)
 | 
			
		||||
    decl.type.tag = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!decl.opertok && (tok->id == tNEW || decl.has_postdims || !lexpeek('('))) {
 | 
			
		||||
    if (tok->id == tNEW && decl.is_new)
 | 
			
		||||
  if (!decl.opertok && (tok->id == tNEW || decl.type.has_postdims || !lexpeek('('))) {
 | 
			
		||||
    if (tok->id == tNEW && decl.type.is_new)
 | 
			
		||||
      error(143);
 | 
			
		||||
    if (decl.type.tag & STRUCTTAG) {
 | 
			
		||||
      pstruct_t *pstruct = pstructs_find(pc_tagname(decl.type.tag));
 | 
			
		||||
@ -2030,7 +2030,7 @@ static void declglb(declinfo_t *decl,int fpublic,int fstatic,int fstock)
 | 
			
		||||
    if (!matchtoken(','))
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    if (decl->is_new)
 | 
			
		||||
    if (decl->type.is_new)
 | 
			
		||||
      reparse_new_decl(decl, DECLFLAG_VARIABLE|DECLFLAG_ENUMROOT);
 | 
			
		||||
    else
 | 
			
		||||
      reparse_old_decl(decl, DECLFLAG_VARIABLE|DECLFLAG_ENUMROOT);
 | 
			
		||||
@ -2221,7 +2221,7 @@ static void declloc(int tokid)
 | 
			
		||||
    if (!matchtoken(','))
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    if (decl.is_new)
 | 
			
		||||
    if (decl.type.is_new)
 | 
			
		||||
      reparse_new_decl(&decl, declflags);
 | 
			
		||||
    else
 | 
			
		||||
      reparse_old_decl(&decl, declflags);
 | 
			
		||||
@ -3168,7 +3168,7 @@ static void parse_old_array_dims(declinfo_t *decl, int flags)
 | 
			
		||||
    type->ident = iARRAY;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  decl->has_postdims = TRUE;
 | 
			
		||||
  decl->type.has_postdims = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int parse_old_decl(declinfo_t *decl, int flags)
 | 
			
		||||
@ -3310,7 +3310,7 @@ static int parse_new_decl(declinfo_t *decl, const token_t *first, int flags)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  decl->is_new = TRUE;
 | 
			
		||||
  decl->type.is_new = TRUE;
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3320,7 +3320,7 @@ static int reparse_new_decl(declinfo_t *decl, int flags)
 | 
			
		||||
  if (expecttoken(tSYMBOL, &tok))
 | 
			
		||||
    strcpy(decl->name, tok.str);
 | 
			
		||||
 | 
			
		||||
  if (decl->has_postdims) {
 | 
			
		||||
  if (decl->type.has_postdims) {
 | 
			
		||||
    // We have something like:
 | 
			
		||||
    //    int x[], y...
 | 
			
		||||
    //
 | 
			
		||||
@ -3330,7 +3330,7 @@ static int reparse_new_decl(declinfo_t *decl, int flags)
 | 
			
		||||
    decl->type.enumroot = NULL;
 | 
			
		||||
    decl->type.ident = iVARIABLE;
 | 
			
		||||
    decl->type.size = 0;
 | 
			
		||||
    decl->has_postdims = FALSE;
 | 
			
		||||
    decl->type.has_postdims = false;
 | 
			
		||||
    if (matchtoken('['))
 | 
			
		||||
      parse_old_array_dims(decl, flags);
 | 
			
		||||
  } else {
 | 
			
		||||
@ -3403,7 +3403,7 @@ int parse_decl(declinfo_t *decl, int flags)
 | 
			
		||||
        // This must be a newdecl, "x[] y" or "x[] &y", the latter of which
 | 
			
		||||
        // is illegal, but we flow it through the right path anyway.
 | 
			
		||||
        lexpush();
 | 
			
		||||
        decl->has_postdims = FALSE;
 | 
			
		||||
        decl->type.has_postdims = false;
 | 
			
		||||
        return parse_new_decl(decl, &ident.tok, flags);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -3532,7 +3532,7 @@ symbol *parse_inline_function(methodmap_t *map, const typeinfo_t *type, const ch
 | 
			
		||||
  } else {
 | 
			
		||||
    decl.type = *type;
 | 
			
		||||
  }
 | 
			
		||||
  decl.is_new = TRUE;
 | 
			
		||||
  decl.type.is_new = TRUE;
 | 
			
		||||
 | 
			
		||||
  const int *thistag = NULL;
 | 
			
		||||
  if (!is_ctor)
 | 
			
		||||
@ -5281,7 +5281,7 @@ static int newfunc(declinfo_t *decl, const int *thistag, int fpublic, int fstati
 | 
			
		||||
      lexpush();
 | 
			
		||||
    } else {
 | 
			
		||||
      // We require '{' for new methods.
 | 
			
		||||
      if (decl->is_new)
 | 
			
		||||
      if (decl->type.is_new)
 | 
			
		||||
        needtoken('{');
 | 
			
		||||
 | 
			
		||||
      /* Insert a separator so that comments following the statement will not
 | 
			
		||||
@ -5302,7 +5302,7 @@ static int newfunc(declinfo_t *decl, const int *thistag, int fpublic, int fstati
 | 
			
		||||
    if (sym->tag == pc_tag_void &&
 | 
			
		||||
        (sym->usage & uFORWARD) &&
 | 
			
		||||
        !decl->type.tag &&
 | 
			
		||||
        !decl->is_new)
 | 
			
		||||
        !decl->type.is_new)
 | 
			
		||||
    {
 | 
			
		||||
      // We got something like:
 | 
			
		||||
      //    forward void X();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user