/* $NetBSD: lsym_period.c,v 1.5 2023/05/11 09:28:53 rillig Exp $ */

/*
* Tests for the token lsym_period, which represents '.' in these contexts:
*
* In an initializer, '.' starts a named designator (since C99).
*
* In an expression, 'sou.member' accesses the member 'member' in the struct
* or union 'sou'.
*
* In a function prototype declaration, the sequence '.' '.' '.' marks the
* start of a variable number of arguments.  It would have been more intuitive
* to model them as a single token, but it doesn't make any difference for
* formatting the code.
*
* See also:
*      lsym_word.c             for '.' inside numeric constants
*/

/* Designators in an initialization */
//indent input
struct point {
       int x;
       int y;
} p = {
       .x = 3,
       .y = 4,
};
//indent end

//indent run-equals-input -di0


/* Accessing struct members */
//indent input
time_t
get_time(struct stat st)
{
       return st.st_mtime > 0 ? st . st_atime : st.st_ctime;
}
//indent end

//indent run
time_t
get_time(struct stat st)
{
       return st.st_mtime > 0 ? st.st_atime : st.st_ctime;
}
//indent end

//indent run-equals-prev-output -Ttime_t


/* Varargs in a function declaration */
//indent input
void my_printf(const char *, ...);
//indent end

//indent run-equals-input -di0