public void FuncBegin(IAsm a) { Var func = a.getVar(); Type funcsig = genDataTypeSig(a.getVar()); /* gen return type info */ VarList paramlist = func.getParams(); /* get any params */ Type[] paramTypes = null; // in case no params if (paramlist.Length() > 0) { int max = paramlist.Length(); paramTypes = new Type[max]; for (int i = 0; i < max; i++) { Var e = paramlist.FindByIndex(i); paramTypes[i] = genDataTypeSig(e); } } emethod = eclass.DefineMethod(func.getName(), MethodAttributes.Static | MethodAttributes.Public, funcsig, paramTypes); func.setMethodBuilder(emethod); // save the method ref /* * set the argument symbol info */ for (int i = 0; i < paramlist.Length(); i++) { emethod.DefineParameter(i + 1, 0, paramlist.FindByIndex(i).getName()); } il = emethod.GetILGenerator(); // create new il generator if (func.getName().Equals("main")) /* special entry point for main */ { appbuild.SetEntryPoint(emethod); } // emodule.SetUserEntryPoint(emethod); /* * must also re-init the label hashtable for each function */ labelhash = new Hashtable(); localsdone = false; }