Skip to content

Commit

Permalink
Merge pull request mongrel2#15 from jubarajborgohain/develop
Browse files Browse the repository at this point in the history
Display a hint to the user that they may be missing a ')' in their config file
  • Loading branch information
zedshaw committed Jun 20, 2011
2 parents 8944853 + 78331f7 commit da01662
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 53 deletions.
109 changes: 56 additions & 53 deletions tools/m2sh/src/parser.c
Expand Up @@ -157,40 +157,40 @@ static const YYMINORTYPE yyzerominor = { 0 };
** yy_default[] Default action for each state.
*/
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 20, 21, 22, 26, 14, 15, 37, 18, 3, 12,
/* 10 */ 31, 13, 20, 21, 22, 26, 30, 15, 67, 7,
/* 20 */ 39, 12, 34, 13, 38, 23, 24, 25, 1, 27,
/* 30 */ 23, 24, 25, 32, 23, 24, 25, 6, 35, 23,
/* 40 */ 24, 25, 36, 23, 24, 25, 16, 17, 40, 19,
/* 50 */ 29, 14, 8, 14, 9, 28, 10, 2, 33, 16,
/* 60 */ 17, 11, 4, 68, 5,
/* 0 */ 26, 27, 28, 32, 15, 14, 6, 1, 3, 13,
/* 10 */ 37, 12, 26, 27, 28, 32, 11, 14, 67, 7,
/* 20 */ 23, 13, 4, 12, 33, 29, 30, 31, 5, 19,
/* 30 */ 29, 30, 31, 16, 17, 20, 29, 30, 31, 40,
/* 40 */ 25, 9, 16, 17, 15, 39, 22, 29, 30, 31,
/* 50 */ 38, 29, 30, 31, 15, 21, 2, 24, 34, 10,
/* 60 */ 18, 36, 35, 68, 68, 68, 68, 68, 8,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 2, 3, 4, 5, 5, 7, 27, 19, 10, 11,
/* 10 */ 12, 13, 2, 3, 4, 5, 19, 7, 17, 18,
/* 20 */ 19, 11, 27, 13, 20, 21, 22, 23, 25, 20,
/* 30 */ 21, 22, 23, 20, 21, 22, 23, 26, 20, 21,
/* 40 */ 22, 23, 20, 21, 22, 23, 2, 3, 0, 1,
/* 50 */ 19, 5, 24, 5, 10, 9, 10, 6, 14, 2,
/* 60 */ 3, 8, 15, 28, 15,
/* 0 */ 2, 3, 4, 5, 5, 7, 26, 25, 10, 11,
/* 10 */ 12, 13, 2, 3, 4, 5, 8, 7, 17, 18,
/* 20 */ 19, 11, 6, 13, 20, 21, 22, 23, 15, 20,
/* 30 */ 21, 22, 23, 2, 3, 20, 21, 22, 23, 0,
/* 40 */ 1, 10, 2, 3, 5, 14, 20, 21, 22, 23,
/* 50 */ 20, 21, 22, 23, 5, 27, 15, 19, 9, 10,
/* 60 */ 27, 19, 19, 28, 28, 28, 28, 28, 24,
};
#define YY_SHIFT_USE_DFLT (-3)
#define YY_SHIFT_MAX 17
static const signed char yy_shift_ofst[] = {
/* 0 */ -1, -2, 10, 10, 10, 10, 44, 48, 46, 57,
/* 10 */ -1, -3, -3, -3, 51, 53, 47, 49,
/* 0 */ -1, -2, 10, 10, 10, 10, 31, 39, 49, 40,
/* 10 */ -1, -3, -3, -3, 8, 16, 13, 41,
};
#define YY_REDUCE_USE_DFLT (-22)
#define YY_REDUCE_USE_DFLT (-21)
#define YY_REDUCE_MAX 13
static const signed char yy_reduce_ofst[] = {
/* 0 */ 1, 4, 9, 13, 18, 22, -21, -12, -3, -5,
/* 10 */ 31, 28, 3, 11,
/* 0 */ 1, 26, 15, 30, 4, 9, 28, 38, 42, 33,
/* 10 */ 43, 44, -20, -18,
};
static const YYACTIONTYPE yy_default[] = {
/* 0 */ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
/* 10 */ 66, 55, 59, 63, 66, 66, 66, 66, 41, 43,
/* 20 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
/* 30 */ 54, 56, 57, 60, 61, 64, 65, 62, 58, 42,
/* 10 */ 66, 55, 63, 59, 66, 66, 66, 66, 61, 64,
/* 20 */ 65, 62, 58, 42, 41, 43, 44, 45, 46, 47,
/* 30 */ 48, 49, 50, 51, 52, 53, 54, 56, 57, 60,
};
#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))

Expand Down Expand Up @@ -419,28 +419,28 @@ static void yy_destructor(
case 14: /* RBRACKET */
case 15: /* COLON */
{
#line 26 "src/parser.y"
#line 29 "src/parser.y"
Token_destroy((yypminor->yy0));
#line 425 "src/parser.c"
}
break;
case 19: /* assignment */
{
#line 55 "src/parser.y"
#line 58 "src/parser.y"
free((yypminor->yy35));
#line 432 "src/parser.c"
}
break;
case 24: /* parameters */
{
#line 66 "src/parser.y"
#line 69 "src/parser.y"
AST_destroy((yypminor->yy9));
#line 439 "src/parser.c"
}
break;
case 27: /* hash_pair */
{
#line 106 "src/parser.y"
#line 109 "src/parser.y"
free((yypminor->yy27));
#line 446 "src/parser.c"
}
Expand Down Expand Up @@ -615,7 +615,7 @@ static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
/* Here code is inserted which will execute if the parser
** stack every overflows */
#line 22 "src/parser.y"
#line 25 "src/parser.y"

log_err("There was a stack overflow at line: %d", state->line_number);
#line 622 "src/parser.c"
Expand Down Expand Up @@ -756,148 +756,148 @@ static void yy_reduce(
** break;
*/
case 0: /* config ::= vars */
#line 28 "src/parser.y"
#line 31 "src/parser.y"
{ state->settings = yymsp[0].minor.yy9; }
#line 762 "src/parser.c"
break;
case 1: /* vars ::= vars assignment */
#line 32 "src/parser.y"
#line 35 "src/parser.y"
{
yygotominor.yy9 = tst_insert(yymsp[-1].minor.yy9, bdata(yymsp[0].minor.yy35->key->data), blength(yymsp[0].minor.yy35->key->data), yymsp[0].minor.yy35);
}
#line 769 "src/parser.c"
break;
case 2: /* vars ::= assignment */
#line 37 "src/parser.y"
#line 40 "src/parser.y"
{
yygotominor.yy9 = tst_insert(yygotominor.yy9, bdata(yymsp[0].minor.yy35->key->data), blength(yymsp[0].minor.yy35->key->data), yymsp[0].minor.yy35);
}
#line 776 "src/parser.c"
break;
case 3: /* vars ::= vars EOF */
#line 41 "src/parser.y"
#line 44 "src/parser.y"
{ yygotominor.yy9 = yymsp[-1].minor.yy9; yy_destructor(yypParser,1,&yymsp[0].minor);
}
#line 782 "src/parser.c"
break;
case 4: /* expr ::= QSTRING */
#line 45 "src/parser.y"
#line 48 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_QSTRING, yymsp[0].minor.yy0); }
#line 787 "src/parser.c"
break;
case 5: /* expr ::= PATTERN */
#line 46 "src/parser.y"
#line 49 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_PATTERN, yymsp[0].minor.yy0); }
#line 792 "src/parser.c"
break;
case 6: /* expr ::= NUMBER */
#line 47 "src/parser.y"
#line 50 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_NUMBER, yymsp[0].minor.yy0); }
#line 797 "src/parser.c"
break;
case 7: /* expr ::= class */
#line 48 "src/parser.y"
#line 51 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_CLASS, yymsp[0].minor.yy29); }
#line 802 "src/parser.c"
break;
case 8: /* expr ::= list */
#line 49 "src/parser.y"
#line 52 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_LIST, yymsp[0].minor.yy18); }
#line 807 "src/parser.c"
break;
case 9: /* expr ::= hash */
#line 50 "src/parser.y"
#line 53 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_HASH, yymsp[0].minor.yy9); }
#line 812 "src/parser.c"
break;
case 10: /* expr ::= IDENT */
#line 51 "src/parser.y"
#line 54 "src/parser.y"
{ yygotominor.yy48 = Value_create(VAL_REF, yymsp[0].minor.yy0); }
#line 817 "src/parser.c"
break;
case 11: /* assignment ::= IDENT EQ expr */
#line 56 "src/parser.y"
#line 59 "src/parser.y"
{
yygotominor.yy35 = malloc(sizeof(Pair)); yygotominor.yy35->key = yymsp[-2].minor.yy0; yygotominor.yy35->value = yymsp[0].minor.yy48;
yy_destructor(yypParser,6,&yymsp[-1].minor);
}
#line 825 "src/parser.c"
break;
case 12: /* class ::= CLASS LPAREN parameters RPAREN */
#line 63 "src/parser.y"
#line 66 "src/parser.y"
{ yygotominor.yy29 = calloc(sizeof(Class), 1); yygotominor.yy29->id = -1; yygotominor.yy29->ident = yymsp[-3].minor.yy0; yygotominor.yy29->params = yymsp[-1].minor.yy9; yy_destructor(yypParser,8,&yymsp[-2].minor);
yy_destructor(yypParser,9,&yymsp[0].minor);
}
#line 832 "src/parser.c"
break;
case 13: /* parameters ::= parameters COMMA assignment */
#line 68 "src/parser.y"
#line 71 "src/parser.y"
{ yygotominor.yy9 = tst_insert(yymsp[-2].minor.yy9, bdata(yymsp[0].minor.yy35->key->data), blength(yymsp[0].minor.yy35->key->data), yymsp[0].minor.yy35); yy_destructor(yypParser,10,&yymsp[-1].minor);
}
#line 838 "src/parser.c"
break;
case 14: /* parameters ::= parameters assignment */
#line 71 "src/parser.y"
#line 74 "src/parser.y"
{ yygotominor.yy9 = tst_insert(yymsp[-1].minor.yy9, bdata(yymsp[0].minor.yy35->key->data), blength(yymsp[0].minor.yy35->key->data), yymsp[0].minor.yy35); }
#line 843 "src/parser.c"
break;
case 15: /* parameters ::= */
case 23: /* hash_elements ::= */ yytestcase(yyruleno==23);
#line 74 "src/parser.y"
#line 77 "src/parser.y"
{ yygotominor.yy9 = NULL; }
#line 849 "src/parser.c"
break;
case 16: /* list ::= LBRACE list_elements RBRACE */
#line 78 "src/parser.y"
#line 81 "src/parser.y"
{ yygotominor.yy18 = yymsp[-1].minor.yy18; yy_destructor(yypParser,11,&yymsp[-2].minor);
yy_destructor(yypParser,12,&yymsp[0].minor);
}
#line 856 "src/parser.c"
break;
case 17: /* list_elements ::= list_elements COMMA expr */
#line 82 "src/parser.y"
#line 85 "src/parser.y"
{ yygotominor.yy18 = yymsp[-2].minor.yy18; list_append(yygotominor.yy18, lnode_create(yymsp[0].minor.yy48)); yy_destructor(yypParser,10,&yymsp[-1].minor);
}
#line 862 "src/parser.c"
break;
case 18: /* list_elements ::= list_elements expr */
#line 85 "src/parser.y"
#line 88 "src/parser.y"
{ yygotominor.yy18 = yymsp[-1].minor.yy18; list_append(yygotominor.yy18, lnode_create(yymsp[0].minor.yy48)); }
#line 867 "src/parser.c"
break;
case 19: /* list_elements ::= */
#line 88 "src/parser.y"
#line 91 "src/parser.y"
{ yygotominor.yy18 = list_create(LISTCOUNT_T_MAX); }
#line 872 "src/parser.c"
break;
case 20: /* hash ::= LBRACKET hash_elements RBRACKET */
#line 92 "src/parser.y"
#line 95 "src/parser.y"
{ yygotominor.yy9 = yymsp[-1].minor.yy9; yy_destructor(yypParser,13,&yymsp[-2].minor);
yy_destructor(yypParser,14,&yymsp[0].minor);
}
#line 879 "src/parser.c"
break;
case 21: /* hash_elements ::= hash_elements COMMA hash_pair */
#line 96 "src/parser.y"
#line 99 "src/parser.y"
{ yygotominor.yy9 = tst_insert(yymsp[-2].minor.yy9, bdata(yymsp[0].minor.yy27->key->data), blength(yymsp[0].minor.yy27->key->data), yymsp[0].minor.yy27); yy_destructor(yypParser,10,&yymsp[-1].minor);
}
#line 885 "src/parser.c"
break;
case 22: /* hash_elements ::= hash_elements hash_pair */
#line 99 "src/parser.y"
#line 102 "src/parser.y"
{ yygotominor.yy9 = tst_insert(yymsp[-1].minor.yy9, bdata(yymsp[0].minor.yy27->key->data), blength(yymsp[0].minor.yy27->key->data), yymsp[0].minor.yy27); }
#line 890 "src/parser.c"
break;
case 24: /* hash_pair ::= QSTRING COLON expr */
#line 107 "src/parser.y"
#line 110 "src/parser.y"
{
yygotominor.yy27 = malloc(sizeof(Pair)); yygotominor.yy27->key = yymsp[-2].minor.yy0; yygotominor.yy27->value = yymsp[0].minor.yy48;
yy_destructor(yypParser,15,&yymsp[-1].minor);
}
#line 898 "src/parser.c"
break;
case 25: /* hash_pair ::= PATTERN COLON expr */
#line 110 "src/parser.y"
#line 113 "src/parser.y"
{
yygotominor.yy27 = malloc(sizeof(Pair)); yygotominor.yy27->key = yymsp[-2].minor.yy0; yygotominor.yy27->value = yymsp[0].minor.yy48;
yy_destructor(yypParser,15,&yymsp[-1].minor);
Expand Down Expand Up @@ -966,8 +966,11 @@ static void yy_syntax_error(
#define TOKEN (yyminor.yy0)
#line 18 "src/parser.y"

if( !TOKEN ) {
log_err("Reached the end of file so it seems like you are missing a ')'");
}
state->error = 1;
#line 971 "src/parser.c"
#line 974 "src/parser.c"
ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
}

Expand Down
3 changes: 3 additions & 0 deletions tools/m2sh/src/parser.y
Expand Up @@ -16,6 +16,9 @@
%extra_argument {ParserState *state}

%syntax_error {
if( !TOKEN ) {
log_err("Reached the end of file so it seems like you are missing a ')'");
}
state->error = 1;
}

Expand Down

0 comments on commit da01662

Please sign in to comment.