Ejemplo n.º 1
0
        private void CGNameExp(FuncInfo funcInfo, ConstExpNode node, int a)
        {
            LocalVarInfo varInfo = null;
            int          r       = 0;

            if (funcInfo.VarDic1.TryGetValue(node.name, out varInfo))
            {
                funcInfo.EmitMove(a, varInfo.RegIndex);
            }
            else if (funcInfo.UpValOfIndex(node.name) != -1)
            {
                r = funcInfo.UpValOfIndex(node.name);
                funcInfo.EmitGetUpval(a, r);
            }
            //else if (funcInfo.ConstDic.TryGetValue(node.name, out r))
            //   {
            //       funcInfo.EmitLoadK(a, node.name);
            //   }
            else
            {
                var exp = new TableAccessExpNode();
                exp.PreExp = new ConstExpNode(new Token(TokenType.Identifier, "_ENV", -1));
                exp.Exp    = new ConstExpNode(new Token(TokenType.String, node.name, -1));
                CGTableAccessExp(funcInfo, exp, a);
            }
        }