A bind program defines the conditions to call a driver's bind()
hook.
TODO(fxb/35932): Flesh out this documentation.
program = using-list , ( statement )+ ; using-list = ( using , ";" )* ; statement = condition , ";" | accept | if-statement ; condition = compound-identifier , condition-op , value ; condition-op = "==" | "!=" ; accept = "accept" , compound-identifier , "{" ( value , "," )+ "}" ; if-statement = "if" , condition , "{" , program , "}" , ( "else if" , "{" , program , "}" )* , "else" , "{" , program , "}" ; compound-identifier = IDENTIFIER ( "." , IDENTIFIER )* ; value = compound-identifier | STRING-LITERAL | NUMERIC-LITERAL | "true" | "false" ;
An identifier matches the regex [a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?
and must not match any keyword. The list of keywords is:
if else accept using
A string literal matches the regex ”[^”]*”
, and a numeric literal matches the regex [0-9]+
or 0x[0-9A-F]+.
A bind library defines a set of properties that drivers may assign to their children. Also, bind programs may refer to bind libraries.
TODO(fxb/35932): Flesh out this documentation. TODO(fxb/36103): Implement and document comments.
library = library-header , using-list , declaration-list ; library-header = "library" , compound-identifier , ";" ; using-list = ( using , ";" )* ; using = "using" , compound-identifier , ( "as" , IDENTIFIER ) ; compound-identifier = IDENTIFIER ( "." , IDENTIFIER )* ; declaration-list = ( declaration , ";" )* ; declaration = primitive-declaration | enum-declaration ; primitive-declaration = ( "extend" ) , type , IDENTIFIER , ( "{" primitive-value-list "}" ) ; type = "uint" | "string" | "bool"; primitive-value-list = ( IDENTIFIER , "=" , literal , "," )* ; enum-declaration = ( "extend" ) , "enum" , IDENTIFIER , ( "{" , enum-value-list , "}" ) ; enum-value-list = ( IDENTIFIER , "," )* ; literal = STRING-LITERAL | NUMERIC-LITERAL | "true" | "false" ;
An identifier matches the regex [a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?
and must not match any keyword. The list of keywords is:
bool enum extend library string uint using
A string literal matches the regex ”[^”]*”
, and a numeric literal matches the regex [0-9]+
or 0x[0-9A-F]+.