#include "WfCpp.h"
namespace
{
namespace
{
namespace
{
using
namespace
collections
;
using
namespace
regex
;
using
namespace
stream
;
using
namespace
reflection
;
using
namespace
reflection
::
description
;
using
namespace
analyzer
;
template
<
typename
>
void
(
*
,
stream
::
&
,
*
,
const
&
)
{
.
(
L"::vl::__vwsn::Box("
);
();
.
(
L")"
);
}
template
<
typename
>
void
(
*
,
stream
::
&
,
*
,
const
&
)
{
.
(
L"::vl::__vwsn::Unbox<"
);
.
(
->
(
));
.
(
L">("
);
();
.
(
L")"
);
}
template
<
typename
>
void
(
*
,
stream
::
&
,
*
,
const
&
)
{
.
(
L"::vl::__vwsn::UnboxWeak<"
);
.
(
->
(
));
.
(
L">("
);
();
.
(
L")"
);
}
template
<
typename
>
void
(
*
,
stream
::
&
,
*
,
*
,
const
&
)
{
if
(
==
)
{
();
}
else
if
(
==
description
::
<
>())
{
.
(
L"::vl::__vwsn::Parse<"
);
.
(
->
(
));
.
(
L">("
);
();
.
(
L")"
);
}
else
if
(
==
description
::
<
>())
{
.
(
L"::vl::__vwsn::ToString("
);
();
.
(
L")"
);
}
else
{
.
(
L"static_cast<"
);
.
(
->
(
));
.
(
L">("
);
();
.
(
L")"
);
}
}
void
(
*
,
stream
::
&
,
*
,
*
,
const
<
void
()>&
,
bool
)
{
if
(
->
()->
() ==
::
)
{
if
(
)
{
(
,
,
,
);
}
else
{
(
,
,
,
);
}
return
;
}
else
if
(
->
()->
() ==
::
)
{
(
,
,
,
);
return
;
}
else
{
auto
=
description
::
<
>();
if
(
->
() ==
tdVe
)
{
if
(
->
()->
() ==
::
)
{
if
((
->
() ==
tdVe
&&
->
()->
() !=
::
)
||
->
()->
(
description
::
<
>())
||
->
()->
(
description
::
<
>())
)
{
.
(
L"::vl::reflection::description::GetLazyList<"
);
.
(
->
(
->
()->
(
0
)));
.
(
L">("
);
);
.
(
L")"
);
return
;
}
}
else
{
if
((
->
() ==
tdVe
&&
->
()->
() ==
::
)
||
->
() ==
::
NativeCollectionReference
)
{
.
(
L"::vl::__vwsn::UnboxCollection<"
);
.
(
->
(
tdVe
));
.
(
L">("
);
);
.
(
L")"
);
return
;
}
}
}
switch
(
->
())
{
case
::
:
{
switch
(
->
())
{
case
::
:
if
(
)
.
(
L"::vl::__vwsn::Ensure("
);
if
(
->
()->
(
->
()))
{
.
(
L"static_cast<"
);
.
(
->
(
->
()));
.
(
L"*>("
);
);
.
(
L")"
);
}
else
{
.
(
L"::vl::__vwsn::RawPtrCast<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L")"
);
}
if
(
)
.
(
L")"
);
return
;
case
::
:
if
(
)
.
(
L"::vl::__vwsn::Ensure("
);
if
(
->
()->
(
->
()))
{
.
(
L"::vl::Ptr<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L")"
);
}
else
{
.
(
L"::vl::__vwsn::SharedPtrCast<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L")"
);
}
if
(
)
.
(
L")"
);
return
;
default
:;
}
}
break
;
case
::
:
{
switch
(
->
())
{
case
::
:
if
(
)
.
(
L"::vl::__vwsn::Ensure("
);
if
(
->
()->
(
->
()))
{
.
(
L"static_cast<"
);
.
(
->
(
->
()));
.
(
L"*>("
);
);
.
(
L".Obj())"
);
}
else
{
.
(
L"::vl::__vwsn::RawPtrCast<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L".Obj())"
);
}
if
(
)
.
(
L")"
);
return
;
case
::
:
if
(
)
.
(
L"::vl::__vwsn::Ensure("
);
if
(
->
()->
(
->
()))
{
.
(
L"::vl::Ptr<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L")"
);
}
else
{
.
(
L"::vl::__vwsn::SharedPtrCast<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L".Obj())"
);
}
if
(
)
.
(
L")"
);
return
;
default
:;
}
}
break
;
case
::
:
{
switch
(
->
())
{
case
::
:
if
(
)
.
(
L"::vl::__vwsn::Ensure("
);
.
(
L"::vl::__vwsn::NullableCast<"
);
.
(
->
(
->
()));
.
(
L">("
);
);
.
(
L")"
);
if
(
)
.
(
L")"
);
return
;
case
::
:
(
,
,
->
(),
->
(), [&]()
{
);
.
(
L".Value()"
);
});
return
;
default
:;
}
}
break
;
case
::
:
{
switch
(
->
())
{
case
::
:
.
(
->
(
));
.
(
L"("
);
(
,
,
->
(),
->
(),
);
.
(
L")"
);
return
;
case
::
:
(
,
,
->
(),
->
(),
);
return
;
default
:;
}
}
break
;
default
:;
}
}
.
(
L"/* NOT EXISTS: convert ("
);
.
(
->
(
));
.
(
L") to ("
);
.
(
->
(
));
.
(
L") */ __vwsn_not_exists__("
);
);
.
(
L")"
);
}
class
WfGenerateExpressionVisitor
:
public
,
public
::
{
public
:
*
;
stream
::
&
;
bool
;
WfGenerateExpressionVisitor
(
*
,
stream
::
&
,
bool
)
:config(
)
, writer(
)
, useReturnValue(
)
{
}
bool
(
*
,
*&
)
{
if
(
==
nullptr
)
{
=
;
return
false
;
}
if
(
(
,
))
{
return
false
;
}
else
{
return
true
;
}
}
template
<
typename
>
void
(
*
,
const
&
)
{
cppcodegen
::
(
,
,
,
);
}
template
<
typename
>
void
(
*
,
const
&
)
{
cppcodegen
::
(
,
,
,
);
}
template
<
typename
>
void
(
*
,
const
&
)
{
cppcodegen
::
(
,
,
,
);
}
void
(
**
,
,
<
void
()>
)
{
if
(
==
1
)
{
);
}
else
if
(
(
[
0
],
[
1
]))
{
(
+
1
,
-
1
, [&]()
{
auto
=
[
0
];
auto
=
[
1
];
(
,
,
fromType
,
toType
,
,
false
);
});
}
else
{
return
(
+
1
,
-
1
,
);
}
}
void
(
<
>
,
*
=
nullptr
,
bool
=
true
)
{
(
,
,
,
,
);
}
<
::
>
(
*
,
<
>
=
nullptr
)
{
<
::
>
;
auto
=
->
->
].
();
if
(
dynamic_cast
<
WfOrderedLambdaExpression
*>(
))
{
scope
=
scope
->
.
();
}
while
(
scope
)
{
if
(
scope
->
&&
scope
->
)
{
auto
=
scope
->
?
scope
->
:
scope
->
.
();
if
(
auto
=
dynamic_cast
<
WfOrderedLambdaExpression
*>(
source
))
{
closureInfo
->
ordered
];
break
;
}
else
if
(
auto
=
dynamic_cast
<
*>(
source
))
{
closureInfo
->
funcExpr
];
break
;
}
else
if
(
auto
=
dynamic_cast
<
*>(
source
))
{
closureInfo
->
classExpr
];
break
;
}
}
else
if
(
auto
=
scope
->
.
<
>())
{
auto
=
->
classExpr
.
()];
if
(
info
.
().
(
.
()))
{
closureInfo
info
;
break
;
}
}
scope
=
scope
->
.
();
}
return
closureInfo
;
}
void
(
*
)
{
.
(
L"/* NOT EXISTS: type("
);
.
(
->
());
.
(
L") */ __vwsn_not_exists__"
);
}
void
(
*
)
{
.
(
L"/* NOT EXISTS: method("
);
.
(
->
());
.
(
L") of type ("
);
.
(
->
()->
());
.
(
L") */ __vwsn_not_exists__"
);
}
void
(
*
)
{
.
(
L"/* NOT EXISTS: property("
);
.
(
->
());
.
(
L") of type ("
);
.
(
->
()->
());
.
(
L") */ __vwsn_not_exists__"
);
}
void
(
*
)
{
.
(
L"/* NOT EXISTS: event("
);
.
(
->
());
.
(
L") of type ("
);
.
(
->
()->
());
.
(
L") */ __vwsn_not_exists__"
);
}
template
<
typename
>
void
(
const
&
,
const
&
)
{
<
<
>>
;
->
.
(
,
false
,
matches
);
FOREACH(Ptr<RegexMatch>, match, matches)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
matches
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
match
);)
{
=
match
().
();
if
(
match
())
{
if
(!
(
item
))
{
.
(
L"/* NOT EXISTS: "
);
.
(
item
);
.
(
L" */ __vwsn_not_exists__"
);
}
}
else
{
.
(
item
);
}
}
}
void
(
*
,
*
)
{
if
(
auto
=
(
))
{
FOREACH_INDEXER(ITypeDescriptor*, thisType, index, closureInfo->thisTypes)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
*>&
= ::
vl
::
collections
::
(
closureInfo
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
if
(
bool
=
true
)
for
(
=
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
*
;
__foreach_iterator__
.
(
thisType
);
index
++)
{
if
(
thisType
->
(
))
{
.
(
L"__vwsnthis_"
);
.
(
(
index
));
return
;
}
}
}
.
(
L"this"
);
}
void
(
*
,
<
>
,
bool
)
{
if
(
auto
=
.
<
>())
{
auto
=
->
;
if
(
ownerNode
.
<
>() ||
ownerNode
.
<
>())
{
.
(
L"GLOBAL_NAME "
);
.
(
->
(
));
return
;
}
else
if
(
auto
=
(
, (
?
nullptr
:
)))
{
if
(
closureInfo
.
().
(
.
()))
{
.
(
L"this->"
);
.
(
->
(
));
return
;
}
else
if
(
closureInfo
.
().
(
.
()))
{
.
(
L"__vwsnctor_"
);
.
(
->
(
));
return
;
}
}
.
(
->
(
));
return
;
}
else
if
(
auto
=
.
<
>())
{
auto
=
->
;
if
(
ownerNode
.
<
>() ||
ownerNode
.
<
>())
{
.
(
->
(
.
()));
.
(
L"(GLOBAL_OBJ, &GLOBAL_SYMBOL "
);
.
(
->
(
));
.
(
L")"
);
return
;
}
else
if
(
auto
=
ownerNode
.
<
>())
{
.
(
->
(
.
()));
.
(
L"(this, &"
);
.
(
->
classExpr
.
()]);
.
(
L"::"
);
.
(
->
(
));
.
(
L")"
);
return
;
}
else
if
(
->
&&
->
&&
==
funcDecl
.
)
{
auto
=
->
->
funcDecl
.
()];
auto
=
->
dynamic_cast
<
*>(
scope
)];
.
(
L"LAMBDA(::"
);
.
(
->
);
.
(
L"::"
);
.
(
closureInfo
);
.
(
L"("
);
FOREACH_INDEXER(WString, symbolName, index, closureInfo->symbols.Keys())
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
>&
= ::
vl
::
collections
::
(
closureInfo
.
());
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
if
(
bool
=
true
)
for
(
=
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
;
__foreach_iterator__
.
(
symbolName
);
index
++)
{
if
(
index
>
0
)
{
.
(
L", "
);
}
.
(
->
(
));
}
FOREACH_INDEXER(ITypeDescriptor*, thisType, index, closureInfo->thisTypes)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
*>&
= ::
vl
::
collections
::
(
closureInfo
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
if
(
bool
=
true
)
for
(
=
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
*
;
__foreach_iterator__
.
(
thisType
);
index
++)
{
if
(
index
>
0
||
closureInfo
.
() >
0
)
{
.
(
L", "
);
}
.
(
L" __vwsnctorthis_"
+
(
index
));
}
.
(
L"))"
);
return
;
}
}
.
(
->
(
));
}
enum
class
{
,
,
,
};
bool
(
*
)
{
switch
(
->
())
{
case
::
:
case
::
:
case
::
:
case
::
:
case
::
:
return
true
;
default
:
return
false
;
}
}
template
<
typename
>
void
(
*
,
const
&
,
bool
)
{
if
(
)
{
if
(
(
) ||
->
() ==
::
NativeCollectionReference
)
{
.
(
L"::vl::__vwsn::UnboxCollection<"
);
.
(
->
(
->
()));
.
(
L">("
);
();
.
(
L")"
);
return
;
}
}
();
}
template
<
typename
,
typename
,
typename
,
typename
>
void
(
,
*
,
const
&
,
const
&
,
const
&
,
*
,
bool
)
{
if
(
<
>(
0
,
).
([&](
) {
return
(
(
index
)); }))
{
.
(
L"[&]()->decltype(auto){"
);
for
(
=
0
;
i
<
;
i
++)
{
auto
=
(
i
);
if
(
(
type
))
{
.
(
L" auto __vwsn_temp_x"
);
.
(
(
i
));
.
(
L" = ::vl::__vwsn::Box("
);
(
,
i
);
.
(
L"); "
);
switch
(
type
->GetHint())
{
case
::
:
.
(
L"::vl::collections::Array<"
);
break
;
case
::
:
.
(
L"::vl::collections::List<"
);
break
;
case
::
:
.
(
L"::vl::collections::SortedList<"
);
break
;
case
::
:
.
(
L"::vl::collections::ObservableList<"
);
break
;
case
::
:
.
(
L"::vl::collections::Dictionary<"
);
break
;
default
:;
}
=
type
->GetElementType()->GetGenericArgumentCount();
for
(
=
0
;
i
<
count
;
i
++)
{
if
(
i
>
0
)
.
(
L", "
);
.
(
->
(
type
->GetElementType()->GetGenericArgument(
i
)));
}
.
(
L"> __vwsn_temp_"
);
.
(
(
i
));
.
(
L"; ::vl::reflection::description::UnboxParameter(__vwsn_temp_x"
);
.
(
(
i
));
.
(
L", __vwsn_temp_"
);
.
(
(
i
));
.
(
L");"
);
}
else
{
.
(
L" auto __vwsn_temp_"
);
.
(
(
i
));
.
(
L" = "
);
(
,
i
);
.
(
L";"
);
}
}
.
(
L" return "
);
(
, [&]() {
(
true
); },
);
.
(
L"; }()"
);
}
else
{
(
, [&]() {
(
false
); },
);
}
}
template
<
typename
,
typename
>
void
(
const
&
,
*
,
const
&
,
const
&
,
bool
)
{
(
->
(),
->
(), [&](
) {
return
->
(
index
)->
(); },
[&](
bool
)
{
(
, [&](
const
&
)
{
auto
=
::
;
=
->
();
if
(
item
L"$Type"
)
{
.
(
->
(
->
()));
return
true
;
}
else
if
(
item
L"$Func"
)
{
.
(
->
(
));
return
true
;
}
else
if
(
item
L"$Name"
)
{
.
(
->
(
->
()));
return
true
;
}
else
if
(
item
L"$This"
)
{
if
(!
->
())
{
return
(
);
}
}
else
if
(
item
L"$Arguments"
)
{
if
(
count
==
0
)
{
return
true
;
}
}
else
if
(
item
L", $Arguments"
)
{
if
(
count
==
0
)
{
return
true
;
}
cp
=
::
;
}
else
if
(
item
L"$Arguments, "
)
{
if
(
count
==
0
)
{
return
true
;
}
cp
=
::
;
}
else
{
return
false
;
}
if
(
count
>
0
)
{
if
(
cp
==
::
)
.
(
L", "
);
for
(
=
0
;
i
<
count
;
i
++)
{
if
(
i
>
0
)
.
(
L", "
);
if
(
useTemporaryArgument
)
{
.
(
L"__vwsn_temp_"
);
.
(
(
i
));
}
else
{
(
,
i
);
}
}
if
(
cp
==
::
)
.
(
L", "
);
}
return
true
;
});
},
,
,
);
}
template
<
typename
>
void
(
const
&
,
*
,
const
&
,
bool
)
{
(
->
(),
[&]()
{
(
, [&](
const
&
)
{
if
(
item
L"$Type"
)
{
.
(
->
(
->
()));
return
true
;
}
else
if
(
item
L"$Name"
)
{
.
(
->
(
->
()));
return
true
;
}
else
if
(
item
L"$This"
)
{
return
(
);
}
return
false
;
});
},
);
}
template
<
typename
,
typename
,
typename
>
void
(
const
&
,
*
,
const
&
,
const
&
,
const
&
)
{
auto
=
->
()->
();
(
handlerType
->
() -
1
,
handlerType
->
(
0
), [&](
) {
return
handlerType
->
(
index
+
1
); },
[&](
bool
)
{
(
, [&](
const
&
)
{
auto
=
::
;
=
->
()->
()->
() -
1
;
if
(
item
L"$Name"
)
{
.
(
->
(
->
()));
return
true
;
}
else
if
(
item
L"$This"
)
{
return
(
);
}
else
if
(
item
L"$Handler"
)
{
return
(
);
}
else
if
(
item
L"$Arguments"
)
{
if
(
count
==
0
)
{
return
true
;
}
}
else
if
(
item
L", $Arguments"
)
{
if
(
count
==
0
)
{
return
true
;
}
cp
=
::
;
}
else
if
(
item
L"$Arguments, "
)
{
if
(
count
==
0
)
{
return
true
;
}
cp
=
::
;
}
else
{
return
false
;
}
if
(
count
>
0
)
{
if
(
cp
==
::
)
.
(
L", "
);
for
(
=
0
;
i
<
count
;
i
++)
{
if
(
i
>
0
)
.
(
L", "
);
if
(
useTemporaryArgument
)
{
.
(
L"__vwsn_temp_"
);
.
(
(
i
));
}
else
{
(
,
i
);
}
}
if
(
cp
==
::
)
.
(
L", "
);
}
return
true
;
});
},
,
,
false
);
}
template
<
typename
,
typename
>
bool
(
&
,
const
&
,
const
&
,
bool
)
{
if
(
.
)
{
if
(
(
.
))
{
auto
=
.
;
(
(
methodInfo
),
methodInfo
,
, [&](
*,
){},
);
}
else
{
(
.
);
}
return
true
;
}
else
if
(
.
)
{
if
(
(
.
))
{
if
(
.
->
() ==
nullptr
&&
.
->
() !=
nullptr
)
{
auto
=
.
->
();
(
(
methodInfo
),
methodInfo
,
, [&](
*,
){},
);
}
else
{
auto
=
(
.
);
auto
=
.
;
(
(
propertyInfo
),
propertyInfo
,
,
);
}
}
else
{
(
.
);
}
return
true
;
}
else
{
return
false
;
}
}
void
(
*
,
const
&
)
{
auto
=
->
->
];
bool
=
(
result
,
[&](
*
)
{
(
,
methodInfo
->
());
return
true
;
},
[&](
*
)
{
auto
= (
propertyInfo
->
()->
()
::
) !=
::
;
(
,
propertyInfo
->
());
return
true
;
},
);
if
(!
success
)
{
if
(
result
.
)
{
(
,
result
.
,
false
);
}
else
{
if
((
result
.
()->
()
::
) !=
::
)
{
auto
=
result
.
()->
();
<
>
;
if
(
result
.
() ==
::
)
{
enumValueType
result
.
;
}
else
{
enumValueType
<
>(
result
.
(),
::
);
}
=
enumType
->
(
);
if
(
index
!= -
1
)
{
*
[] = {
enumValueType
.
(),
result
.
.
() };
(
types
, (
sizeof
(
types
) /
sizeof
(*
types
)), [=]()
{
.
(
->
(
result
.
()));
.
(
L"::"
);
.
(
);
});
return
;
}
}
CHECK_FAIL(L"WfGenerateExpressionVisitor::VisitReferenceExpression(WfExpression*, const WString&)#Internal error, cannot find any record of this expression.");
do
{
throw
(
L"WfGenerateExpressionVisitor::VisitReferenceExpression(WfExpression*, const WString&)#Internal error, cannot find any record of this expression."
);}
while
(
0
);
}
}
}
void
(
<
::
>
,
*
)
{
=
0
;
FOREACH(Ptr<WfLexicalSymbol>, symbol, From(closureInfo->symbols.Values()).Union(closureInfo->ctorArgumentSymbols.Values()))
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
(
.
()).
(
.
()));
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
symbol
);)
{
if
(
index
++ >
0
)
{
.
(
L", "
);
}
(
,
symbol
,
true
);
}
FOREACH(ITypeDescriptor*, thisType, closureInfo->thisTypes)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
*>&
= ::
vl
::
collections
::
(
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
*
;
__foreach_iterator__
.
(
thisType
);)
{
if
(
index
++ >
0
)
{
.
(
L", "
);
}
(
,
thisType
);
}
}
void
(
*
)
override
{
auto
=
->
->
];
(
,
result
.
());
}
void
(
*
)
override
{
(
,
->
.
);
}
void
(
*
)
override
{
(
,
->
.
);
}
void
(
*
)
override
{
(
,
->
.
);
}
void
(
WfOrderedLambdaExpression
*
)
override
{
.
(
L"LAMBDA(::"
);
.
(
->
);
.
(
L"::"
);
.
(
->
]);
.
(
L"("
);
auto
=
->
];
(
closureInfo
,
);
.
(
L"))"
);
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
->
->
->
.
()];
(
result
,
[&](
*
)
{
.
(
L"::vl::__vwsn::This("
);
(
->
);
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
.
(
L")"
);
return
true
;
},
[&](
*
)
{
auto
= (
propertyInfo
->
()->
()
::
) !=
::
;
if
(
isRef
)
.
(
L"::vl::__vwsn::This("
);
(
->
);
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
else
if
(
parentResult
.
() ==
::
)
{
.
(
L".Value()"
);
}
if
(
isRef
)
.
(
L")"
);
return
true
;
},
);
}
void
(
*
)
override
{
(
,
->
.
);
}
void
(
*
)
override
{
switch
(
->
)
{
case
::
:
{
auto
=
->
->
];
switch
(
result
.
())
{
case
::
:
case
::
:
.
(
->
(
result
.
.
()));
.
(
L"()"
);
break
;
case
::
:
.
(
L"::vl::reflection::description::Value()"
);
break
;
default
:
.
(
L"static_cast<"
);
.
(
->
(
result
.
.
()));
.
(
L">(nullptr)"
);
}
}
break
;
case
::
:
.
(
L"true"
);
break
;
case
::
:
.
(
L"false"
);
break
;
}
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
();
.
(
L"static_cast<"
);
.
(
->
(
td
));
.
(
L">("
);
if
(
td
==
description
::
<
float
>())
{
.
(
->
.
+
L"f"
);
}
else
{
.
(
->
.
);
}
.
(
L")"
);
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
();
.
(
L"static_cast<"
);
.
(
->
(
td
));
.
(
L">("
);
if
(
td
==
description
::
<
>())
{
.
(
->
.
+
L"U"
);
}
else
if
(
td
==
description
::
<
>())
{
.
(
->
.
+
L"L"
);
}
else
if
(
td
==
description
::
<
>())
{
.
(
->
.
+
L"UL"
);
}
else
{
.
(
->
.
);
}
.
(
L")"
);
}
void
(
*
)
override
{
.
(
L"::vl::WString(L\""
);
for
(
=
0
;
i
<
->
.
.
();
i
++)
{
auto
=
->
.
i
];
switch
(
c
)
{
case
L'\''
:
.
(
L"\\\'"
);
break
;
case
L'\"'
:
.
(
L"\\\""
);
break
;
case
L'\r'
:
.
(
L"\\r"
);
break
;
case
L'\n'
:
.
(
L"\\n"
);
break
;
case
L'\t'
:
.
(
L"\\t"
);
break
;
default
:
.
(
c
);
}
}
.
(
L"\", false)"
);
}
void
(
*
)
override
{
auto
=
->
->
];
switch
(
->
)
{
case
::
:
.
(
L"(+ "
);
(
->
,
result
.
.
());
.
(
L")"
);
break
;
case
::
:
.
(
L"(- "
);
(
->
,
result
.
.
());
.
(
L")"
);
break
;
case
::
:
{
if
(
result
.
() ==
description
::
<
bool
>())
{
.
(
L"(! "
);
}
else
{
if
(
(
result
.
()))
{
.
(
L"static_cast<"
);
.
(
->
(
result
.
()));
.
(
L">"
);
}
.
(
L"(~ "
);
}
(
->
,
result
.
.
());
.
(
L")"
);
}
break
;
}
}
void
(
*
,
const
wchar_t
*
,
*
,
*
)
{
if
(
)
{
.
(
L"static_cast<"
);
.
(
->
(
));
.
(
L">"
);
}
.
(
L"("
);
(
->
,
);
.
(
L" "
);
.
(
);
.
(
L" "
);
(
->
,
);
.
(
L")"
);
}
bool
(
*
)
{
return
==
description
::
<
>()
||
==
description
::
<
>()
||
==
description
::
<
>()
||
==
description
::
<
>()
;
}
void
(
*
)
override
{
if
(
->
==
::
)
{
auto
=
->
->
->
.
()];
if
(
result
.
)
{
auto
=
result
.
;
auto
=
->
.
<
>();
if
(
(
propInfo
))
{
if
(
propInfo
->
() ==
nullptr
&&
propInfo
->
() !=
nullptr
)
{
(
(
propInfo
->
()),
propInfo
->
(),
[&](
*)
{
if
(
member
)
{
.
(
L"::vl::__vwsn::This("
);
(
member
);
auto
=
->
->
member
.
()];
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
.
(
L")"
);
}
else
{
(
->
.
(),
propInfo
->
());
}
return
true
;
},
[&](
*,
)
{
(
->
);
},
);
}
else
{
.
(
L"("
);
(
(
propInfo
),
propInfo
,
[&](
*)
{
if
(
member
)
{
.
(
L"::vl::__vwsn::This("
);
(
member
);
auto
=
->
->
member
.
()];
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
.
(
L")"
);
}
else
{
(
->
.
(),
propInfo
->
());
}
return
true
;
},
true
);
.
(
L" = "
);
(
->
,
propInfo
->
());
.
(
L")"
);
}
}
else
{
(
propInfo
);
}
}
else
if
(
auto
=
->
.
<
>())
{
auto
=
->
->
binary
.
()].
.
();
if
(
(
containerType
))
{
(
binary
,
nullptr
,
false
);
.
(
L".Set("
);
(
binary
);
.
(
L", "
);
(
->
);
.
(
L")"
);
}
else
{
auto
=
->
->
binary
.
()].
.
();
auto
=
->
->
->
.
()].
.
();
.
(
L"::vl::__vwsn::This("
);
(
binary
);
.
(
L".Obj())->Set("
);
if
(
containerType
->
() ==
description
::
<
>())
{
(
keyType
, [&]() {
(
binary
); });
}
else
{
(
binary
);
}
.
(
L", "
);
(
valueType
, [&]() {
(
->
); });
.
(
L")"
);
}
}
else
{
(
,
L"="
,
nullptr
,
nullptr
);
}
}
else
if
(
->
==
::
)
{
auto
=
->
->
->
.
()].
.
();
if
(
(
containerType
))
{
(
->
,
nullptr
,
false
);
.
(
L"["
);
(
->
);
.
(
L"]"
);
}
else
{
auto
=
->
->
->
.
()].
.
();
auto
=
->
->
].
.
();
(
valueType
, [&]()
{
.
(
L"::vl::__vwsn::This("
);
(
->
);
.
(
L".Obj())->Get("
);
if
(
containerType
->
()->
(
description
::
<
>()))
{
(
keyType
, [&]() {
(
->
); });
}
else
{
(
->
);
}
.
(
L")"
);
});
}
}
else
if
(
->
==
::
)
{
auto
=
->
->
].
;
if
(
type
() ==
description
::
<
>())
{
(
,
L"+"
,
nullptr
,
type
.
());
}
else
{
(
,
L"&"
,
nullptr
,
nullptr
);
}
}
else
if
(
->
==
::
)
{
(
,
L"|"
,
nullptr
,
nullptr
);
}
else
if
(
->
==
::
)
{
auto
=
->
->
->
.
()];
auto
=
->
->
->
.
()];
auto
=
(
firstResult
.
,
secondResult
.
);
.
(
L"[&](){ try{ return "
);
(
->
,
mergedType
.
());
.
(
L"; } catch(...){ return "
);
(
->
,
mergedType
.
());
.
(
L"; } }()"
);
}
else
{
auto
=
->
->
];
auto
=
->
->
->
.
()];
auto
=
->
->
->
.
()];
auto
=
(
firstResult
.
,
secondResult
.
);
switch
(
->
)
{
case
::
:
.
(
L"static_cast<"
);
.
(
->
(
result
.
()));
.
(
L">(pow(static_cast<double>("
);
(
->
);
.
(
L"), static_cast<double>("
);
(
->
);
.
(
L")))"
);
return
;
case
::
:
case
::
:
case
::
:
case
::
:
case
::
:
case
::
:
case
::
:
{
const
wchar_t
*
=
nullptr
;
switch
(
->
)
{
case
::
:
op
=
L"+"
;
break
;
case
::
:
op
=
L"-"
;
break
;
case
::
:
op
=
L"*"
;
break
;
case
::
:
op
=
L"/"
;
break
;
case
::
:
op
=
L"%"
;
break
;
case
::
:
op
=
L"<<"
;
break
;
case
::
:
op
=
L">>"
;
break
;
default
:;
}
(
,
op
, (
(
result
.
()) ?
result
.
() :
nullptr
),
result
.
.
());
}
return
;
case
::
:
case
::
:
{
if
(
firstResult
.
() ==
::
||
firstResult
.
() ==
::
)
{
auto
=
mergedType
();
auto
=
firstResult
.
();
auto
=
secondResult
.
();
auto
=
firstResult
.
();
auto
=
secondResult
.
();
.
(
L"("
);
if
(
td
!=
tdFirst
)
{
.
(
L"static_cast<"
);
.
(
->
(
tdFirst
));
.
(
L"*>("
);
}
(
->
);
if
(
dFirst
==
::
)
{
.
(
L".Obj()"
);
}
if
(
td
!=
tdFirst
)
{
.
(
L")"
);
}
if
(
->
==
::
)
{
.
(
L" == "
);
}
else
{
.
(
L" != "
);
}
if
(
td
!=
tdSecond
)
{
.
(
L"static_cast<"
);
.
(
->
(
tdSecond
));
.
(
L"*>("
);
}
(
->
);
if
(
dSecond
==
::
)
{
.
(
L".Obj()"
);
}
if
(
td
!=
tdSecond
)
{
.
(
L")"
);
}
.
(
L")"
);
return
;
}
}
case
::
:
case
::
:
case
::
:
case
::
:
{
const
wchar_t
*
=
nullptr
;
switch
(
->
)
{
case
::
:
op
=
L"<"
;
break
;
case
::
:
op
=
L">"
;
break
;
case
::
:
op
=
L"<="
;
break
;
case
::
:
op
=
L">="
;
break
;
case
::
:
op
=
L"=="
;
break
;
case
::
:
op
=
L"!="
;
break
;
default
:;
}
(
,
op
,
nullptr
,
mergedType
.
());
}
return
;
case
::
:
case
::
:
case
::
:
{
auto
=
result
.
();
const
wchar_t
*
=
nullptr
;
if
(
td
==
description
::
<
bool
>())
{
switch
(
->
)
{
case
::
:
op
=
L"^"
;
break
;
case
::
:
op
=
L"&&"
;
break
;
case
::
:
op
=
L"||"
;
break
;
default
:;
}
if
(
->
!=
::
)
{
td
=
nullptr
;
}
}
else
{
switch
(
->
)
{
case
::
:
op
=
L"^"
;
break
;
case
::
:
op
=
L"&"
;
break
;
case
::
:
op
=
L"|"
;
break
;
default
:;
}
if
(!
(
td
))
{
td
=
nullptr
;
}
}
(
,
op
,
td
,
result
.
.
());
}
return
;
default
:;
}
}
}
void
(
*
)
override
{
auto
=
->
->
];
.
(
L"[&]("
);
FOREACH_INDEXER(Ptr<WfLetVariable>, letVar, index, node->variables)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
if
(
bool
=
true
)
for
(
=
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
letVar
);
index
++)
{
if
(
index
>
0
)
{
.
(
L", "
);
}
.
(
L"auto "
);
.
(
->
(
letVar
.
));
}
.
(
L"){ return "
);
(
->
);
.
(
L"; }("
);
FOREACH_INDEXER(Ptr<WfLetVariable>, letVar, index, node->variables)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
if
(
bool
=
true
)
for
(
=
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
letVar
);
index
++)
{
if
(
index
>
0
)
{
.
(
L", "
);
}
auto
=
scope
letVar
.
]
0
];
(
letVar
,
symbol
.
());
}
.
(
L")"
);
}
void
(
*
)
override
{
auto
=
->
->
->
.
()];
auto
=
->
->
->
.
()];
auto
=
(
firstResult
.
,
secondResult
.
);
.
(
L"("
);
(
->
);
.
(
L" ? "
);
(
->
,
mergedType
.
());
.
(
L" : "
);
(
->
,
mergedType
.
());
.
(
L")"
);
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
()->
(
0
);
.
(
L"::vl::__vwsn::Range("
);
(
->
,
elementType
);
if
(
->
==
::
)
{
.
(
L" + 1"
);
}
.
(
L", "
);
(
->
,
elementType
);
if
(
->
==
::
)
{
.
(
L" + 1"
);
}
.
(
L")"
);
}
void
(
*
)
override
{
if
(
auto
=
->
.
<
>())
{
auto
=
->
->
->
.
()];
auto
=
->
->
range
.
()];
auto
=
->
->
range
.
()];
.
(
L"[&](auto __vwsn_1){ return "
);
if
(
->
==
::
)
{
.
(
L"!"
);
}
.
(
L"("
);
(
range
);
.
(
range
==
::
?
L" <= "
:
L" < "
);
.
(
L" __vwsn_1 && __vwsn_1"
);
.
(
range
==
::
?
L" <= "
:
L" < "
);
(
range
);
.
(
L"); }("
);
(
->
,
resultElement
.
.
());
.
(
L")"
);
}
else
{
auto
=
->
->
->
.
()];
auto
=
result
.
()->
(
0
);
if
(
->
==
::
)
{
.
(
L"(! "
);
}
.
(
L"::vl::__vwsn::InSet("
);
(
->
,
elementType
);
.
(
L", "
);
(
->
);
.
(
L")"
);
if
(
->
==
::
)
{
.
(
L")"
);
}
}
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
();
if
(
->
.
() ==
0
)
{
if
((
td
->
()
::
) !=
::
)
{
.
(
->
(
result
.
.
()) +
L"{}"
);
}
else
{
.
(
->
(
td
) +
L"::Create()"
);
}
}
else
{
if
(
result
.
() ==
description
::
<
>())
{
auto
=
result
.
()->
(
0
);
.
(
L"(::vl::__vwsn::CreateList()"
);
FOREACH(Ptr<WfConstructorArgument>, argument, node->arguments)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
argument
);)
{
.
(
L".Add("
);
(
argument
);
.
(
L")"
);
}
.
(
L").list"
);
}
else
if
(
result
.
() ==
description
::
<
>())
{
auto
=
result
.
()->
(
0
);
.
(
L"(::vl::__vwsn::CreateObservableList()"
);
FOREACH(Ptr<WfConstructorArgument>, argument, node->arguments)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
argument
);)
{
.
(
L".Add("
);
(
argument
);
.
(
L")"
);
}
.
(
L").list"
);
}
else
if
(
result
.
() ==
description
::
<
>())
{
auto
=
result
.
()->
(
0
);
auto
=
result
.
()->
(
1
);
.
(
L"(::vl::__vwsn::CreateDictionary()"
);
FOREACH(Ptr<WfConstructorArgument>, argument, node->arguments)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
argument
);)
{
.
(
L".Add("
);
(
argument
);
.
(
L", "
);
(
argument
);
.
(
L")"
);
}
.
(
L").dictionary"
);
}
else
{
.
(
L"[&](){ "
);
.
(
->
(
td
));
.
(
L" __vwsn_temp__;"
);
FOREACH(Ptr<WfConstructorArgument>, argument, node->arguments)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
->
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
argument
);)
{
.
(
L" __vwsn_temp__."
);
.
(
argument
.
<
>()
.
);
.
(
L" = "
);
(
argument
);
.
(
L";"
);
}
.
(
L" return __vwsn_temp__; }()"
);
}
}
}
void
(
*
)
override
{
(
->
);
}
void
(
*
)
override
{
auto
=
->
->
].
();
auto
=
(
scope
,
->
);
bool
=
->
==
::
;
auto
=
->
->
->
.
()];
(
,
,
result
.
.
(),
typeInfo
.
(), [&]() {
(
->
); },
strongCast
);
}
void
(
*
)
override
{
auto
=
->
->
->
.
()];
<
>
;
if
(
->
)
{
auto
=
->
->
].
();
type
(
scope
,
->
);
}
switch
(
result
.
())
{
case
::
:
{
switch
(
->
)
{
case
::
:
.
(
L"("
);
(
->
);
.
(
L" == nullptr)"
);
break
;
case
::
:
.
(
L"("
);
(
->
);
.
(
L" != nullptr)"
);
break
;
case
::
:
case
::
:
if
(
type
() !=
::
)
{
.
(
->
==
::
?
L"false"
:
L"true"
);
}
else
{
.
(
L"(::vl::__vwsn::RawPtrCast<"
);
.
(
->
(
type
()));
.
(
L">("
);
(
->
);
.
(
L") "
);
.
(
->
==
::
?
L"!="
:
L"=="
);
.
(
L" nullptr)"
);
}
break
;
}
}
break
;
case
::
:
{
if
(
result
.
()->
() ==
::
)
{
auto
= [&]()
{
return
([&](
&
)
{
(
,
::
,
writer
);
});
};
if
(
->
(
result
.
.
()))
{
.
(
L"/* NOT SUPPORTS: testing against non-reference generic type: "
);
.
(
toCode
());
.
(
L" */ __vwsn_not_exists__"
);
return
;
}
}
switch
(
->
)
{
case
::
:
.
(
L"(! static_cast<bool>("
);
(
->
);
.
(
L"))"
);
break
;
case
::
:
.
(
L"static_cast<bool>("
);
(
->
);
.
(
L")"
);
break
;
case
::
:
case
::
:
if
(
type
() !=
::
)
{
.
(
->
==
::
?
L"false"
:
L"true"
);
}
else
{
.
(
L"(::vl::__vwsn::RawPtrCast<"
);
.
(
->
(
type
()));
.
(
L">("
);
(
->
);
.
(
L".Obj()) "
);
.
(
->
==
::
?
L"!="
:
L"=="
);
.
(
L" nullptr)"
);
}
break
;
}
}
break
;
case
::
:
{
switch
(
->
)
{
case
::
:
.
(
L"(! static_cast<bool>("
);
(
->
);
.
(
L"))"
);
break
;
case
::
:
.
(
L"static_cast<bool>("
);
(
->
);
.
(
L")"
);
break
;
case
::
:
if
(
type
() ==
result
.
())
{
.
(
L"static_cast<bool>("
);
(
->
);
.
(
L")"
);
}
else
{
.
(
L"false"
);
}
break
;
case
::
:
if
(
type
() ==
result
.
())
{
.
(
L"false"
);
}
else
{
.
(
L"true"
);
}
break
;
}
}
break
;
case
::
:
{
if
(
result
.
()->
() ==
::
)
{
switch
(
->
)
{
case
::
:
(
->
);
.
(
L".IsNull()"
);
break
;
case
::
:
.
(
L"(! "
);
(
->
);
.
(
L".IsNull())"
);
break
;
case
::
:
case
::
:
if
((
type
()->
()
::
) !=
::
)
{
.
(
L"[&](){ auto __vwsn_temp__ = "
);
(
->
);
.
(
L"; return "
);
if
((
type
() ==
::
) == (
->
==
::
))
{
.
(
L"!"
);
}
.
(
L"__vwsn_temp__.GetSharedPtr() "
);
.
(
->
==
::
?
L"&&"
:
L"||"
);
.
(
L" ::vl::__vwsn::RawPtrCast<"
);
.
(
->
(
type
()));
.
(
L">(__vwsn_temp__.GetRawPtr()) "
);
.
(
->
==
::
?
L"!="
:
L"=="
);
.
(
L" nullptr; }()"
);
}
else
{
.
(
L"(dynamic_cast<::vl::reflection::description::IValueType::TypedBox<"
);
.
(
->
(
type
()));
.
(
L">*>("
);
(
->
);
.
(
L".GetBoxedValue().Obj()) "
);
.
(
->
==
::
?
L"!="
:
L"=="
);
.
(
L" nullptr)"
);
}
break
;
}
}
else
if
((
type
() ==
result
.
()) == (
->
==
::
))
{
.
(
L"true"
);
}
else
{
.
(
L"false"
);
}
}
break
;
default
:;
}
}
void
(
*
)
override
{
.
(
L"/* NOT SUPPORTS: typeof() */ __vwsn_not_exists__"
);
}
void
(
WfTypeOfExpressionExpression
*
)
override
{
.
(
L"/* NOT SUPPORTS: type() */ __vwsn_not_exists__"
);
}
void
(
*
)
override
{
auto
=
->
->
->
.
()];
if
(
(
result
.
))
{
(
(
result
.
),
result
.
,
[&](
*)
{
.
(
L"::vl::__vwsn::This("
);
if
(
auto
=
->
.
<
>())
{
(
member
);
auto
=
->
->
member
.
()];
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
}
else
{
(
,
result
.
->
());
}
.
(
L")"
);
return
true
;
},
[&](
*)
{
(
->
);
return
true
;
},
[&](
*,
) {});
}
else
{
(
result
.
);
}
}
void
(
*
)
override
{
auto
=
->
->
->
.
()];
if
(
(
result
.
))
{
(
(
result
.
),
result
.
,
[&](
*
)
{
.
(
L"::vl::__vwsn::This("
);
if
(
auto
=
->
.
<
>())
{
(
member
);
auto
=
->
->
member
.
()];
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
}
else
{
(
,
eventInfo
->
());
}
.
(
L")"
);
return
true
;
},
[&](
*)
{
(
->
);
return
true
;
},
[&](
*,
) {});
}
else
{
(
result
.
);
}
}
void
(
*
)
override
{
}
void
(
*
)
override
{
auto
= [&](
*
)
{
if
(
auto
=
->
.
<
>())
{
.
(
L"::vl::__vwsn::This("
);
(
member
);
auto
=
->
->
member
.
()];
if
(
parentResult
.
() ==
::
)
{
.
(
L".Obj()"
);
}
.
(
L")"
);
}
else
{
(
,
td
);
}
return
true
;
};
auto
= [&](
*
,
*
,
)
{
auto
=
methodInfo
?
methodInfo
->
(
index
)->
()
:
typeInfo
->
()->
(
index
+
1
)
;
(
->
index
],
type
);
};
auto
=
->
->
->
.
()];
if
(
result
.
)
{
(
(
result
.
),
result
.
,
[&](
*
) {
return
thisCallback
(
methodInfo
->
()); },
[&](
*
,
) {
return
argumentCallback
(
methodInfo
,
nullptr
,
index
); },
);
return
;
}
else
if
(
result
.
)
{
(
(
result
.
),
result
.
,
[&](
*
) {
return
thisCallback
(
eventInfo
->
()); },
[&](
*) {
return
false
; },
[&](
*
,
) {
return
argumentCallback
(
nullptr
,
eventInfo
->
(),
index
); }
);
return
;
}
else
if
(
result
.
)
{
if
(
auto
=
result
.
.
<
>())
{
if
(
result
.
->
.
<
>())
{
.
(
L"this->"
);
.
(
->
(
result
.
));
}
else
if
(
result
.
->
&&
result
.
->
&&
result
.
==
funcDecl
.
)
{
.
(
L"(*this)"
);
}
else
{
.
(
L"GLOBAL_NAME "
);
.
(
->
(
result
.
));
}
.
(
L"("
);
for
(
=
0
;
i
<
->
.
();
i
++)
{
if
(
i
>
0
)
.
(
L", "
);
argumentCallback
(
nullptr
,
result
.
.
(),
i
);
}
.
(
L")"
);
return
;
}
}
(
->
);
.
(
L"("
);
for
(
=
0
;
i
<
->
.
();
i
++)
{
if
(
i
>
0
)
.
(
L", "
);
argumentCallback
(
nullptr
,
result
.
.
(),
i
);
}
.
(
L")"
);
}
void
(
*
)
override
{
.
(
L"LAMBDA(::"
);
.
(
->
);
.
(
L"::"
);
.
(
->
]);
.
(
L"("
);
auto
=
->
];
(
closureInfo
,
);
.
(
L"))"
);
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
;
if
(
ctor
->
()->
() ==
::
)
{
.
(
L"::vl::Ptr<"
);
.
(
->
(
ctor
->
()->
()));
.
(
L">("
);
}
(
(
ctor
),
ctor
, [&](
*) {
return
false
; },
[&](
*,
)
{
(
->
index
]);
},
);
if
(
ctor
->
()->
() ==
::
)
{
.
(
L")"
);
}
}
void
(
*
)
override
{
auto
=
->
->
];
auto
=
result
.
;
if
(
ctor
->
()->
() ==
::
)
{
.
(
L"::vl::Ptr<"
);
.
(
->
(
ctor
->
()->
()));
.
(
L">("
);
}
else
{
.
(
L"static_cast<"
);
.
(
->
(
ctor
->
()->
()));
.
(
L"*>("
);
}
.
(
L"new ::"
);
.
(
->
);
.
(
L"::"
);
.
(
->
]);
.
(
L"("
);
auto
=
->
];
(
closureInfo
,
);
.
(
L"))"
);
}
void
(
*
)
override
{
(
->
);
}
void
(
*
)
override
{
(
->
);
}
};
void
(
*
,
stream
::
&
,
<
>
,
reflection
::
description
::
*
,
bool
)
{
WfGenerateExpressionVisitor
(
,
,
);
if
(
)
{
auto
=
->
->
.
()];
*
[] = {
result
.
.
(),
result
.
.
(),
};
visitor
.
(
types
,
sizeof
(
types
) /
sizeof
(*
types
), [&]()
{
(&
visitor
);
});
}
else
{
(&
visitor
);
}
}
}
}
}