@@ -125,6 +125,7 @@ public override void VisitToken(SyntaxToken token)
125125 VisitTrailingTrivia ( token ) ;
126126 return ;
127127 }
128+ case SyntaxKind . InKeyword :
128129 case SyntaxKind . StaticKeyword :
129130 case SyntaxKind . TrueKeyword :
130131 case SyntaxKind . FalseKeyword :
@@ -632,7 +633,7 @@ public override void VisitBlock(BlockSyntax node)
632633 VisitLabeledStatement ( ( LabeledStatementSyntax ) asNode ) ;
633634 break ;
634635 case SyntaxKind . ForEachVariableStatement :
635- VisitForEachStatement ( ( ForEachStatementSyntax ) asNode ) ;
636+ VisitForEachVariableStatement ( ( ForEachVariableStatementSyntax ) asNode ) ;
636637 break ;
637638 default :
638639 Log . ErrorLine ( $ "asNode : { kind } \n |{ asNode . ToFullString ( ) } |") ;
@@ -4213,10 +4214,136 @@ public override void VisitFixedStatement(FixedStatementSyntax node)
42134214 }
42144215 public override void VisitForEachVariableStatement ( ForEachVariableStatementSyntax node )
42154216 {
4216- #if DEBUG
4217- Log . WarningLine ( $ "Not implemented or unlikely to be implemented. Calling base! (FullSpan: { node . FullSpan } |Location{ node . GetLocation ( ) . GetLineSpan ( ) } )\n |{ node . ToFullString ( ) } |") ;
4218- #endif
4219- base . VisitForEachVariableStatement ( node ) ;
4217+ if ( _Options . Debug )
4218+ {
4219+ JSSB . Append ( "/*" ) ;
4220+ string [ ] strings = node . ToFullString ( ) . Split ( [ "\r \n " , "\r " , "\n " ] , StringSplitOptions . RemoveEmptyEntries ) ;
4221+ JSSB . Append ( string . IsNullOrWhiteSpace ( strings [ 0 ] ) ? strings [ 1 ] : strings [ 0 ] ) ;
4222+ JSSB . AppendLine ( "*/" ) ;
4223+ }
4224+
4225+ ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
4226+
4227+ for ( int i = 0 ; i < nodesAndTokens . Count ; i ++ )
4228+ {
4229+ SyntaxNode ? asNode = nodesAndTokens [ i ] . AsNode ( ) ;
4230+
4231+ if ( asNode != null )
4232+ {
4233+ SyntaxKind kind = asNode . Kind ( ) ;
4234+
4235+ switch ( kind )
4236+ {
4237+ case SyntaxKind . ExpressionStatement :
4238+ VisitExpressionStatement ( ( ExpressionStatementSyntax ) asNode ) ;
4239+ break ;
4240+ case SyntaxKind . Block :
4241+ VisitBlock ( ( BlockSyntax ) asNode ) ;
4242+ break ;
4243+ case SyntaxKind . GenericName :
4244+ case SyntaxKind . PredefinedType :
4245+ {
4246+ SyntaxTriviaList _syntaxTrivias = asNode . GetLeadingTrivia ( ) ;
4247+
4248+ for ( int _i = 0 ; _i < _syntaxTrivias . Count ; _i ++ )
4249+ {
4250+ VisitTrivia ( _syntaxTrivias [ _i ] ) ;
4251+ }
4252+
4253+ if ( _Options . UseVarOverLet )
4254+ JSSB . Append ( "var" ) ;
4255+ else
4256+ JSSB . Append ( "let" ) ;
4257+
4258+ _syntaxTrivias = asNode . GetTrailingTrivia ( ) ;
4259+ for ( int _i = 0 ; _i < _syntaxTrivias . Count ; _i ++ )
4260+ {
4261+ VisitTrivia ( _syntaxTrivias [ _i ] ) ;
4262+ }
4263+ break ;
4264+ }
4265+ case SyntaxKind . IdentifierName :
4266+ {
4267+ IdentifierNameSyntax ? _ins = asNode as IdentifierNameSyntax ;
4268+ if ( _ins != null )
4269+ {
4270+ if ( _ins . IsVar )
4271+ {
4272+ SyntaxTriviaList _syntaxTrivias = asNode . GetLeadingTrivia ( ) ;
4273+
4274+ for ( int _i = 0 ; _i < _syntaxTrivias . Count ; _i ++ )
4275+ {
4276+ VisitTrivia ( _syntaxTrivias [ _i ] ) ;
4277+ }
4278+
4279+ if ( _Options . UseVarOverLet )
4280+ JSSB . Append ( "var" ) ;
4281+ else
4282+ JSSB . Append ( "let" ) ;
4283+
4284+ _syntaxTrivias = asNode . GetTrailingTrivia ( ) ;
4285+ for ( int _i = 0 ; _i < _syntaxTrivias . Count ; _i ++ )
4286+ {
4287+ VisitTrivia ( _syntaxTrivias [ _i ] ) ;
4288+ }
4289+ }
4290+ else
4291+ {
4292+ if ( IdentifierToken ( asNode ) == false )
4293+ {
4294+ VisitIdentifierName ( _ins ) ;
4295+ }
4296+ }
4297+ }
4298+ else
4299+ {
4300+ Log . ErrorLine ( $ "_ins is null") ;
4301+ }
4302+
4303+ break ;
4304+ }
4305+ case SyntaxKind . SimpleMemberAccessExpression :
4306+ case SyntaxKind . PointerMemberAccessExpression :
4307+ VisitMemberAccessExpression ( ( MemberAccessExpressionSyntax ) asNode ) ;
4308+ break ;
4309+ default :
4310+ Log . ErrorLine ( $ "asNode : { kind } \n |{ asNode . ToFullString ( ) } |") ;
4311+ break ;
4312+ }
4313+ }
4314+ else
4315+ {
4316+ SyntaxToken asToken = nodesAndTokens [ i ] . AsToken ( ) ;
4317+ SyntaxKind kind = asToken . Kind ( ) ;
4318+
4319+ switch ( kind )
4320+ {
4321+
4322+ case SyntaxKind . IdentifierToken :
4323+ {
4324+ VisitLeadingTrivia ( asToken ) ;
4325+ JSSB . Append ( $ "{ asToken . Text } ") ;
4326+ VisitTrailingTrivia ( asToken ) ;
4327+ break ;
4328+ }
4329+ case SyntaxKind . ForEachKeyword :
4330+ {
4331+ VisitLeadingTrivia ( asToken ) ;
4332+ JSSB . Append ( "for" ) ;
4333+ VisitTrailingTrivia ( asToken ) ;
4334+ break ;
4335+ }
4336+ case SyntaxKind . InKeyword :
4337+ case SyntaxKind . CloseParenToken :
4338+ case SyntaxKind . OpenParenToken :
4339+ VisitToken ( asToken ) ;
4340+ break ;
4341+ default :
4342+ Log . ErrorLine ( $ "asToken : { kind } ") ;
4343+ break ;
4344+ }
4345+ }
4346+ }
42204347 }
42214348 public override void VisitForStatement ( ForStatementSyntax node )
42224349 {
@@ -4588,8 +4715,10 @@ public override void VisitInvocationExpression(InvocationExpressionSyntax node)
45884715 JSSB . AppendLine ( "*/" ) ;
45894716 }
45904717
4591- bool _isEqualsStrict = false ;
4592- bool _isInequalsStrict = false ;
4718+ bool isEqualsStrict = false ;
4719+ bool isInequalsStrict = false ;
4720+ bool isDelete = false ;
4721+ bool isVoid = false ;
45934722
45944723 ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
45954724
@@ -4607,28 +4736,42 @@ public override void VisitInvocationExpression(InvocationExpressionSyntax node)
46074736 {
46084737 IdentifierNameSyntax _identifier = ( IdentifierNameSyntax ) asNode ;
46094738 if ( _identifier . Identifier . Text == "EqualsStrict" )
4610- _isEqualsStrict = true ;
4611- else if ( _identifier . Identifier . Text == "InequalsStrict" )
4612- _isInequalsStrict = true ;
4739+ isEqualsStrict = true ;
4740+ else if ( _identifier . Identifier . Text == "InequalsStrict" )
4741+ isInequalsStrict = true ;
4742+ else if ( _identifier . Identifier . Text == "Delete" )
4743+ isDelete = true ;
4744+ else if ( _identifier . Identifier . Text == "Void" )
4745+ isVoid = true ;
46134746 else
46144747 VisitIdentifierName ( _identifier ) ;
46154748 break ;
46164749 }
46174750 case SyntaxKind . ArgumentList :
46184751 {
46194752 ArgumentListSyntax _arguments = ( ArgumentListSyntax ) asNode ;
4620- if ( _isEqualsStrict )
4753+ if ( isEqualsStrict )
46214754 {
46224755 VisitArgument ( _arguments . Arguments [ 0 ] ) ;
46234756 JSSB . Append ( "===" ) ;
46244757 VisitArgument ( _arguments . Arguments [ 1 ] ) ;
46254758 }
4626- else if ( _isInequalsStrict )
4759+ else if ( isInequalsStrict )
46274760 {
46284761 VisitArgument ( _arguments . Arguments [ 0 ] ) ;
46294762 JSSB . Append ( "!==" ) ;
46304763 VisitArgument ( _arguments . Arguments [ 1 ] ) ;
46314764 }
4765+ else if ( isDelete )
4766+ {
4767+ JSSB . Append ( "delete " ) ;
4768+ VisitArgument ( _arguments . Arguments [ 0 ] ) ;
4769+ }
4770+ else if ( isVoid )
4771+ {
4772+ JSSB . Append ( "void " ) ;
4773+ VisitArgument ( _arguments . Arguments [ 0 ] ) ;
4774+ }
46324775 else
46334776 VisitArgumentList ( _arguments ) ;
46344777 break ;
0 commit comments