Skip to content

Commit a09e0aa

Browse files
committed
fix: add missing %destructor for other JSGF objects
MAXIMUM DESTRUCTION!@!!
1 parent 5436249 commit a09e0aa

4 files changed

Lines changed: 99 additions & 52 deletions

File tree

src/lm/jsgf.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,20 @@ jsgf_grammar_free(jsgf_t * jsgf)
143143
ckd_free(jsgf);
144144
}
145145

146-
static void
146+
int
147147
jsgf_rhs_free(jsgf_rhs_t * rhs)
148148
{
149149
gnode_t *gn;
150150

151151
if (rhs == NULL)
152-
return;
152+
return 0;
153153

154154
jsgf_rhs_free(rhs->alt);
155155
for (gn = rhs->atoms; gn; gn = gnode_next(gn))
156156
jsgf_atom_free(gnode_ptr(gn));
157157
glist_free(rhs->atoms);
158158
ckd_free(rhs);
159+
return 0;
159160
}
160161

161162
jsgf_atom_t *

src/lm/jsgf_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ jsgf_rule_t *jsgf_optional_new(jsgf_t *jsgf, jsgf_rhs_t *exp);
125125
jsgf_rule_t *jsgf_define_rule(jsgf_t *jsgf, char *name, jsgf_rhs_t *rhs, int is_public);
126126
jsgf_rule_t *jsgf_import_rule(jsgf_t *jsgf, char *name);
127127

128+
int jsgf_rhs_free(jsgf_rhs_t * rhs);
128129
int jsgf_atom_free(jsgf_atom_t *atom);
129130
int jsgf_rule_free(jsgf_rule_t *rule);
130131
jsgf_rule_t *jsgf_rule_retain(jsgf_rule_t *rule);

src/lm/jsgf_parser.c

Lines changed: 92 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -544,10 +544,10 @@ static const yytype_int8 yytranslate[] =
544544
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
545545
static const yytype_uint8 yyrline[] =
546546
{
547-
0, 87, 87, 88, 89, 92, 95, 96, 97, 98,
548-
102, 105, 106, 109, 112, 113, 116, 117, 120, 121,
549-
126, 128, 132, 133, 137, 138, 141, 144, 147, 148,
550-
149, 150, 151, 152
547+
0, 90, 90, 91, 92, 95, 98, 99, 100, 101,
548+
105, 108, 109, 112, 115, 116, 119, 120, 123, 124,
549+
129, 131, 135, 136, 140, 141, 144, 147, 150, 151,
550+
152, 153, 154, 155
551551
};
552552
#endif
553553

@@ -909,6 +909,48 @@ yydestruct (const char *yymsg,
909909
#line 910 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
910910
break;
911911

912+
case YYSYMBOL_alternate_list: /* alternate_list */
913+
#line 86 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
914+
{ jsgf_rhs_free(((*yyvaluep).rhs)); }
915+
#line 916 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
916+
break;
917+
918+
case YYSYMBOL_rule_expansion: /* rule_expansion */
919+
#line 86 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
920+
{ jsgf_rhs_free(((*yyvaluep).rhs)); }
921+
#line 922 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
922+
break;
923+
924+
case YYSYMBOL_tagged_rule_item: /* tagged_rule_item */
925+
#line 87 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
926+
{ jsgf_atom_free(((*yyvaluep).atom)); }
927+
#line 928 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
928+
break;
929+
930+
case YYSYMBOL_rule_item: /* rule_item */
931+
#line 87 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
932+
{ jsgf_atom_free(((*yyvaluep).atom)); }
933+
#line 934 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
934+
break;
935+
936+
case YYSYMBOL_rule_group: /* rule_group */
937+
#line 85 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
938+
{ jsgf_rule_free(((*yyvaluep).rule)); }
939+
#line 940 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
940+
break;
941+
942+
case YYSYMBOL_rule_optional: /* rule_optional */
943+
#line 85 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
944+
{ jsgf_rule_free(((*yyvaluep).rule)); }
945+
#line 946 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
946+
break;
947+
948+
case YYSYMBOL_rule_atom: /* rule_atom */
949+
#line 87 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
950+
{ jsgf_atom_free(((*yyvaluep).atom)); }
951+
#line 952 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
952+
break;
953+
912954
default:
913955
break;
914956
}
@@ -1180,145 +1222,145 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
11801222
switch (yyn)
11811223
{
11821224
case 5: /* header: jsgf_header grammar_header */
1183-
#line 92 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1225+
#line 95 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
11841226
{ jsgf->name = (yyvsp[0].name); }
1185-
#line 1186 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1227+
#line 1228 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
11861228
break;
11871229

11881230
case 7: /* jsgf_header: HEADER TOKEN ';' */
1189-
#line 96 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1231+
#line 99 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
11901232
{ jsgf->version = (yyvsp[-1].name); }
1191-
#line 1192 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1233+
#line 1234 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
11921234
break;
11931235

11941236
case 8: /* jsgf_header: HEADER TOKEN TOKEN ';' */
1195-
#line 97 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1237+
#line 100 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
11961238
{ jsgf->version = (yyvsp[-2].name); jsgf->charset = (yyvsp[-1].name); }
1197-
#line 1198 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1239+
#line 1240 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
11981240
break;
11991241

12001242
case 9: /* jsgf_header: HEADER TOKEN TOKEN TOKEN ';' */
1201-
#line 98 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1243+
#line 101 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12021244
{ jsgf->version = (yyvsp[-3].name); jsgf->charset = (yyvsp[-2].name);
12031245
jsgf->locale = (yyvsp[-1].name); }
1204-
#line 1205 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1246+
#line 1247 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12051247
break;
12061248

12071249
case 10: /* grammar_header: GRAMMAR TOKEN ';' */
1208-
#line 102 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1250+
#line 105 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12091251
{ (yyval.name) = (yyvsp[-1].name); }
1210-
#line 1211 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1252+
#line 1253 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12111253
break;
12121254

12131255
case 13: /* import_statement: IMPORT RULENAME ';' */
1214-
#line 109 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1256+
#line 112 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12151257
{ jsgf_import_rule(jsgf, (yyvsp[-1].name)); ckd_free((yyvsp[-1].name)); }
1216-
#line 1217 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1258+
#line 1259 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12171259
break;
12181260

12191261
case 16: /* rule: RULENAME '=' alternate_list ';' */
1220-
#line 116 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1262+
#line 119 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12211263
{ jsgf_define_rule(jsgf, (yyvsp[-3].name), (yyvsp[-1].rhs), 0); ckd_free((yyvsp[-3].name)); }
1222-
#line 1223 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1264+
#line 1265 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12231265
break;
12241266

12251267
case 17: /* rule: PUBLIC RULENAME '=' alternate_list ';' */
1226-
#line 117 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1268+
#line 120 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12271269
{ jsgf_define_rule(jsgf, (yyvsp[-3].name), (yyvsp[-1].rhs), 1); ckd_free((yyvsp[-3].name)); }
1228-
#line 1229 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1270+
#line 1271 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12291271
break;
12301272

12311273
case 18: /* alternate_list: rule_expansion */
1232-
#line 120 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1274+
#line 123 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12331275
{ (yyval.rhs) = (yyvsp[0].rhs); (yyval.rhs)->atoms = glist_reverse((yyval.rhs)->atoms); }
1234-
#line 1235 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1276+
#line 1277 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12351277
break;
12361278

12371279
case 19: /* alternate_list: alternate_list '|' rule_expansion */
1238-
#line 121 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1280+
#line 124 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12391281
{ (yyval.rhs) = (yyvsp[0].rhs);
12401282
(yyval.rhs)->atoms = glist_reverse((yyval.rhs)->atoms);
12411283
(yyval.rhs)->alt = (yyvsp[-2].rhs); }
1242-
#line 1243 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1284+
#line 1285 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12431285
break;
12441286

12451287
case 20: /* rule_expansion: tagged_rule_item */
1246-
#line 126 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1288+
#line 129 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12471289
{ (yyval.rhs) = ckd_calloc(1, sizeof(*(yyval.rhs)));
12481290
(yyval.rhs)->atoms = glist_add_ptr((yyval.rhs)->atoms, (yyvsp[0].atom)); }
1249-
#line 1250 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1291+
#line 1292 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12501292
break;
12511293

12521294
case 21: /* rule_expansion: rule_expansion tagged_rule_item */
1253-
#line 128 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1295+
#line 131 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12541296
{ (yyval.rhs) = (yyvsp[-1].rhs);
12551297
(yyval.rhs)->atoms = glist_add_ptr((yyval.rhs)->atoms, (yyvsp[0].atom)); }
1256-
#line 1257 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1298+
#line 1299 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12571299
break;
12581300

12591301
case 23: /* tagged_rule_item: tagged_rule_item TAG */
1260-
#line 133 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1302+
#line 136 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12611303
{ (yyval.atom) = (yyvsp[-1].atom);
12621304
(yyval.atom)->tags = glist_add_ptr((yyval.atom)->tags, (yyvsp[0].name)); }
1263-
#line 1264 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1305+
#line 1306 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12641306
break;
12651307

12661308
case 25: /* rule_item: WEIGHT rule_atom */
1267-
#line 138 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1309+
#line 141 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12681310
{ (yyval.atom) = (yyvsp[0].atom); (yyval.atom)->weight = (yyvsp[-1].weight); }
1269-
#line 1270 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1311+
#line 1312 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12701312
break;
12711313

12721314
case 26: /* rule_group: '(' alternate_list ')' */
1273-
#line 141 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1315+
#line 144 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12741316
{ (yyval.rule) = jsgf_define_rule(jsgf, NULL, (yyvsp[-1].rhs), 0); }
1275-
#line 1276 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1317+
#line 1318 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12761318
break;
12771319

12781320
case 27: /* rule_optional: '[' alternate_list ']' */
1279-
#line 144 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1321+
#line 147 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12801322
{ (yyval.rule) = jsgf_optional_new(jsgf, (yyvsp[-1].rhs)); }
1281-
#line 1282 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1323+
#line 1324 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12821324
break;
12831325

12841326
case 28: /* rule_atom: TOKEN */
1285-
#line 147 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1327+
#line 150 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12861328
{ (yyval.atom) = jsgf_atom_new((yyvsp[0].name), 1.0); ckd_free((yyvsp[0].name)); }
1287-
#line 1288 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1329+
#line 1330 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12881330
break;
12891331

12901332
case 29: /* rule_atom: RULENAME */
1291-
#line 148 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1333+
#line 151 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12921334
{ (yyval.atom) = jsgf_atom_new((yyvsp[0].name), 1.0); ckd_free((yyvsp[0].name)); }
1293-
#line 1294 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1335+
#line 1336 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
12941336
break;
12951337

12961338
case 30: /* rule_atom: rule_group */
1297-
#line 149 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1339+
#line 152 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
12981340
{ (yyval.atom) = jsgf_atom_new((yyvsp[0].rule)->name, 1.0); }
1299-
#line 1300 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1341+
#line 1342 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
13001342
break;
13011343

13021344
case 31: /* rule_atom: rule_optional */
1303-
#line 150 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1345+
#line 153 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
13041346
{ (yyval.atom) = jsgf_atom_new((yyvsp[0].rule)->name, 1.0); }
1305-
#line 1306 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1347+
#line 1348 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
13061348
break;
13071349

13081350
case 32: /* rule_atom: rule_atom '*' */
1309-
#line 151 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1351+
#line 154 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
13101352
{ (yyval.atom) = jsgf_kleene_new(jsgf, (yyvsp[-1].atom), 0); }
1311-
#line 1312 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1353+
#line 1354 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
13121354
break;
13131355

13141356
case 33: /* rule_atom: rule_atom '+' */
1315-
#line 152 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1357+
#line 155 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
13161358
{ (yyval.atom) = jsgf_kleene_new(jsgf, (yyvsp[-1].atom), 1); }
1317-
#line 1318 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1359+
#line 1360 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
13181360
break;
13191361

13201362

1321-
#line 1322 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
1363+
#line 1364 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.c"
13221364

13231365
default: break;
13241366
}
@@ -1511,7 +1553,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
15111553
return yyresult;
15121554
}
15131555

1514-
#line 155 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
1556+
#line 158 "/home/dhd/work/pocketsphinx/src/lm/jsgf_parser.y"
15151557

15161558

15171559
void

src/lm/jsgf_parser.y

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ void yyerror(yyscan_t lex, jsgf_t *jsgf, const char *s);
8282
%type <rhs> rule_expansion alternate_list
8383
%type <name> grammar_header
8484
%type <rule> rule_group rule_optional
85+
%destructor { jsgf_rule_free($$); } <rule>
86+
%destructor { jsgf_rhs_free($$); } <rhs>
87+
%destructor { jsgf_atom_free($$); } <atom>
8588
%%
8689

8790
grammar: header

0 commit comments

Comments
 (0)