singrdk/base/Windows/csic/demo/demo.cs

50 lines
1.5 KiB
C#
Raw Permalink Normal View History

2008-11-17 18:29:00 -05:00
using System;
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Reflection;
using System.Reflection.Emit;
using System.Windows.Forms;
using System.Threading;
public class demo {
[STAThread]
public static void Main(string[] args) {
Form form = new Form1();
c = new Compiler(reader, Console.Error);
c.LoadVisitor("bind");
c.LoadVisitor("typecheck");
c.LoadVisitor("rewrite");
c.LoadVisitor("emit");
c.AddVisitor(typeof (demo));
Application.Run(form);
}
static AssemblyBuilder asm = null;
static ReflectionReader reader = new ReflectionReader();
static Compiler c = null;
public static AssemblyBuilder Compile(string code) {
c.Msg.Count = 0;
asm = null;
int count = c.Compile(new StringReader(code), Console.Out, new string[] {});
if (count == 0 && asm != null) {
reader.Load(asm);
return asm;
}
return null;
}
public static void Run(AssemblyBuilder asm) {
MethodInfo m = asm.EntryPoint.DeclaringType.GetMethod(asm.EntryPoint.Name);
try {
if (m != null)
m.Invoke(null, null);
} catch (Exception e) {
Console.Error.WriteLine("{0}", e.ToString());
}
}
public static compilation visit(compilation ast, TextWriter w, string[] args, MessageWriter msg) {
if (msg.Count == 0)
asm = (AssemblyBuilder)ast;
return ast;
}
}