Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
        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]));
        }
Exemplo n.º 3
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);
        }