LCOV - code coverage report
Current view: top level - src/test/isolation - specscanner.l (source / functions) Hit Total Coverage
Test: PostgreSQL 13devel Lines: 6 9 66.7 %
Date: 2019-11-15 23:07:02 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : %{
       2             : /*-------------------------------------------------------------------------
       3             :  *
       4             :  * specscanner.l
       5             :  *    a lexical scanner for an isolation test specification
       6             :  *
       7             :  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
       8             :  * Portions Copyright (c) 1994, Regents of the University of California
       9             :  *
      10             :  *-------------------------------------------------------------------------
      11             :  */
      12             : 
      13             : static int  yyline = 1;         /* line number for error reporting */
      14             : 
      15             : #define LITBUF_INIT 1024        /* initial size of litbuf */
      16             : static char *litbuf = NULL;
      17             : static size_t litbufsize = 0;
      18             : static size_t litbufpos = 0;
      19             : 
      20             : static void addlitchar(char c);
      21             : 
      22             : /* LCOV_EXCL_START */
      23             : 
      24             : %}
      25             : 
      26             : %option 8bit
      27             : %option never-interactive
      28             : %option nodefault
      29             : %option noinput
      30             : %option nounput
      31             : %option noyywrap
      32             : %option warn
      33             : %option prefix="spec_yy"
      34             : 
      35             : 
      36             : %x sql
      37             : %x qstr
      38             : 
      39             : non_newline     [^\n\r]
      40             : space           [ \t\r\f]
      41             : 
      42             : comment         ("#"{non_newline}*)
      43             : 
      44             : %%
      45             : 
      46             : %{
      47             :     litbuf = pg_malloc(LITBUF_INIT);
      48             :     litbufsize = LITBUF_INIT;
      49             : %}
      50             : 
      51             : permutation     { return PERMUTATION; }
      52             : session         { return SESSION; }
      53             : setup           { return SETUP; }
      54             : step            { return STEP; }
      55             : teardown        { return TEARDOWN; }
      56             : 
      57             : [\n]            { yyline++; }
      58             : {comment}       { /* ignore */ }
      59             : {space}         { /* ignore */ }
      60             : 
      61             :  /* Quoted strings: "foo" */
      62             : \"             {
      63             :                     litbufpos = 0;
      64             :                     BEGIN(qstr);
      65             :                 }
      66             : <qstr>\"     {
      67             :                     litbuf[litbufpos] = '\0';
      68             :                     yylval.str = pg_strdup(litbuf);
      69             :                     BEGIN(INITIAL);
      70             :                     return(string_literal);
      71             :                 }
      72             : <qstr>.           { addlitchar(yytext[0]); }
      73             : <qstr>\n      { yyerror("unexpected newline in quoted string"); }
      74             : <qstr><<EOF>> { yyerror("unterminated quoted string"); }
      75             : 
      76             :  /* SQL blocks: { UPDATE ... } */
      77             : "{"{space}*       {
      78             : 
      79             :                     litbufpos = 0;
      80             :                     BEGIN(sql);
      81             :                 }
      82             : <sql>{space}*"}" {
      83             :                     litbuf[litbufpos] = '\0';
      84             :                     yylval.str = pg_strdup(litbuf);
      85             :                     BEGIN(INITIAL);
      86             :                     return(sqlblock);
      87             :                 }
      88             : <sql>.            {
      89             :                     addlitchar(yytext[0]);
      90             :                 }
      91             : <sql>\n           {
      92             :                     yyline++;
      93             :                     addlitchar(yytext[0]);
      94             :                 }
      95             : <sql><<EOF>>  {
      96             :                     yyerror("unterminated sql block");
      97             :                 }
      98             : 
      99             : .               {
     100             :                     fprintf(stderr, "syntax error at line %d: unexpected character \"%s\"\n", yyline, yytext);
     101             :                     exit(1);
     102             :                 }
     103             : %%
     104             : 
     105             : /* LCOV_EXCL_STOP */
     106             : 
     107             : static void
     108             : addlitchar(char c)
     109      222038 : {
     110             :     /* We must always leave room to add a trailing \0 */
     111             :     if (litbufpos >= litbufsize - 1)
     112      222038 :     {
     113             :         /* Double the size of litbuf if it gets full */
     114             :         litbufsize += litbufsize;
     115          10 :         litbuf = pg_realloc(litbuf, litbufsize);
     116          10 :     }
     117             :     litbuf[litbufpos++] = c;
     118      222038 : }
     119      222038 : 
     120             : void
     121             : yyerror(const char *message)
     122           0 : {
     123             :     fprintf(stderr, "%s at line %d\n", message, yyline);
     124           0 :     exit(1);
     125           0 : }

Generated by: LCOV version 1.13