66using Pine . Pine . PineVM ;
77using System ;
88using System . Collections . Generic ;
9- using System . Collections . Immutable ;
109using System . Linq ;
1110
1211namespace Pine . Core . DotNet ;
@@ -106,16 +105,11 @@ IEnumerable<IReadOnlyList<StaticExpression<DeclQualifiedName>>> EnumerateArgumen
106105
107106 public static IEnumerable < CompiledCSharpExpression > TryCompileKernelFusion (
108107 StaticExpression < DeclQualifiedName > . KernelApplication kernelApp ,
109- Func < IReadOnlyList < int > , ExpressionSyntax ? > selfFunctionInterface ,
110- Func < StaticExpression < DeclQualifiedName > , CompiledCSharpExpression ? > generalOverride ,
111- IReadOnlyDictionary < DeclQualifiedName , StaticFunctionInterface > availableFunctions ,
112- IReadOnlyDictionary < PineValue , DeclQualifiedName > availableValueDecls ,
113- DeclarationSyntaxContext declarationSyntaxContext ,
114- ImmutableDictionary < StaticExpression < DeclQualifiedName > , ( string identifier , LocalType ltype ) > alreadyDeclared )
108+ ExpressionEmitEnv emitEnv )
115109 {
116110 TypeSyntax TypeSyntaxFromType ( Type type )
117111 {
118- return CompileTypeSyntax . TypeSyntaxFromType ( type , declarationSyntaxContext ) ;
112+ return CompileTypeSyntax . TypeSyntaxFromType ( type , emitEnv . FunctionEnv . DeclarationSyntaxContext ) ;
119113 }
120114
121115 {
@@ -135,22 +129,12 @@ skipApp.Input is StaticExpression<DeclQualifiedName>.List skipArgsList &&
135129 var argumentExpr =
136130 StaticProgramCSharpClass . CompileToCSharpExpression (
137131 skipArgsList . Items [ 1 ] ,
138- selfFunctionInterface ,
139- generalOverride ,
140- availableFunctions ,
141- availableValueDecls ,
142- declarationSyntaxContext ,
143- alreadyDeclared ) ;
132+ emitEnv ) ;
144133
145134 var skipCountExpr =
146135 StaticProgramCSharpClass . CompileToCSharpExpression (
147136 skipArgsList . Items [ 0 ] ,
148- selfFunctionInterface ,
149- generalOverride ,
150- availableFunctions ,
151- availableValueDecls ,
152- declarationSyntaxContext ,
153- alreadyDeclared ) ;
137+ emitEnv ) ;
154138
155139 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.SkipAndTake(argument: ..., skipCountValue: ..., takeCount: ...)
156140 var genericCSharpExpr =
@@ -169,12 +153,12 @@ skipApp.Input is StaticExpression<DeclQualifiedName>.List skipArgsList &&
169153
170154 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
171155
172- SyntaxFactory . Argument ( skipCountExpr . AsGenericValue ( declarationSyntaxContext ) )
156+ SyntaxFactory . Argument ( skipCountExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
173157 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "skipCountValue" ) ) ) ,
174158
175159 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
176160
177- SyntaxFactory . Argument ( argumentExpr . AsGenericValue ( declarationSyntaxContext ) )
161+ SyntaxFactory . Argument ( argumentExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
178162 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "argument" ) ) ) ,
179163 } ) ) ) ;
180164
@@ -202,32 +186,17 @@ takeApp2.Input is StaticExpression<DeclQualifiedName>.List takeArgsList2 &&
202186 var argumentExpr =
203187 StaticProgramCSharpClass . CompileToCSharpExpression (
204188 takeArgsList2 . Items [ 1 ] ,
205- selfFunctionInterface ,
206- generalOverride ,
207- availableFunctions ,
208- availableValueDecls ,
209- declarationSyntaxContext ,
210- alreadyDeclared ) ;
189+ emitEnv ) ;
211190
212191 var takeCountExpr =
213192 StaticProgramCSharpClass . CompileToCSharpExpression (
214193 takeArgsList2 . Items [ 0 ] ,
215- selfFunctionInterface ,
216- generalOverride ,
217- availableFunctions ,
218- availableValueDecls ,
219- declarationSyntaxContext ,
220- alreadyDeclared ) ;
194+ emitEnv ) ;
221195
222196 var skipCountExpr =
223197 StaticProgramCSharpClass . CompileToCSharpExpression (
224198 skipArgsList2 . Items [ 0 ] ,
225- selfFunctionInterface ,
226- generalOverride ,
227- availableFunctions ,
228- availableValueDecls ,
229- declarationSyntaxContext ,
230- alreadyDeclared ) ;
199+ emitEnv ) ;
231200
232201 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.TakeAndSkip(skipCountValue: ..., takeCountValue: ..., argument: ...)
233202 var genericCSharpExpr =
@@ -241,14 +210,18 @@ takeApp2.Input is StaticExpression<DeclQualifiedName>.List takeArgsList2 &&
241210 SyntaxFactory . SeparatedList < ArgumentSyntax > (
242211 new SyntaxNodeOrToken [ ]
243212 {
244- SyntaxFactory . Argument ( skipCountExpr . AsGenericValue ( declarationSyntaxContext ) )
245- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "skipCountValue" ) ) ) ,
246- SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
247- SyntaxFactory . Argument ( takeCountExpr . AsGenericValue ( declarationSyntaxContext ) )
248- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "takeCountValue" ) ) ) ,
249- SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
250- SyntaxFactory . Argument ( argumentExpr . AsGenericValue ( declarationSyntaxContext ) )
251- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "argument" ) ) ) ,
213+ SyntaxFactory . Argument ( skipCountExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
214+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "skipCountValue" ) ) ) ,
215+
216+ SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
217+
218+ SyntaxFactory . Argument ( takeCountExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
219+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "takeCountValue" ) ) ) ,
220+
221+ SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
222+
223+ SyntaxFactory . Argument ( argumentExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
224+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "argument" ) ) ) ,
252225 } ) ) ) ;
253226
254227 yield return CompiledCSharpExpression . Generic ( genericCSharpExpr ) ;
@@ -274,12 +247,7 @@ innerReverseApp.Function is nameof(KernelFunction.reverse))
274247 var seqExpr =
275248 StaticProgramCSharpClass . CompileToCSharpExpression (
276249 innerReverseApp . Input ,
277- selfFunctionInterface ,
278- generalOverride ,
279- availableFunctions ,
280- availableValueDecls ,
281- declarationSyntaxContext ,
282- alreadyDeclared ) ;
250+ emitEnv ) ;
283251
284252 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.TakeLast(takeCount: n, value: seq)
285253 var genericCSharpExpr =
@@ -298,7 +266,7 @@ innerReverseApp.Function is nameof(KernelFunction.reverse))
298266
299267 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
300268
301- SyntaxFactory . Argument ( seqExpr . AsGenericValue ( declarationSyntaxContext ) )
269+ SyntaxFactory . Argument ( seqExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
302270 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "value" ) ) )
303271 } ) ) ) ;
304272
@@ -328,12 +296,7 @@ innerReverseApp.Function is nameof(KernelFunction.reverse))
328296 var seqExpr =
329297 StaticProgramCSharpClass . CompileToCSharpExpression (
330298 innerReverseApp . Input ,
331- selfFunctionInterface ,
332- generalOverride ,
333- availableFunctions ,
334- availableValueDecls ,
335- declarationSyntaxContext ,
336- alreadyDeclared ) ;
299+ emitEnv ) ;
337300
338301 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.SkipLast(skipCount: n, value: seq)
339302 var genericCSharpExpr =
@@ -352,7 +315,7 @@ innerReverseApp.Function is nameof(KernelFunction.reverse))
352315
353316 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
354317
355- SyntaxFactory . Argument ( seqExpr . AsGenericValue ( declarationSyntaxContext ) )
318+ SyntaxFactory . Argument ( seqExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
356319 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "value" ) ) )
357320 } ) ) ) ;
358321
@@ -378,22 +341,12 @@ concatArgsList.Items[1] is StaticExpression<DeclQualifiedName>.List itemToAppend
378341 var prefixExpr =
379342 StaticProgramCSharpClass . CompileToCSharpExpression (
380343 concatArgsList . Items [ 0 ] ,
381- selfFunctionInterface ,
382- generalOverride ,
383- availableFunctions ,
384- availableValueDecls ,
385- declarationSyntaxContext ,
386- alreadyDeclared ) ;
344+ emitEnv ) ;
387345
388346 var itemToAppendExpr =
389347 StaticProgramCSharpClass . CompileToCSharpExpression (
390348 itemToAppendList . Items [ 0 ] ,
391- selfFunctionInterface ,
392- generalOverride ,
393- availableFunctions ,
394- availableValueDecls ,
395- declarationSyntaxContext ,
396- alreadyDeclared ) ;
349+ emitEnv ) ;
397350
398351 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.ListAppendItem(prefix: ..., itemToAppend: ...)
399352 var genericCSharpExpr =
@@ -407,12 +360,12 @@ concatArgsList.Items[1] is StaticExpression<DeclQualifiedName>.List itemToAppend
407360 SyntaxFactory . SeparatedList < ArgumentSyntax > (
408361 new SyntaxNodeOrToken [ ]
409362 {
410- SyntaxFactory . Argument ( prefixExpr . AsGenericValue ( declarationSyntaxContext ) )
363+ SyntaxFactory . Argument ( prefixExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
411364 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "prefix" ) ) ) ,
412365
413366 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
414367
415- SyntaxFactory . Argument ( itemToAppendExpr . AsGenericValue ( declarationSyntaxContext ) )
368+ SyntaxFactory . Argument ( itemToAppendExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
416369 . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "itemToAppend" ) ) ) ,
417370 } ) ) ) ;
418371
@@ -434,22 +387,12 @@ ExpressionSyntax ListPrependItemSyntax(
434387 var itemToPrependExpr =
435388 StaticProgramCSharpClass . CompileToCSharpExpression (
436389 itemToPrepend ,
437- selfFunctionInterface ,
438- generalOverride ,
439- availableFunctions ,
440- availableValueDecls ,
441- declarationSyntaxContext ,
442- alreadyDeclared ) ;
390+ emitEnv ) ;
443391
444392 var suffixExpr =
445393 StaticProgramCSharpClass . CompileToCSharpExpression (
446394 suffix ,
447- selfFunctionInterface ,
448- generalOverride ,
449- availableFunctions ,
450- availableValueDecls ,
451- declarationSyntaxContext ,
452- alreadyDeclared ) ;
395+ emitEnv ) ;
453396
454397 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.ListPrependItem(itemToPrepend: ..., suffix: ...)
455398 return
@@ -463,13 +406,13 @@ ExpressionSyntax ListPrependItemSyntax(
463406 SyntaxFactory . SeparatedList < ArgumentSyntax > (
464407 new SyntaxNodeOrToken [ ]
465408 {
466- SyntaxFactory . Argument ( itemToPrependExpr . AsGenericValue ( declarationSyntaxContext ) )
467- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "itemToPrepend" ) ) ) ,
409+ SyntaxFactory . Argument ( itemToPrependExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
410+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "itemToPrepend" ) ) ) ,
468411
469412 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
470413
471- SyntaxFactory . Argument ( suffixExpr . AsGenericValue ( declarationSyntaxContext ) )
472- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "suffix" ) ) ) ,
414+ SyntaxFactory . Argument ( suffixExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
415+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "suffix" ) ) ) ,
473416 } ) ) ) ;
474417 }
475418
@@ -485,12 +428,7 @@ ExpressionSyntax BlobPrependByteSyntax(
485428 var suffixExpr =
486429 StaticProgramCSharpClass . CompileToCSharpExpression (
487430 suffix ,
488- selfFunctionInterface ,
489- generalOverride ,
490- availableFunctions ,
491- availableValueDecls ,
492- declarationSyntaxContext ,
493- alreadyDeclared ) ;
431+ emitEnv ) ;
494432
495433 // Build fully-qualified invocation: Pine.Core.Internal.KernelFunctionFused.BlobPrependByte(byteToPrepend: ..., suffix: ...)
496434 return
@@ -505,12 +443,12 @@ ExpressionSyntax BlobPrependByteSyntax(
505443 new SyntaxNodeOrToken [ ]
506444 {
507445 SyntaxFactory . Argument ( PineCSharpSyntaxFactory . ExpressionSyntaxForIntegerLiteral ( byteToPrepend ) )
508- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "byteToPrepend" ) ) ) ,
446+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "byteToPrepend" ) ) ) ,
509447
510448 SyntaxFactory . Token ( SyntaxKind . CommaToken ) ,
511449
512- SyntaxFactory . Argument ( suffixExpr . AsGenericValue ( declarationSyntaxContext ) )
513- . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "suffix" ) ) ) ,
450+ SyntaxFactory . Argument ( suffixExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) )
451+ . WithNameColon ( SyntaxFactory . NameColon ( SyntaxFactory . IdentifierName ( "suffix" ) ) ) ,
514452 } ) ) ) ;
515453 }
516454
@@ -569,21 +507,16 @@ prefixLiteral.Value is PineValue.BlobValue prefixBlob &&
569507 var argumentExpr =
570508 StaticProgramCSharpClass . CompileToCSharpExpression (
571509 concatList . Items [ 1 ] ,
572- selfFunctionInterface ,
573- generalOverride ,
574- availableFunctions ,
575- availableValueDecls ,
576- declarationSyntaxContext ,
577- alreadyDeclared ) ;
510+ emitEnv ) ;
578511
579512 if ( prefixBlob . Bytes . Span [ 0 ] is 2 )
580513 {
581514 return
582515 CompiledCSharpExpression . Generic (
583516 CanonicalIntegerFromUnsignedSyntax (
584517 signIsPositive : false ,
585- argumentExpr . AsGenericValue ( declarationSyntaxContext ) ,
586- declarationSyntaxContext ) ) ;
518+ argumentExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) ,
519+ emitEnv . FunctionEnv . DeclarationSyntaxContext ) ) ;
587520 }
588521
589522 if ( prefixBlob . Bytes . Span [ 0 ] is 4 )
@@ -592,8 +525,8 @@ prefixLiteral.Value is PineValue.BlobValue prefixBlob &&
592525 CompiledCSharpExpression . Generic (
593526 CanonicalIntegerFromUnsignedSyntax (
594527 signIsPositive : true ,
595- argumentExpr . AsGenericValue ( declarationSyntaxContext ) ,
596- declarationSyntaxContext ) ) ;
528+ argumentExpr . AsGenericValue ( emitEnv . FunctionEnv . DeclarationSyntaxContext ) ,
529+ emitEnv . FunctionEnv . DeclarationSyntaxContext ) ) ;
597530 }
598531 }
599532
0 commit comments