}
-XLU_ConfigValue *xlu__cfg_string_mk(CfgParseContext *ctx, char *atom)
+XLU_ConfigValue *xlu__cfg_string_mk(CfgParseContext *ctx, char *atom,
+ YYLTYPE *loc)
{
XLU_ConfigValue *value = NULL;
if (!value) goto xe;
value->type = XLU_STRING;
value->u.string = atom;
+ memcpy(&value->loc, loc, sizeof(*loc));
return value;
}
XLU_ConfigValue *xlu__cfg_list_mk(CfgParseContext *ctx,
- XLU_ConfigValue *val)
+ XLU_ConfigValue *val,
+ YYLTYPE *loc)
{
XLU_ConfigValue *value = NULL;
XLU_ConfigValue **values = NULL;
value->u.list.nvalues = 1;
value->u.list.avalues = 1;
value->u.list.values = values;
+ memcpy(&value->loc, loc, sizeof(*loc));
return value;
void xlu__cfg_set_store(CfgParseContext*, char *name,
XLU_ConfigValue *val, int lineno);
XLU_ConfigValue *xlu__cfg_string_mk(CfgParseContext *ctx,
- char *atom);
+ char *atom, YYLTYPE *loc);
XLU_ConfigValue *xlu__cfg_list_mk(CfgParseContext *ctx,
- XLU_ConfigValue *val);
+ XLU_ConfigValue *val,
+ YYLTYPE *loc);
void xlu__cfg_list_append(CfgParseContext *ctx,
XLU_ConfigValue *list,
XLU_ConfigValue *val);
/* Line 1806 of yacc.c */
#line 62 "libxlu_cfg_y.y"
- { (yyval.value)= xlu__cfg_string_mk(ctx,(yyvsp[(1) - (1)].string)); }
+ { (yyval.value)= xlu__cfg_string_mk(ctx,(yyvsp[(1) - (1)].string),&(yylsp[(1) - (1)])); }
break;
case 13:
/* Line 1806 of yacc.c */
#line 68 "libxlu_cfg_y.y"
- { (yyval.value)= xlu__cfg_list_mk(ctx,NULL); }
+ { (yyval.value)= xlu__cfg_list_mk(ctx,NULL,&yylloc); }
break;
case 17:
/* Line 1806 of yacc.c */
#line 72 "libxlu_cfg_y.y"
- { (yyval.value)= xlu__cfg_list_mk(ctx,(yyvsp[(1) - (2)].value)); }
+ { (yyval.value)= xlu__cfg_list_mk(ctx,(yyvsp[(1) - (2)].value),&(yylsp[(1) - (2)])); }
break;
case 20:
endstmt: NEWLINE
| ';'
-value: atom { $$= xlu__cfg_string_mk(ctx,$1); }
+value: atom { $$= xlu__cfg_string_mk(ctx,$1,&@1); }
| '[' nlok valuelist ']' { $$= $3; }
atom: STRING { $$= $1; }
| NUMBER { $$= $1; }
-valuelist: /* empty */ { $$= xlu__cfg_list_mk(ctx,NULL); }
+valuelist: /* empty */ { $$= xlu__cfg_list_mk(ctx,NULL,&yylloc); }
| values { $$= $1; }
| values ',' nlok { $$= $1; }
-values: value nlok { $$= xlu__cfg_list_mk(ctx,$1); }
+values: value nlok { $$= xlu__cfg_list_mk(ctx,$1,&@1); }
| values ',' nlok value nlok { xlu__cfg_list_append(ctx,$1,$4); $$= $1; }
nlok:
XLU_ConfigValue **values;
} XLU_ConfigList;
+typedef struct YYLTYPE
+{
+ int first_line;
+ int first_column;
+ int last_line;
+ int last_column;
+} YYLTYPE;
+#define YYLTYPE_IS_DECLARED
+
struct XLU_ConfigValue {
enum XLU_ConfigValueType type;
union {
char *string;
XLU_ConfigList list;
} u;
+ YYLTYPE loc;
};
typedef struct XLU_ConfigSetting { /* transparent */