Skip to content

Commit 8c83903

Browse files
authored
Report errors when trying to using optional ranges (#250)
* Report errors when trying to using optional ranges Signed-off-by: Christian Vetter <[email protected]> * Fix build Signed-off-by: Christian Vetter <[email protected]> --------- Signed-off-by: Christian Vetter <[email protected]>
1 parent 31a03e7 commit 8c83903

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

flatdata-generator/flatdata/generator/tree/builder.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from flatdata.generator.tree.errors import (
1111
InvalidEnumWidthError, InvalidRangeName, InvalidRangeReference,
1212
InvalidConstReference, InvalidConstValueReference, DuplicateInvalidValueReference,
13-
InvalidStructInExplicitReference)
13+
InvalidStructInExplicitReference, OptionalRange)
1414
from flatdata.generator.tree.nodes.explicit_reference import ExplicitReference
1515
from flatdata.generator.tree.nodes.archive import Archive
1616
from flatdata.generator.tree.nodes.node import Node
@@ -181,6 +181,9 @@ def _check_ranges(root):
181181
for sibling in field.parent.fields:
182182
if sibling.name == name:
183183
raise InvalidRangeName(name)
184+
# Also check that the range is not optional
185+
if field.invalid_value:
186+
raise OptionalRange(name)
184187

185188
# Now check that structs with ranges are only used in vectors
186189
for reference in root.iterate(StructureReference):

flatdata-generator/flatdata/generator/tree/errors.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,10 @@ class InvalidRangeReference(FlatdataSyntaxError):
148148
def __init__(self, name):
149149
super().__init__(
150150
"Structs with @range can only be used in vectors: {name}"
151+
.format(name=name))
152+
153+
class OptionalRange(FlatdataSyntaxError):
154+
def __init__(self, name):
155+
super().__init__(
156+
"@range cannot be combined with @optional, store empty ranges instead: {name}"
151157
.format(name=name))

flatdata-generator/pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ name = "flatdata-generator"
77
version = "0.4.6"
88
description = "Generate source code for C++, Rust, Go or Python from a Flatdata schema file"
99
readme = "README.md"
10-
license = ""
1110
authors = [
1211
{ name = "Flatdata Developers" },
1312
]

flatdata-generator/tests/tree/test_syntax_tree_builder.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
sys.path.insert(0, "..")
1111
from flatdata.generator.tree.errors import MissingSymbol, InvalidRangeName, InvalidRangeReference, \
1212
InvalidConstReference, InvalidConstValueReference, DuplicateInvalidValueReference, \
13-
InvalidStructInExplicitReference
13+
InvalidStructInExplicitReference, OptionalRange
1414
from flatdata.generator.tree.builder import build_ast
1515
from flatdata.generator.tree.nodes.trivial import Namespace, Structure, Field, Constant, Enumeration, EnumerationValue
1616
from flatdata.generator.tree.nodes.archive import Archive
@@ -21,8 +21,6 @@
2121
FieldReference, ArchiveReference, BuiltinStructureReference, ConstantValueReference, \
2222
EnumerationReference, InvalidValueReference
2323

24-
25-
2624
def test_validating_archive_with_no_structure_defined_raises_missing_symbol_error():
2725
def __test(resource_type):
2826
with assert_raises(MissingSymbol):
@@ -103,6 +101,17 @@ def test_range_cannot_be_used_in_struct_resource():
103101
}
104102
""")
105103

104+
def test_optional_range():
105+
with assert_raises(OptionalRange):
106+
build_ast("""namespace foo{
107+
const u32 NO_EDGES_REF = 200;
108+
struct Node {
109+
@range(edges_range)
110+
@optional( NO_EDGES_REF )
111+
first_edge_ref : u32;
112+
}
113+
}""")
114+
106115
def test_ranges_can_be_used_in_normally():
107116
build_ast("""namespace foo{
108117
struct A {

flatdata-py/pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ name = "flatdata-py"
77
version = "0.4.7"
88
description = "Python 3 implementation of Flatdata"
99
readme = "README.md"
10-
license = ""
1110
authors = [
1211
{ name = "Flatdata Developers" },
1312
]

0 commit comments

Comments
 (0)