Ejemplo n.º 1
0
        protected virtual MethodBuilder CompileForSave(TypeGen typeGen, Dictionary <SymbolId, FieldBuilder> symbolDict)
        {
            var diskRewriter = new ToDiskRewriter(typeGen);
            var lambda       = diskRewriter.RewriteLambda(_code);

            return(lambda.CompileToMethod(typeGen.TypeBuilder, CompilerHelpers.PublicStatic | MethodAttributes.SpecialName, false));
        }
Ejemplo n.º 2
0
        protected override MethodBuilder CompileForSave(TypeGen typeGen, Dictionary <SymbolId, FieldBuilder> symbolDict)
        {
            // first, serialize constants and dynamic sites:
            ToDiskRewriter   diskRewriter = new ToDiskRewriter(typeGen);
            LambdaExpression lambda       = diskRewriter.RewriteLambda(Code);

            // rewrite global variables:
            var globalRewriter = new GlobalArrayRewriter(symbolDict, typeGen);

            lambda = globalRewriter.RewriteLambda(lambda);

            MethodBuilder builder = lambda.CompileToMethod(typeGen.TypeBuilder, CompilerHelpers.PublicStatic | MethodAttributes.SpecialName, false);

            builder.SetCustomAttribute(new CustomAttributeBuilder(
                                           typeof(CachedOptimizedCodeAttribute).GetConstructor(new Type[] { typeof(string[]) }),
                                           new object[] { ArrayUtils.ToArray(globalRewriter.Names) }
                                           ));

            return(builder);
        }
Ejemplo n.º 3
0
        protected override KeyValuePair<MethodBuilder, Type> CompileForSave(TypeGen typeGen, Dictionary<SymbolId, FieldBuilder> symbolDict) {
            // first, serialize constants and dynamic sites:
            ToDiskRewriter diskRewriter = new ToDiskRewriter(typeGen);
            LambdaExpression lambda = diskRewriter.RewriteLambda(Code);
            
            // rewrite global variables:
            var globalRewriter = new GlobalArrayRewriter(symbolDict, typeGen);
            lambda = globalRewriter.RewriteLambda(lambda);
            
            MethodBuilder builder = typeGen.TypeBuilder.DefineMethod(lambda.Name ?? "lambda_method", CompilerHelpers.PublicStatic | MethodAttributes.SpecialName);
            lambda.CompileToMethod(builder, false);

            builder.SetCustomAttribute(new CustomAttributeBuilder(
                typeof(CachedOptimizedCodeAttribute).GetConstructor(new Type[] { typeof(string[]) }),
                new object[] { ArrayUtils.ToArray(globalRewriter.Names) }
            ));

            return new KeyValuePair<MethodBuilder, Type>(builder, typeof(DlrMainCallTarget));
        }
Ejemplo n.º 4
0
        protected LambdaExpression RewriteForSave(TypeGen typeGen, LambdaExpression code)
        {
            var diskRewriter = new ToDiskRewriter(typeGen);

            return(diskRewriter.RewriteLambda(code));
        }
Ejemplo n.º 5
0
 protected LambdaExpression RewriteForSave(TypeGen typeGen, LambdaExpression code) {
     var diskRewriter = new ToDiskRewriter(typeGen);
     return diskRewriter.RewriteLambda(code);
 }
Ejemplo n.º 6
0
        protected virtual MethodBuilder CompileForSave(TypeGen typeGen, Dictionary<SymbolId, FieldBuilder> symbolDict) {
            var diskRewriter = new ToDiskRewriter(typeGen);
            var lambda = diskRewriter.RewriteLambda(_code);

            MethodBuilder mb = typeGen.TypeBuilder.DefineMethod(lambda.Name ?? "lambda_method", CompilerHelpers.PublicStatic | MethodAttributes.SpecialName);
            lambda.CompileToMethod(mb, false);
            return mb;
        }