Files
Pierre-Marie de Rodat ee5303cc68 Lkt lowering: fix null-cond propagation for x?.y or? z
When `x` is null, the result of this expression must be `z`. Because of
incorrect lowering of the `or?` operator to abstract expressions, the
left operand (`x?.y`) was considered as a prefix, and so the whole
expression returned null when any prefix in `x?.y` (thus `x` included)
was null.

The `or?` operator has no prefix, since it does not use dot notation, so
its lowering must not create a prefix.
2024-12-20 08:02:25 +00:00

49 lines
1.2 KiB
Plaintext

main.py: Running...
p_field_1(None) = None
p_field_1(<n1>) = None
p_field_1(<n1.n2>) = <n1>
p_field_1(<n1.n2.n3>) = <n1.n2>
p_field_2(None) = None
p_field_2(<n1>) = <PropertyError: main.txt:1:1-1:9: dereferencing a null access
p_field_2(<n1.n2>) = None
p_field_2(<n1.n2.n3>) = <n1>
p_field_3(None) = <PropertyError: main.txt:1:1-1:9: dereferencing a null access
p_field_3(<n1>) = None
p_field_3(<n1.n2>) = None
p_field_3(<n1.n2.n3>) = <n1>
p_field_4(None) = None
p_field_4(<n1>) = None
p_field_4(<n1.n2>) = None
p_field_4(<n1.n2.n3>) = <n1>
p_call_1(None) = None
p_call_1(<n1>) = None
p_call_1(<n1.n2>) = <n1>
p_call_1(<n1.n2.n3>) = <n1.n2>
p_call_2(None) = None
p_call_2(<n1>) = <PropertyError: main.txt:1:1-1:9: dereferencing a null access
p_call_2(<n1.n2>) = None
p_call_2(<n1.n2.n3>) = <n1>
p_call_3(None) = <PropertyError: main.txt:1:1-1:9: dereferencing a null access
p_call_3(<n1>) = None
p_call_3(<n1.n2>) = None
p_call_3(<n1.n2.n3>) = <n1>
p_call_4(None) = None
p_call_4(<n1>) = None
p_call_4(<n1.n2>) = None
p_call_4(<n1.n2.n3>) = <n1>
p_or_1(None, <n1>, <n1.n2>) = <n1.n2>
p_or_1(<n1>, None, <n1.n2>) = <n1.n2>
p_or_1(<n1>, <n1.n2>, None) = <n1.n2>
p_or_1(<n1>, <n1.n2>, <n1.n2.n3>) = <n1.n2>
main.py: Done.
Done