summaryrefslogtreecommitdiff
path: root/buildscripts/idl/idl/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/idl/idl/parser.py')
-rw-r--r--buildscripts/idl/idl/parser.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/buildscripts/idl/idl/parser.py b/buildscripts/idl/idl/parser.py
index c394369563d..712b2154a1b 100644
--- a/buildscripts/idl/idl/parser.py
+++ b/buildscripts/idl/idl/parser.py
@@ -331,6 +331,23 @@ def _parse_field_type(ctxt, node):
return variant
else:
assert node.id == "scalar"
+ if node.value.startswith('array<variant<'):
+ variant_types = syntax.parse_array_variant_types(node.value)
+ variant = syntax.FieldTypeVariant(ctxt.file_name, node.start_mark.line,
+ node.start_mark.column)
+ if variant_types is None:
+ location = common.SourceLocation(ctxt.file_name, node.start_mark.line,
+ node.start_mark.column)
+ ctxt.add_bad_array_variant_types_error(location, node.value)
+ else:
+ for variant_type in variant_types:
+ single = syntax.FieldTypeSingle(ctxt.file_name, node.start_mark.line,
+ node.start_mark.column)
+ single.type_name = variant_type
+ variant.variant.append(single)
+
+ return syntax.FieldTypeArray(variant)
+
single = syntax.FieldTypeSingle(ctxt.file_name, node.start_mark.line,
node.start_mark.column)