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++; } }