@@ -18591,6 +18591,16 @@ void GenCs::visitSymbolReference(const FuSymbolReference * expr, FuPriority pare
1859118591 }
1859218592}
1859318593
18594+ void GenCs::writeNotNullArgument(const FuExpr * expr)
18595+ {
18596+ if (expr->type->nullable) {
18597+ expr->accept(this, FuPriority::primary);
18598+ writeChar('!');
18599+ }
18600+ else
18601+ expr->accept(this, FuPriority::argument);
18602+ }
18603+
1859418604void GenCs::writeJsonElementIs(const FuExpr * obj, std::string_view name, FuPriority parent)
1859518605{
1859618606 if (parent > FuPriority::equality)
@@ -18677,7 +18687,7 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1867718687 case FuId::doubleTryParse:
1867818688 writeType(obj->type.get(), false);
1867918689 write(".TryParse(");
18680- ( *args)[0]->accept(this, FuPriority::argument );
18690+ writeNotNullArgument(( *args)[0].get() );
1868118691 if (std::ssize(*args) == 2) {
1868218692 const FuLiteralLong * radix;
1868318693 if (!(radix = dynamic_cast<const FuLiteralLong *>((*args)[1].get())) || radix->value != 16)
@@ -18700,7 +18710,7 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1870018710 case FuId::arrayBinarySearchPart:
1870118711 include("System");
1870218712 write("Array.BinarySearch(");
18703- obj->accept(this, FuPriority::argument );
18713+ writeNotNullArgument(obj );
1870418714 write(", ");
1870518715 if (std::ssize(*args) == 3) {
1870618716 (*args)[1]->accept(this, FuPriority::argument);
@@ -18718,7 +18728,7 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1871818728 case FuId::arrayCopyTo:
1871918729 include("System");
1872018730 write("Array.Copy(");
18721- obj->accept(this, FuPriority::argument );
18731+ writeNotNullArgument(obj );
1872218732 write(", ");
1872318733 writeCoercedArgs(method, args);
1872418734 writeChar(')');
@@ -18730,15 +18740,15 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1873018740 const FuLiteral * literal;
1873118741 if ((literal = dynamic_cast<const FuLiteral *>((*args)[0].get())) && literal->isDefaultValue()) {
1873218742 write("Array.Clear(");
18733- obj->accept(this, FuPriority::argument );
18743+ writeNotNullArgument(obj );
1873418744 if (std::ssize(*args) == 1) {
1873518745 write(", 0, ");
1873618746 writeArrayStorageLength(obj, FuPriority::argument);
1873718747 }
1873818748 }
1873918749 else {
1874018750 write("Array.Fill(");
18741- obj->accept(this, FuPriority::argument );
18751+ writeNotNullArgument(obj );
1874218752 write(", ");
1874318753 writeNotPromoted(obj->type->asClassType()->getElementType().get(), (*args)[0].get());
1874418754 }
@@ -18851,7 +18861,7 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1885118861 case FuId::uTF8GetBytesCopy:
1885218862 include("System.Text");
1885318863 write("Encoding.UTF8.GetBytes(");
18854- ( *args)[0]->accept(this, FuPriority::argument );
18864+ writeNotNullArgument(( *args)[0].get() );
1885518865 write(", 0, ");
1885618866 writePostfix((*args)[0].get(), ".Length, ");
1885718867 (*args)[1]->accept(this, FuPriority::argument);
@@ -18910,7 +18920,7 @@ void GenCs::writeCallExpr(const FuType * type, const FuExpr * obj, const FuMetho
1891018920 break;
1891118921 case FuId::jsonElementParse:
1891218922 write("JsonDocument.Parse(");
18913- ( *args)[0]->accept(this, FuPriority::argument );
18923+ writeNotNullArgument(( *args)[0].get() );
1891418924 write(").RootElement");
1891518925 break;
1891618926 case FuId::jsonElementIsObject:
0 commit comments