@@ -43,13 +43,15 @@ class CppCodeGenerator : ICodeGenerator
4343
4444 public string GenerateCode ( IEnumerable < ClassNode > classes , ILogger logger )
4545 {
46+ var classNodes = classes as IList < ClassNode > ?? classes . ToList ( ) ;
47+
4648 var sb = new StringBuilder ( ) ;
4749 sb . AppendLine ( $ "// Created with { Constants . ApplicationName } by { Constants . Author } ") ;
4850 sb . AppendLine ( ) ;
4951 sb . AppendLine (
5052 string . Join (
5153 "\n \n " ,
52- OrderByInheritance ( classes . Where ( c => c . Nodes . None ( n => n is FunctionNode ) ) ) . Select ( c =>
54+ OrderByInheritance ( classNodes . Where ( c => c . Nodes . None ( n => n is FunctionNode ) ) ) . Select ( c =>
5355 {
5456 var csb = new StringBuilder ( ) ;
5557 csb . Append ( $ "class { c . Name } ") ;
@@ -81,26 +83,26 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
8183 )
8284 ) ;
8385
84- var vtables = c . Nodes . OfType < VTableNode > ( ) ;
85- if ( vtables . Any ( ) )
86+ var vTableNodes = c . Nodes . OfType < VTableNode > ( ) . ToList ( ) ;
87+ if ( vTableNodes . Any ( ) )
8688 {
8789 csb . AppendLine ( ) ;
8890 csb . AppendLine (
8991 string . Join (
9092 "\n " ,
91- vtables . SelectMany ( vt => vt . Nodes ) . OfType < VMethodNode > ( ) . Select ( m => $ "\t virtual void { m . MethodName } ();")
93+ vTableNodes . SelectMany ( vt => vt . Nodes ) . OfType < VMethodNode > ( ) . Select ( m => $ "\t virtual void { m . MethodName } ();")
9294 )
9395 ) ;
9496 }
9597
96- var functions = classes . SelectMany ( c2 => c2 . Nodes ) . OfType < FunctionNode > ( ) . Where ( f => f . BelongsToClass == c ) ;
97- if ( functions . Any ( ) )
98+ var functionNodes = classNodes . SelectMany ( c2 => c2 . Nodes ) . OfType < FunctionNode > ( ) . Where ( f => f . BelongsToClass == c ) . ToList ( ) ;
99+ if ( functionNodes . Any ( ) )
98100 {
99101 csb . AppendLine ( ) ;
100102 csb . AppendLine (
101103 string . Join (
102104 "\n " ,
103- functions . Select ( f => $ "\t { f . Signature } {{ }}")
105+ functionNodes . Select ( f => $ "\t { f . Signature } {{ }}")
104106 )
105107 ) ;
106108 }
@@ -139,7 +141,7 @@ private IEnumerable<ClassNode> YieldReversedHierarchy(ClassNode node, HashSet<Cl
139141
140142 foreach ( var referenceNode in node . Nodes . OfType < BaseReferenceNode > ( ) )
141143 {
142- foreach ( var referencedNode in YieldReversedHierarchy ( referenceNode . InnerNode as ClassNode , alreadySeen ) )
144+ foreach ( var referencedNode in YieldReversedHierarchy ( referenceNode . InnerNode , alreadySeen ) )
143145 {
144146 yield return referencedNode ;
145147 }
@@ -181,11 +183,7 @@ private IEnumerable<MemberDefinition> YieldMemberDefinitions(IEnumerable<BaseNod
181183 string type ;
182184 if ( typeToTypedefMap . TryGetValue ( member . GetType ( ) , out type ) )
183185 {
184- int count = 0 ;
185- if ( member is BaseTextNode )
186- {
187- count = ( ( BaseTextNode ) member ) . Length ;
188- }
186+ var count = ( member as BaseTextNode ) ? . Length ?? 0 ;
189187
190188 yield return new MemberDefinition ( member , type , count ) ;
191189 }
@@ -257,10 +255,7 @@ private string MemberDefinitionToString(MemberDefinition member)
257255 {
258256 return $ "{ member . Type } { member . Name } [{ member . ArrayCount } ]; //0x{ member . Offset : X04} { member . Comment } ". Trim ( ) ;
259257 }
260- else
261- {
262- return $ "{ member . Type } { member . Name } ; //0x{ member . Offset : X04} { member . Comment } ". Trim ( ) ;
263- }
258+ return $ "{ member . Type } { member . Name } ; //0x{ member . Offset : X04} { member . Comment } ". Trim ( ) ;
264259 }
265260 }
266261}
0 commit comments