@@ -31,6 +31,7 @@ public class FunctionDefinition
31
31
32
32
public List < FunctionParameter > Parameters = null ;
33
33
public string ReturnType ;
34
+ public Dictionary < string , FunctionTag > Tags ;
34
35
35
36
public override string ToString ( )
36
37
{
@@ -53,6 +54,12 @@ public override string ToString()
53
54
}
54
55
} ;
55
56
57
+ public class FunctionTag
58
+ {
59
+ public string TagName ;
60
+ public List < string > TagParams ;
61
+ } ;
62
+
56
63
private class StructureMember
57
64
{
58
65
public string Name ;
@@ -72,14 +79,22 @@ private enum CharacterClass
72
79
73
80
private static CharacterClass LexerClassify ( char c , CharacterClass currentclass )
74
81
{
75
- if ( "abcdef0123456789 " . Contains ( c ) )
82
+ if ( "abcdef " . Contains ( c ) )
76
83
{
77
84
if ( currentclass == CharacterClass . Literal )
78
85
return CharacterClass . Literal ;
79
86
80
87
return CharacterClass . Identifier ;
81
88
}
82
89
90
+ if ( "0123456789" . Contains ( c ) )
91
+ {
92
+ if ( currentclass == CharacterClass . Identifier )
93
+ return CharacterClass . Identifier ;
94
+
95
+ return CharacterClass . Literal ;
96
+ }
97
+
83
98
if ( c == 'x' )
84
99
{
85
100
if ( currentclass == CharacterClass . Literal )
@@ -600,15 +615,17 @@ private static bool ParseFunction(string filename, List<string> tokens)
600
615
601
616
tokens . RemoveRange ( 0 , 2 ) ;
602
617
603
- ParsedFunctionNames [ filename ] . Add ( functionname ) ;
618
+ var sig = GetOrCreateFunctionSignature ( filename , functionname ) ;
604
619
605
620
if ( tokens [ 0 ] != "[" )
606
621
{
607
622
ParseFunctionParams ( tokens , filename , functionname ) ;
608
623
ParseFunctionReturn ( tokens , filename , functionname ) ;
609
624
}
610
- ParseFunctionTags ( tokens ) ;
625
+ ParseFunctionTags ( tokens , sig ) ;
611
626
627
+ if ( sig . Tags == null || ! sig . Tags . ContainsKey ( "constructor" ) )
628
+ ParsedFunctionNames [ filename ] . Add ( functionname ) ;
612
629
613
630
if ( tokens . Count <= 0 || tokens [ 0 ] != "{" )
614
631
return true ;
@@ -710,12 +727,12 @@ private static void ParseFunctionParams(List<string> tokens, string filename, st
710
727
param . Name = nametoken ;
711
728
sig . Parameters . Add ( param ) ;
712
729
}
713
- }
714
730
715
- if ( tokens [ 0 ] != "," )
716
- return ;
731
+ if ( tokens [ 0 ] != "," )
732
+ return ;
717
733
718
- tokens . RemoveAt ( 0 ) ;
734
+ tokens . RemoveAt ( 0 ) ;
735
+ }
719
736
}
720
737
721
738
private static void ParseFunctionReturn ( List < string > tokens , string filename , string functionname )
@@ -747,6 +764,7 @@ private static FunctionDefinition GetOrCreateFunctionSignature(string filename,
747
764
newfunc . FunctionName = functionname ;
748
765
newfunc . Parameters = new List < FunctionParameter > ( ) ;
749
766
newfunc . ReturnType = null ;
767
+ newfunc . Tags = null ;
750
768
751
769
defs . Add ( functionname , newfunc ) ;
752
770
return newfunc ;
@@ -755,7 +773,7 @@ private static FunctionDefinition GetOrCreateFunctionSignature(string filename,
755
773
return defs [ functionname ] ;
756
774
}
757
775
758
- private static void ParseFunctionTags ( List < string > tokens )
776
+ private static void ParseFunctionTags ( List < string > tokens , FunctionDefinition func )
759
777
{
760
778
if ( tokens . Count <= 0 )
761
779
return ;
@@ -766,15 +784,24 @@ private static void ParseFunctionTags(List<string> tokens)
766
784
tokens . RemoveAt ( 0 ) ;
767
785
768
786
while ( tokens [ 0 ] != "]" )
769
- ParseSingleFunctionTag ( tokens ) ;
787
+ ParseSingleFunctionTag ( tokens , func ) ;
770
788
771
789
tokens . RemoveAt ( 0 ) ;
772
790
}
773
791
774
- private static void ParseSingleFunctionTag ( List < string > tokens )
792
+ private static void ParseSingleFunctionTag ( List < string > tokens , FunctionDefinition func )
775
793
{
794
+ var tag = new FunctionTag ( ) ;
795
+ tag . TagName = tokens [ 0 ] ;
796
+
797
+ if ( func . Tags == null )
798
+ func . Tags = new Dictionary < string , FunctionTag > ( ) ;
799
+
800
+ func . Tags . Add ( tag . TagName , tag ) ;
801
+
776
802
if ( tokens [ 1 ] == "(" )
777
803
{
804
+ // TODO - parse tag params
778
805
tokens . RemoveRange ( 0 , 2 ) ;
779
806
780
807
while ( tokens [ 0 ] != ")" )
0 commit comments