singrdk/base/Windows/csic/emit/execute.cs

30 lines
886 B
C#

using System;
using System.IO;
using System.Collections;
using System.Reflection;
using System.Reflection.Emit;
public class execute {
public static object visit(object ast, TextWriter w, string[] args, MessageWriter msg) {
if (msg.Count == 0 && ast is AssemblyBuilder) {
AssemblyBuilder asm = (AssemblyBuilder)ast;
object o = null;
MethodInfo m = null;
int i;
if (args.Length > 0 && (i = args[0].LastIndexOf('.')) > 0) {
o = asm.CreateInstance(args[0].Substring(0, i));
if (o != null)
m = o.GetType().GetMethod(args[0].Substring(i+1));
} else
m = asm.EntryPoint.DeclaringType.GetMethod(asm.EntryPoint.Name);
if (m != null && o != null)
m.Invoke(o, null);
else if (m != null)
m.Invoke(null, null);
else
msg.Error("{0} not found", args.Length > 0 ? args[0] : "entry point");
}
return ast;
}
}