Nope – the DLR doesn’t have any support for building .NET types – dynamic or
otherwise. If you’d like to just build an object which behaves dynamically I’d
suggest looking at DynamicObject. You can just subclass it and override
various Try* methods and you’ll have a dynamic object.
If you really do need to do ILGen into a type, and as long as you’re building
only static methods, you can use expression trees via Lambda<T>.CompileToMethod
(unfortunately currently instance methods are not supported). Here’s an
example of that:
using System;
using System.Linq.Expressions;
using System.Reflection;
class Foo {
public static void Main(string[] args) {
var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(new
AssemblyName("foo"), System.Reflection.Emit.AssemblyBuilderAccess.Save);
var module = asm.DefineDynamicModule("foo.dll");
var type = module.DefineType("TestType");
var param1 = Expression.Parameter(typeof(Foox), "arg1");
var param2 = Expression.Parameter(typeof(Foox), "arg2");
var method = type.DefineMethod("TestMethod", MethodAttributes.Public |
MethodAttributes.Static);
Expression.Lambda<Func<Foox, Foox, bool>>(
Expression.Equal(param1, param2),
new[] { param1, param2 }
).CompileToMethod(method);
type.CreateType();
asm.Save("foo.dll");
}
}
enum Foox {
Bar,
Baz
}
From: [email protected]
[mailto:[email protected]] On Behalf Of Justin Chase
Sent: Monday, April 12, 2010 1:21 PM
To: [email protected]
Subject: [IronPython] Building via AST
Suppose I would like to build an AST programmatically and compile that into an
assembly dynamically (meaning an assembly flagged with RunAndCollect) from C#.
How would I do that with IronPython's help? I do not what to author Python code
and compile that I would like to just deal directly with the AST.
Currently I have working code where I'm using System.Linq.Expression namespace
to build statements and expressions into delegates but what I would like is to
leverage the DLR to build dynamic types as well (without having to use
ILGenerator preferably). Is this possible today?
--
Justin Chase
http://www.justnbusiness.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com