From 39ec94f0eb9f300660ea2778eece7dbc4573a4fb Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Sat, 18 May 2024 02:29:03 +0100 Subject: [PATCH] Warn whhen programmer failes to define prog_modes --- src/config_gram.y | 3 +++ src/lexer.l | 3 ++- src/libavrdude.h | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/config_gram.y b/src/config_gram.y index 99732fa5..831e72cb 100644 --- a/src/config_gram.y +++ b/src/config_gram.y @@ -275,6 +275,9 @@ prog_def : yyerror("programmer type not specified"); YYABORT; } + if(!current_prog->prog_modes && cx->lex_kw_is_programmer) + yywarning("programmer %s fails to specify prog_modes = PM_...;", + (char *) ldata(lfirst(current_prog->id))); for(LNODEID ln = lfirst(current_prog->id); ln; ln = lnext(ln)) { char *id = ldata(ln); if((existing_prog = locate_programmer(programmers, id))) { diff --git a/src/lexer.l b/src/lexer.l index b11928dd..bd474b64 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -226,7 +226,8 @@ part { yylval=NULL; ccap(); current_strct = COMP_AVRPART; return K_P pgm_enable { yylval=new_token(K_PGM_ENABLE); ccap(); return K_PGM_ENABLE; } pgmled { yylval=NULL; ccap(); return K_PGMLED; } pp_controlstack { yylval=NULL; ccap(); return K_PP_CONTROLSTACK; } -(programmer|serialadapter) { yylval=NULL; ccap(); current_strct = COMP_PROGRAMMER; return K_PROGRAMMER; } +(programmer|serialadapter) { yylval=NULL; ccap(); current_strct = COMP_PROGRAMMER; + cx->lex_kw_is_programmer = *yytext == 'p'; return K_PROGRAMMER; } rdyled { yylval=NULL; ccap(); return K_RDYLED; } read { yylval=new_token(K_READ); ccap(); return K_READ; } read_hi { yylval=new_token(K_READ_HI); ccap(); return K_READ_HI; } diff --git a/src/libavrdude.h b/src/libavrdude.h index cb361b23..6ed366ba 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -1581,7 +1581,7 @@ typedef struct { uint16_t dfu_wIndex; // A running number for USB messages // Static variable from config_gram.y - int cfgy_pin_name; // Temporary variable for grammar parsing + int cfgy_pin_name; // Temporary variable for grammar parsing // Static variable from ppi.c unsigned char ppi_shadow[3]; @@ -1622,6 +1622,9 @@ typedef struct { char usb_buf[USBDEV_MAX_XFER_3]; int usb_buflen, usb_bufptr; // @@@ Check whether usb_buflen needs initialising with -1 int usb_interface; + + // Variable connecting lexer.l and config_gram.y + int lex_kw_is_programmer; // Was the K_PROGRAMMER keyword "programmer"? } libavrdude_context; extern libavrdude_context *cx;