11using JetBrains . Annotations ;
22using PatchManager . SassyPatching . Exceptions ;
33using PatchManager . SassyPatching . Interfaces ;
4+ using PatchManager . SassyPatching . Nodes ;
45using PatchManager . SassyPatching . Nodes . Statements . SelectionLevel ;
56using PatchManager . SassyPatching . Nodes . Statements . TopLevel ;
67
@@ -17,48 +18,10 @@ public PatchMixin(Mixin mixin)
1718
1819 public void Include ( Environment env , List < PatchArgument > arguments , ISelectable selectable , [ CanBeNull ] IModifiable modifiable )
1920 {
20- Environment subEnvironment = new Environment ( env . GlobalEnvironment , env ) ;
21+ var subEnvironment = new Environment ( env . GlobalEnvironment , env ) ;
2122 foreach ( var arg in Function . Arguments )
2223 {
23- // As per usual we consume
24- bool foundPositional = false ;
25- DataValue argument = null ;
26- int removalIndex = - 1 ;
27- for ( int i = 0 ; i < arguments . Count ; i ++ )
28- {
29- if ( ! foundPositional && arguments [ i ] . ArgumentName == null )
30- {
31- foundPositional = true ;
32- removalIndex = i ;
33- argument = arguments [ i ] . ArgumentDataValue ;
34- }
35-
36- if ( arguments [ i ] . ArgumentName != arg . Name ) continue ;
37- removalIndex = i ;
38- argument = arguments [ i ] . ArgumentDataValue ;
39- break ;
40- }
41-
42- if ( removalIndex >= 0 )
43- {
44- arguments . RemoveAt ( removalIndex ) ;
45- }
46- if ( argument == null )
47- {
48- if ( arg . Value != null )
49- {
50- subEnvironment [ arg . Name ] = arg . Value . Compute ( subEnvironment ) ;
51- }
52- else
53- {
54- throw new InvocationException ( $ "No value found for argument: { arg . Name } ") ;
55- }
56- }
57- else
58- {
59- // args.Add(CheckParameter(parameter, argument));
60- subEnvironment [ arg . Name ] = argument ;
61- }
24+ ConsumeMixinArgument ( arguments , arg , subEnvironment ) ;
6225 }
6326
6427 if ( arguments . Count > 0 )
@@ -78,4 +41,47 @@ public void Include(Environment env, List<PatchArgument> arguments, ISelectable
7841 }
7942
8043 }
44+
45+ private static void ConsumeMixinArgument ( List < PatchArgument > arguments , Argument arg , Environment subEnvironment )
46+ {
47+ // As per usual we consume
48+ var foundPositional = false ;
49+ DataValue argument = null ;
50+ var removalIndex = - 1 ;
51+ for ( var i = 0 ; i < arguments . Count ; i ++ )
52+ {
53+ if ( ! foundPositional && arguments [ i ] . ArgumentName == null )
54+ {
55+ foundPositional = true ;
56+ removalIndex = i ;
57+ argument = arguments [ i ] . ArgumentDataValue ;
58+ }
59+
60+ if ( arguments [ i ] . ArgumentName != arg . Name ) continue ;
61+ removalIndex = i ;
62+ argument = arguments [ i ] . ArgumentDataValue ;
63+ break ;
64+ }
65+
66+ if ( removalIndex >= 0 )
67+ {
68+ arguments . RemoveAt ( removalIndex ) ;
69+ }
70+ if ( argument == null )
71+ {
72+ if ( arg . Value != null )
73+ {
74+ subEnvironment [ arg . Name ] = arg . Value . Compute ( subEnvironment ) ;
75+ }
76+ else
77+ {
78+ throw new InvocationException ( $ "No value found for argument: { arg . Name } ") ;
79+ }
80+ }
81+ else
82+ {
83+ // args.Add(CheckParameter(parameter, argument));
84+ subEnvironment [ arg . Name ] = argument ;
85+ }
86+ }
8187}
0 commit comments