Configure Parameter

ConfigParamList :=

| ConfigParamDecl

| ConfigParamList ',' ConfigParamDecl

ConfigParamDecl :=

| DeclarationSpecifiers Declarator

| 'dynamic' DeclarationSpecifiers Declarator

These sets of productions starting from the nonterminal ConfigParamList, which are used for declaring a list of configure parameters (note, this is like declaring parameters to C functions, so it is different from passing configure parameters in, which would be analogous to passing arguments to call a function in C, for passing configure parameters in, please refer to subsections of the Generator/Construction Configuration/Call section for syntax). The syntax is like declaring parameters to C functions except that it requires parameter names to be present and no variadic is allowed. In addition, we allow a specifier 'dynamic' for in-scope dynamic binding. This is related to configure parameters being passed in with lambda expressions (the lambda configuration feature). Without 'dynamic', by default, the configure parameters at the wrapper (item) level is fetched (evaluated) once per item, and those at the node level is fetched once per node. With 'dynamic', all occurrences of a configure parameter will be dynamically evaluated with the lambda expression. This may make a difference when the configure parameter involve something like getting a random number in its lambda expression. More discussions and nuances can be seen here.

  • DeclarationSpecifiers is a nonterminal in C for a type ('int', 'float' etc.) along with its qualifers ('const' etc.), but not including modifiers like pointers. (It is close to SpecifierQualifierList which appeared somewhere else in GIGL syntax and the difference is not important for understanding.)

  • Declarator is a nonterminal in C for an variable or function identifier with this modifiers (like pointer etc.).