Exemplo n.º 1
0
        /// <summary>
        /// スクリプトファイルから実行ファイルを作成
        /// </summary>
        /// <typeparam name="TCompiler">仮想コンパイラー</typeparam>
        /// <param name="filesName">スクリプトのファイル名リスト</param>
        /// <param name="outputFileName">出力する実行ファイル名</param>
        /// <returns>結果</returns>
        public static bool FileToFile <TCompiler>(List <string> filesName, string outputFileName) where TCompiler : Compiler, new()
        {
            //  引数確認
            if (filesName.Count <= 0 || string.IsNullOrEmpty(outputFileName))
            {
                return(false);
            }

            //  コンパイル
            var objFilesName = new List <string>();

            foreach (string fileName in filesName)
            {
                Data vmData       = new Data();
                var  compiler     = new TCompiler();
                bool compileResut = compiler.Compile(fileName, vmData);
                if (compileResut)
                {
                    Log("コンパイルに成功\n" + fileName);
                    Log(compiler.GetDebugDump());
                    vmData.FileSave(fileName + ".obj");
                    vmData.FileLoad(fileName + ".obj");
                    objFilesName.Add(fileName + ".obj");
                }
                else
                {
                    LogWarning("コンパイルに失敗\n" + fileName);
                    foreach (var errorMessage in compiler.ErrorMessageList)
                    {
                        LogWarning("コンパイル結果:" + errorMessage);
                    }
                    return(false);
                }
            }


            //  リンク
            var linker = new Linking.Linker();
            var result = linker.Execute(objFilesName, outputFileName);

            Log("リンク終了\n" + outputFileName);
            foreach (var errorMessage in linker.ErrorMessageList)
            {
                LogWarning("リンク結果:" + errorMessage);
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// メモリー内のスクリプトとスクリプトファイルからリンク済みデータファイルを作成
        /// </summary>
        /// <typeparam name="TCompiler">仮想コンパイラー</typeparam>
        /// <param name="objectFilesText">スクリプトファイル</param>
        /// <param name="headerFilesList">ヘッダーファイル</param>
        /// <param name="filesName">スクリプトのファイル名リスト</param>
        /// <param name="outputFileName">リンク済みデータファイル名</param>
        /// <returns>仮想CPU</returns>
        public static bool FromMemoriesAndFilesToFile <TCompiler>(Dictionary <string, string> objectFilesText, Dictionary <string, string> headerFilesList, List <string> filesName, Data vmLinkData, string outputFileName) where TCompiler : Compiler, new()
        {
            //  コンパイル
            List <Data> vmDataList = new List <Data>();

            if (vmLinkData != null)
            {
                vmDataList.Add(vmLinkData);
            }
            List <Data> tempList;

            if (objectFilesText?.Count > 0 || headerFilesList != null)
            {
                tempList = FromMemories <TCompiler>(objectFilesText, headerFilesList);
                if (tempList == null)
                {
                    return(false);
                }
                vmDataList.AddRange(tempList);
            }
            if (filesName?.Count > 0)
            {
                tempList = FromFiles <TCompiler>(filesName);
                if (tempList == null)
                {
                    return(false);
                }
                vmDataList.AddRange(tempList);
            }
            //vmDataList.Add(CreateUnityHelperData<TCompiler>());


            //  リンク
            Linking.Linker linker     = new Linking.Linker();
            var            linkedData = linker.Execute(vmDataList);

            Log("リンク終了");
            foreach (var errorMessage in linker.ErrorMessageList)
            {
                LogWarning("リンク結果:" + errorMessage);
            }
            Log(linkedData.GetDebugDump());
            return(linkedData.FileSave(outputFileName));
        }
Exemplo n.º 3
0
        /// <summary>
        /// メモリー内のスクリプトとスクリプトファイルから仮想CPUを取得
        /// </summary>
        /// <typeparam name="TCpu">仮想CPU</typeparam>
        /// <typeparam name="TCompiler">仮想コンパイラー</typeparam>
        /// <param name="objectFilesText">スクリプトファイル</param>
        /// <param name="headerFilesList">ヘッダーファイル</param>
        /// <param name="filesName">スクリプトのファイル名リスト</param>
        /// <returns>仮想CPU</returns>
        public static TCpu FromMemoriesAndFiles <TCpu, TCompiler>(Dictionary <string, string> objectFilesText, Dictionary <string, string> headerFilesList, List <string> filesName) where TCpu : Cpu, new() where TCompiler : Compiler, new()
        {
            //  コンパイル
            List <Data> vmDataList = new List <Data>();
            List <Data> tempList   = null;

            if (objectFilesText?.Count > 0 || headerFilesList != null)
            {
                tempList = FromMemories <TCompiler>(objectFilesText, headerFilesList);
                if (tempList == null)
                {
                    return(null);
                }
                vmDataList.AddRange(tempList);
            }
            if (filesName?.Count > 0)
            {
                tempList = FromFiles <TCompiler>(filesName);
                if (tempList == null)
                {
                    return(null);
                }
                vmDataList.AddRange(tempList);
            }
            //vmDataList.Add(CreateUnityHelperData<TCompiler>());


            //  リンク
            Linking.Linker linker     = new Linking.Linker();
            var            linkedData = linker.Execute(vmDataList);

            Log("リンク終了");
            foreach (var errorMessage in linker.ErrorMessageList)
            {
                LogWarning("リンク結果:" + errorMessage);
            }
            Log(linkedData.GetDebugDump());

            //  ロード
            var machine = (TCpu)typeof(TCpu).GetConstructor(new Type[] { typeof(Data) }).Invoke(new object[] { linkedData });

            return(machine);
        }