dtlib: wrap array properties in string representation
List each element of a property array in a different line to improve the readability of the generated DTS file. Update the test suite's expected outputs accordingly. Signed-off-by: Luca Burelli <l.burelli@arduino.cc>
This commit is contained in:
parent
4b8be385c0
commit
6b325daa2a
2 changed files with 31 additions and 13 deletions
|
@ -207,7 +207,8 @@ class Node:
|
||||||
s += f"{self.name} {{\n"
|
s += f"{self.name} {{\n"
|
||||||
|
|
||||||
for prop in self.props.values():
|
for prop in self.props.values():
|
||||||
s += "\t" + str(prop) + "\n"
|
prop_str = textwrap.indent(str(prop), "\t")
|
||||||
|
s += prop_str + "\n"
|
||||||
|
|
||||||
for child in self.nodes.values():
|
for child in self.nodes.values():
|
||||||
s += textwrap.indent(child.__str__(), "\t") + "\n"
|
s += textwrap.indent(child.__str__(), "\t") + "\n"
|
||||||
|
@ -588,6 +589,7 @@ class Property:
|
||||||
return s + ";"
|
return s + ";"
|
||||||
|
|
||||||
s += " ="
|
s += " ="
|
||||||
|
newline = "\n" + " " * len(s)
|
||||||
|
|
||||||
for i, (pos, marker_type, ref) in enumerate(self._markers):
|
for i, (pos, marker_type, ref) in enumerate(self._markers):
|
||||||
if i < len(self._markers) - 1:
|
if i < len(self._markers) - 1:
|
||||||
|
@ -602,11 +604,11 @@ class Property:
|
||||||
# end - 1 to strip off the null terminator
|
# end - 1 to strip off the null terminator
|
||||||
s += f' "{_decode_and_escape(self.value[pos:end - 1])}"'
|
s += f' "{_decode_and_escape(self.value[pos:end - 1])}"'
|
||||||
if end != len(self.value):
|
if end != len(self.value):
|
||||||
s += ","
|
s += f",{newline}"
|
||||||
elif marker_type is _MarkerType.PATH:
|
elif marker_type is _MarkerType.PATH:
|
||||||
s += " &" + ref
|
s += " &" + ref
|
||||||
if end != len(self.value):
|
if end != len(self.value):
|
||||||
s += ","
|
s += f",{newline}"
|
||||||
else:
|
else:
|
||||||
# <> or []
|
# <> or []
|
||||||
|
|
||||||
|
@ -638,7 +640,7 @@ class Property:
|
||||||
|
|
||||||
s += _N_BYTES_TO_END_STR[elm_size]
|
s += _N_BYTES_TO_END_STR[elm_size]
|
||||||
if pos != len(self.value):
|
if pos != len(self.value):
|
||||||
s += ","
|
s += f",{newline}"
|
||||||
|
|
||||||
return s + ";"
|
return s + ";"
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,9 @@ def test_property_offset_labels():
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
a = l01: l02: < l03: &node l04: l05: 0x2 l06: l07: l08: >, [ l09: 03 l10: l11: 04 l12: l13: l14: ], "A";
|
a = l01: l02: < l03: &node l04: l05: 0x2 l06: l07: l08: >,
|
||||||
|
[ l09: 03 l10: l11: 04 l12: l13: l14: ],
|
||||||
|
"A";
|
||||||
b = < 0x0 l23: l24: >;
|
b = < 0x0 l23: l24: >;
|
||||||
node: node {
|
node: node {
|
||||||
phandle = < 0x1 >;
|
phandle = < 0x1 >;
|
||||||
|
@ -610,8 +612,11 @@ def test_node_path_references():
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
a = &label;
|
a = &label;
|
||||||
b = [ 01 ], &label;
|
b = [ 01 ],
|
||||||
c = [ 01 ], &label, < 0x2 >;
|
&label;
|
||||||
|
c = [ 01 ],
|
||||||
|
&label,
|
||||||
|
< 0x2 >;
|
||||||
d = &{/abc};
|
d = &{/abc};
|
||||||
label: abc {
|
label: abc {
|
||||||
e = &label;
|
e = &label;
|
||||||
|
@ -867,7 +872,12 @@ def test_mixed_assign():
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
x = [ FF FF ], &abc, < 0xff &abc 0xff &abc >, &abc, [ FF FF ], "abc";
|
x = [ FF FF ],
|
||||||
|
&abc,
|
||||||
|
< 0xff &abc 0xff &abc >,
|
||||||
|
&abc,
|
||||||
|
[ FF FF ],
|
||||||
|
"abc";
|
||||||
abc: abc {
|
abc: abc {
|
||||||
phandle = < 0x1 >;
|
phandle = < 0x1 >;
|
||||||
};
|
};
|
||||||
|
@ -1180,7 +1190,8 @@ def test_omit_if_no_ref():
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
x = < &{/referenced} >, &referenced2;
|
x = < &{/referenced} >,
|
||||||
|
&referenced2;
|
||||||
referenced {
|
referenced {
|
||||||
phandle = < 0x1 >;
|
phandle = < 0x1 >;
|
||||||
};
|
};
|
||||||
|
@ -1775,7 +1786,7 @@ def test_prop_type_casting():
|
||||||
"strings",
|
"strings",
|
||||||
"expected property 'strings' on / in .* to be assigned with " +
|
"expected property 'strings' on / in .* to be assigned with " +
|
||||||
re.escape("'strings = \"string\";', ")+
|
re.escape("'strings = \"string\";', ")+
|
||||||
re.escape("not 'strings = \"foo\", \"bar\", \"baz\";'"))
|
"not 'strings = \"foo\",\\s*\"bar\",\\s*\"baz\";'")
|
||||||
verify_to_string_error_matches(
|
verify_to_string_error_matches(
|
||||||
"invalid_string",
|
"invalid_string",
|
||||||
re.escape(r"value of property 'invalid_string' (b'\xff\x00') on / ") +
|
re.escape(r"value of property 'invalid_string' (b'\xff\x00') on / ") +
|
||||||
|
@ -2076,7 +2087,9 @@ def test_duplicate_labels():
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
label: foo {
|
label: foo {
|
||||||
x = &{/foo}, &label, < &label >;
|
x = &{/foo},
|
||||||
|
&label,
|
||||||
|
< &label >;
|
||||||
phandle = < 0x1 >;
|
phandle = < 0x1 >;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -2175,7 +2188,8 @@ def test_names():
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
aA0,._+*#?- = &_, &{/aA0,._+@-};
|
aA0,._+*#?- = &_,
|
||||||
|
&{/aA0,._+@-};
|
||||||
+ = [ 00 ];
|
+ = [ 00 ];
|
||||||
* = [ 02 ];
|
* = [ 02 ];
|
||||||
- = [ 01 ];
|
- = [ 01 ];
|
||||||
|
@ -2232,7 +2246,9 @@ def test_dense_input():
|
||||||
/ {
|
/ {
|
||||||
l1: l2: foo {
|
l1: l2: foo {
|
||||||
l3: l4: bar {
|
l3: l4: bar {
|
||||||
l5: x = l6: [ l7: 01 l8: 02 l9: ], [ 03 ], "a";
|
l5: x = l6: [ l7: 01 l8: 02 l9: ],
|
||||||
|
[ 03 ],
|
||||||
|
"a";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue