Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start working on HLSL initialization lists #329

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions specs/language/declarations.tex
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,65 @@

\Sec{Declarators}{Decl.Decl}
\Sec{Initializers}{Decl.Init}

\p The process of initialization described in this section applies to all
initializers regardless of the context.

\begin{grammar}
\define{initializer}\br
brace-or-equal-initializer\br
\terminal{(} expression-list \terminal{)}\br

\define{brace-or-equal-initializer}\br
\terminal{=} initializer-clause\br
braced-init-list\br

\define{initializer-clause}\br
assignment-expression\br
braced-init-list\br

\define{braced-init-list}\br
\terminal{\{} initializer-list \opt{\terminal{,}} \terminal{\}}\br
\terminal{\{} \terminal{\}}\br

\define{initializer-list}\br
initializer-clause\br
initializer-list \terminal{,} initializer-clause\br
\end{grammar}

\Sub{Aggregate Initialization}{Decl.Init.Agg}

\p An \textit{aggregate} is a vector, matrix, array, or class.

\p The subobjects of an aggregate have a defined order. For vectors and arrays
the order is increasing subscript order. For matrices it is increasing subscript
order with the subscript nesting such that in the notation
\texttt{Mat[M][N]}, the ordering is \(Mat[0][0]...Mat[0][N]...
Mat[M][0]...Mat[M][N]\). For classes the order is base class, followed by member
subobjects in declaration order.

\p A \textit{flattened ordering} of subobjects can be produced by performing a
depth-first traversal of the subobjects of an object following the defined
subobject ordering.

\p Each \textit{braced initializer list} is comprised of zero or more
\textit{initializer-clause} expressions, which in turn may be another
initializer-list or an \textit{assignment-expression}. Each
Copy link

@spall spall Oct 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't seen the whole grammar so maybe assignment-expression isn't used elsewhere, but it seems natural it would mean A=B (where = is used visually). I wonder if there is a better term for this. Like 'initializer-value'.
Also, maybe this is visualized with '=', then disregard my comment. But maybe it would be good to have a definition of 'assignment-expression' included in the provided grammar to clarify.
Edit: I now know C++ better

assignment-expression is an object, which may be a scalar or aggregate type. A
\textit{flattened initializer sequence} is constructed by a depth-first
traversal over each assignment-expression in an initializer-list and performing
a depth-first traversal accessing each subobject of the assignment-expression.

\p An initializer-list is a valid initializer if for each element \(E_n\) in the
target object's flattened ordering there is a corresponding initializer \(I_n\)
in the flattened initializer sequence which can be implicitly converted to the
element's type.

\p An initializer-list is invalid if the flattened initializer sequence contains
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An initializer-list is valid if too many elements are provided?

more or fewer elements than the target object's flattened ordering, or if any
initializer \(I_n\) cannot be implicitly converted to the corresponding element
\(E_n\)'s type.

\Sec{Function Definitions}{Decl.Function}
\Sec{Attributes}{Decl.Attr}
\Sub{Semantic Annotations}{Decl.Attr.Semantic}
Expand Down
Loading