Add multi-valued select
expression
This commit is contained in:
parent
96ae542119
commit
f267a5be95
24
grammar.js
24
grammar.js
|
@ -131,7 +131,12 @@ module.exports = grammar({
|
|||
")",
|
||||
),
|
||||
|
||||
select_value: ($) => seq(
|
||||
select_value: ($) => choice(
|
||||
$._select_value,
|
||||
seq("(", commaSeparatedOptTrailing($._select_value), ")"),
|
||||
),
|
||||
|
||||
_select_value: ($) => seq(
|
||||
field("name", $.identifier),
|
||||
"(",
|
||||
field("arguments", optional(commaSeparatedNoTrailing($._string_literal))),
|
||||
|
@ -145,15 +150,22 @@ module.exports = grammar({
|
|||
),
|
||||
|
||||
select_case: ($) => seq(
|
||||
field("pattern", choice(
|
||||
$._string_literal,
|
||||
$.boolean_literal,
|
||||
alias("default", $.default),
|
||||
)),
|
||||
field("pattern", $.select_pattern),
|
||||
":",
|
||||
field("value", $._case_value)
|
||||
),
|
||||
|
||||
select_pattern: ($) => choice(
|
||||
$._select_pattern,
|
||||
seq("(", commaSeparatedOptTrailing($._select_pattern), ")"),
|
||||
),
|
||||
|
||||
_select_pattern: ($) => choice(
|
||||
$._string_literal,
|
||||
$.boolean_literal,
|
||||
alias("default", $.default),
|
||||
),
|
||||
|
||||
_case_value: ($) => choice(
|
||||
alias("unset", $.unset),
|
||||
$._expr,
|
||||
|
|
162
src/grammar.json
generated
162
src/grammar.json
generated
|
@ -487,6 +487,65 @@
|
|||
]
|
||||
},
|
||||
"select_value": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_value"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_value"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_value"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"_select_value": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -588,26 +647,8 @@
|
|||
"type": "FIELD",
|
||||
"name": "pattern",
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_string_literal"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "boolean_literal"
|
||||
},
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "STRING",
|
||||
"value": "default"
|
||||
},
|
||||
"named": true,
|
||||
"value": "default"
|
||||
}
|
||||
]
|
||||
"type": "SYMBOL",
|
||||
"name": "select_pattern"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -624,6 +665,87 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"select_pattern": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_pattern"
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_pattern"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_select_pattern"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"_select_pattern": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_string_literal"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "boolean_literal"
|
||||
},
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "STRING",
|
||||
"value": "default"
|
||||
},
|
||||
"named": true,
|
||||
"value": "default"
|
||||
}
|
||||
]
|
||||
},
|
||||
"_case_value": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
|
|
43
src/node-types.json
generated
43
src/node-types.json
generated
|
@ -354,19 +354,7 @@
|
|||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "boolean_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "default",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "interpreted_string_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "raw_string_literal",
|
||||
"type": "select_pattern",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
|
@ -453,6 +441,33 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "select_pattern",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "boolean_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "default",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "interpreted_string_literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "raw_string_literal",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "select_value",
|
||||
"named": true,
|
||||
|
@ -476,7 +491,7 @@
|
|||
]
|
||||
},
|
||||
"name": {
|
||||
"multiple": false,
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
|
|
2753
src/parser.c
generated
2753
src/parser.c
generated
File diff suppressed because it is too large
Load diff
|
@ -19,10 +19,12 @@ foo = select(release_variable("RELEASE_TEST"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(default)
|
||||
(select_pattern
|
||||
(default))
|
||||
(unset))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -47,10 +49,12 @@ foo = select(soong_config_variable("my_namespace", "my_var"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(unset))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -76,16 +80,20 @@ foo = select(variant("arch"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -130,19 +138,24 @@ foo = select(variant("VARIANT"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(default)
|
||||
(select_pattern
|
||||
(default))
|
||||
(unset))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -165,10 +178,12 @@ foo = select(variant(), {
|
|||
(identifier))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(unset))
|
||||
(select_case
|
||||
(default)
|
||||
(select_pattern
|
||||
(default))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -192,10 +207,12 @@ foo = select(some_unknown_type("CONDITION"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(default)
|
||||
(select_pattern
|
||||
(default))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -220,10 +237,12 @@ foo = select(release_variable("ONE", "TWO"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(interpreted_string_literal)
|
||||
(select_pattern
|
||||
(interpreted_string_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(default)
|
||||
(select_pattern
|
||||
(default))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -248,10 +267,65 @@ foo = select(some_boolean("VALUE",), {
|
|||
(ERROR))
|
||||
(select_cases
|
||||
(select_case
|
||||
(boolean_literal)
|
||||
(select_pattern
|
||||
(boolean_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(boolean_literal)
|
||||
(select_pattern
|
||||
(boolean_literal))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
Select (trailing comma in values)
|
||||
================================================================================
|
||||
|
||||
foo = select((
|
||||
arch(),
|
||||
os(),
|
||||
), {
|
||||
(default, default): "true",
|
||||
})
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(assignment
|
||||
(identifier)
|
||||
(operator)
|
||||
(select_expression
|
||||
(select_value
|
||||
(identifier)
|
||||
(identifier))
|
||||
(select_cases
|
||||
(select_case
|
||||
(select_pattern
|
||||
(default)
|
||||
(default))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
Select (trailing comma in pattern)
|
||||
================================================================================
|
||||
|
||||
foo = select((arch(), os()), {
|
||||
(default, default,): "true",
|
||||
})
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(assignment
|
||||
(identifier)
|
||||
(operator)
|
||||
(select_expression
|
||||
(select_value
|
||||
(identifier)
|
||||
(identifier))
|
||||
(select_cases
|
||||
(select_case
|
||||
(select_pattern
|
||||
(default)
|
||||
(default))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
@ -275,10 +349,12 @@ foo = select(some_boolean("IS_TRUE"), {
|
|||
(interpreted_string_literal))
|
||||
(select_cases
|
||||
(select_case
|
||||
(boolean_literal)
|
||||
(select_pattern
|
||||
(boolean_literal))
|
||||
(interpreted_string_literal))
|
||||
(select_case
|
||||
(boolean_literal)
|
||||
(select_pattern
|
||||
(boolean_literal))
|
||||
(interpreted_string_literal))))))
|
||||
|
||||
================================================================================
|
||||
|
|
Loading…
Reference in a new issue