ReadableExpressions icon indicating copy to clipboard operation
ReadableExpressions copied to clipboard

Exception while loading System.Func'3

Open SGStino opened this issue 3 years ago • 0 comments

First expression i try to debug i get this exception:

System.TypeLoadException: The generic type 'System.Func`3' was used with an invalid instantiation in assembly 'System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. 
at System.RuntimeTypeHandle.Instantiate(Type[] inst) at System.RuntimeType.MakeGenericType(Type[] instantiation) 
at System.Linq.Expressions.Compiler.DelegateHelpers.GetFuncType(Type[] types) 
at System.Linq.Expressions.Expression.GetFuncType(Type[] typeArgs) 
at AgileObjects.ReadableExpressions.Extensions.PublicExpressionExtensions.Update(LambdaExpression lambda, Expression body, IEnumerable`1 parameters) 
at AgileObjects.ReadableExpressions.ExpressionAnalysis.VisitAndConvert(LambdaExpression lambda) 
at AgileObjects.ReadableExpressions.ExpressionAnalysis.VisitAndConvert(Expression expression) 
at AgileObjects.ReadableExpressions.ExpressionAnalysis.Analyse(Expression expression) 
at AgileObjects.ReadableExpressions.ExpressionAnalysis.For(Expression expression, TranslationSettings settings) 
at AgileObjects.ReadableExpressions.Translations.ExpressionTranslation..ctor(Expression expression, TranslationSettings settings) 
at AgileObjects.ReadableExpressions.ExpressionExtensions.ToReadableString(Expression expression, Func`2 configuration) 
at AgileObjects.ReadableExpressions.Visualizers.ObjectSource.ExpressionVisualizerObjectSource.GetTranslationFor(Object target) 
at AgileObjects.ReadableExpressions.Visualizers.ObjectSource.ExpressionVisualizerObjectSource.GetData(Object target, Stream outgoingData, Action`2 serializer)

The expression itself was: (it's a generated expression to parse a json with a known structure into an array/span)

.Lambda #Lambda1<MyClass+Updater>(
    System.Text.Json.JsonElement $root,
    System.Span`1[System.Double] $values) {
    .Block(
        System.Text.Json.JsonElement $_Test,
        System.Text.Json.JsonElement $_Test_Min,
        System.Double $_Test_Min_value,
        System.Text.Json.JsonElement $_Test_Max,
        System.Double $_Test_Max_value,
        System.Text.Json.JsonElement $_Test_Tot,
        System.Double $_Test_Tot_value,
        System.Text.Json.JsonElement $_Test_Min,
        System.Double $_Test_Min_value,
        System.Text.Json.JsonElement $_Test_Max,
        System.Double $_Test_Max_value,
        System.Text.Json.JsonElement $_Test_Tot,
        System.Double $_Test_Tot_value,
        System.Text.Json.JsonElement $_Duration,
        System.Double $_Duration_value,
        System.Text.Json.JsonElement $_Duration,
        System.Double $_Duration_value,
        System.Int32 $counter) {
        .If (
            .Call $root.TryGetProperty(
                "Test",
                $_Test)
        ) {
            .Block() {
                .If (
                    .Call $_Test.TryGetProperty(
                        "Min",
                        $_Test_Min)
                ) {
                    .If (
                        .Call $_Test_Min.TryGetDouble($_Test_Min_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                0,
                                $_Test_Min_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                };
                .If (
                    .Call $_Test.TryGetProperty(
                        "Max",
                        $_Test_Max)
                ) {
                    .If (
                        .Call $_Test_Max.TryGetDouble($_Test_Max_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                1,
                                $_Test_Max_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                };
                .If (
                    .Call $_Test.TryGetProperty(
                        "Tot",
                        $_Test_Tot)
                ) {
                    .If (
                        .Call $_Test_Tot.TryGetDouble($_Test_Tot_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                2,
                                $_Test_Tot_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                };
                .If (
                    .Call $_Test.TryGetProperty(
                        "Min",
                        $_Test_Min)
                ) {
                    .If (
                        .Call $_Test_Min.TryGetDouble($_Test_Min_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                4,
                                $_Test_Min_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                };
                .If (
                    .Call $_Test.TryGetProperty(
                        "Max",
                        $_Test_Max)
                ) {
                    .If (
                        .Call $_Test_Max.TryGetDouble($_Test_Max_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                5,
                                $_Test_Max_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                };
                .If (
                    .Call $_Test.TryGetProperty(
                        "Tot",
                        $_Test_Tot)
                ) {
                    .If (
                        .Call $_Test_Tot.TryGetDouble($_Test_Tot_value)
                    ) {
                        .Block() {
                            $counter = .Increment($counter);
                            .Call MyClass.SetSpanValue(
                                $values,
                                6,
                                $_Test_Tot_value)
                        }
                    } .Else {
                        .Default(System.Void)
                    }
                } .Else {
                    .Default(System.Void)
                }
            }
        } .Else {
            .Default(System.Void)
        };
        .If (
            .Call $root.TryGetProperty(
                "Duration",
                $_Duration)
        ) {
            .If (
                .Call $_Duration.TryGetDouble($_Duration_value)
            ) {
                .Block() {
                    $counter = .Increment($counter);
                    .Call MyClass.SetSpanValue(
                        $values,
                        3,
                        $_Duration_value)
                }
            } .Else {
                .Default(System.Void)
            }
        } .Else {
            .Default(System.Void)
        };
        .If (
            .Call $root.TryGetProperty(
                "Duration",
                $_Duration)
        ) {
            .If (
                .Call $_Duration.TryGetDouble($_Duration_value)
            ) {
                .Block() {
                    $counter = .Increment($counter);
                    .Call MyClass.SetSpanValue(
                        $values,
                        7,
                        $_Duration_value)
                }
            } .Else {
                .Default(System.Void)
            }
        } .Else {
            .Default(System.Void)
        };
        $counter
    }
}

SGStino avatar Aug 26 '22 15:08 SGStino