public FuncInfo(FuncInfo parent, FuncDefExp fd) { _parent = parent; SubFuncs = new List <FuncInfo>(); _locVars = new List <LocVarInfo>(8); _locNames = new Dictionary <string, LocVarInfo>(); Upvalues = new Dictionary <string, UpvalInfo>(); Constants = new Dictionary <object, int>(); _breaks = new List <List <int> >(1); Insts = new List <uint>(8); NumParams = fd.ParList.Count; IsVararg = fd.IsVararg; }
public static ProtoType GenProto(Block chunk) { var fd = new FuncDefExp { IsVararg = true, Block = chunk, ParList = new List <string>() }; var fi = new FuncInfo(null, fd); fi.AddLocVar("_ENV"); CgFuncDefExp(fi, fd, 0); return(ToProto(fi.SubFuncs[0])); }
private static void CgFuncDefExp(FuncInfo fi, FuncDefExp node, int a) { var subFi = new FuncInfo(fi, node); fi.SubFuncs.Add(subFi); foreach (var param in node.ParList) { subFi.AddLocVar(param); } CgBlock(subFi, node.Block); subFi.ExitScope(); subFi.EmitReturn(0, 0); var bx = fi.SubFuncs.Count - 1; fi.EmitClosure(a, bx); }