Example #1
0
        /// <summary>
        /// 修改一个函数的签名
        /// </summary>
        /// <param name="fname">查找函数的名称</param>
        /// <param name="nfc">待复制的新函数签名的函数单元</param>
        /// <returns>操作成功与否</returns>
        public bool editFunction(string fname, FunctionCell nfc)
        {
            // 更新
            FunctionCell ofc = this.getFunction(fname);

            if (ofc == null)
            {
                return(false);
            }
            // 复制一个备份等待需要的回滚
            FunctionCell backupOfc = new FunctionCell("_BACKUP_NODE");

            backupOfc.editSign(ofc);
            ofc.editSign(nfc);
            // 检查是否有重复
            bool rollbackFlag = false;

            for (int i = 0; i < this.callfunContainer.Count; i++)
            {
                for (int j = i + 1; j < this.callfunContainer.Count; j++)
                {
                    if (this.callfunContainer[i].callname == this.callfunContainer[j].callname)
                    {
                        rollbackFlag = true;
                        // 弹出两层循环
                        i = j = this.callfunContainer.Count + 1;
                    }
                }
            }
            // 如果重名就要回滚操作
            if (rollbackFlag == true)
            {
                ofc.editSign(backupOfc);
                return(false);
            }
            return(true);
        }