Ejemplo n.º 1
0
        private void CGTableConstructorExp(FuncInfo funcInfo, TableConstructorExpNode node, int a)
        {
            int nArray = 0;

            foreach (var key in node.KeyExpList)
            {
                var nilNode = key as ConstExpNode;
                if (nilNode != null && nilNode.ExpType == ConstExpNode.ConstExpType.NilExp)
                {
                    nArray++;
                }
            }
            int nExps = node.KeyExpList.Count;

            funcInfo.EmitNewTable(a, nArray, nExps - nArray);

            int i = 0;

            foreach (var key in node.KeyExpList)
            {
                var nilNode = key as ConstExpNode;
                var valNode = node.ValExpList[i];
                if (nilNode.ExpType == ConstExpNode.ConstExpType.NilExp)
                {
                }
                int b = funcInfo.AllocReg();
                CGExp(funcInfo, key, b, 1);
                int c = funcInfo.AllocReg();
                CGExp(funcInfo, valNode, c, 1);
                funcInfo.FreeRegs(2);
                funcInfo.EmitSetTable(a, b, c);
                i++;
            }
        }