亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? compiler.cpp

?? 一個完全使用MFC框架開發的C++編譯器的代碼。功能十分強大可以編譯大型程序。
?? CPP
字號:
// ----- compiler.cpp

#include "stdafx.h"
#include "Quincy.h"
#include "compiler.h"
#include "ErrorLogDialog.h"

Compiler* Compiler::pCompiler;

Compiler::Compiler()
{
	m_bFoundDef = false;
	m_bCpp = false;
	m_bErrorCreated = false;
	m_bLinkCpp = false;
	m_bStopping = false;
	m_CompileAction = none;
	m_pdlgErrors = new CErrorLogDialog;
	m_nErrorLogWidth = 0;
	m_pConsoleApp = 0;
	pCompiler = this;
}

Compiler::~Compiler()
{
	delete m_pdlgErrors;
	delete m_pConsoleApp;
	pCompiler = 0;
}

void Compiler::ClearArrays()
{
	m_SourceFiles.RemoveAll();
	m_ObjectFiles.RemoveAll();
	m_LibraryFiles.RemoveAll();
	m_ResourceFiles.RemoveAll();
}

void Compiler::AddSourceFile(const CString& rstrSrc)
{
	m_SourceFiles.Add(rstrSrc);
}

void Compiler::AddObjectFile(const CString& rstrObj)
{
	m_ObjectFiles.Add(rstrObj);
}

void Compiler::AddResourceFile(const CString& rstrRc)
{
	m_ResourceFiles.Add(rstrRc);
}

void Compiler::BuildTarget(const CString& strTargetName, CompileAction action)
{
	m_bStopping = false;
	if (theApp.IsOnCDROM(strTargetName))	{
		std::string msg;
		msg += const_cast<CString&>(strTargetName).GetBuffer(0);
		msg += " is directed to a read-only medium (e.g. CD-ROM).",
		AfxMessageBox(msg.c_str(), MB_ICONSTOP);
		return;
	}
	m_CompileAction = action;
	m_strTargetName = strTargetName;

	m_strObjFiles.Empty();
	m_strLibFiles.Empty();
	ExitCode = 0;
	CompileAllSources();
	if (GatherObjects())	{
		if (theApp.IsLibraryTarget())
			BuildLibraryTarget();
		else if (theApp.IsDLLTarget())
			BuildDLLTarget();
		else
			BuildExeTarget();
	}
	if (cmds.size() > 0)
		RunCompilerProgram(cmds.front().command);
}

void Compiler::CompileAllSources()
{
	m_bFoundDef = false;

	int nSize = m_SourceFiles.GetSize();
	// --- compile the programs listed in the source code list
	for (int n = 0; n < nSize; n++)	{
		CString strFile = m_SourceFiles[n];
		if (strFile.IsEmpty())
			break;
		CompileOneSource(strFile);
	}
}

void Compiler::CompileOneSource(const CString& strFile)
{
	CString strCmd;
	if (strFile.Right(4).CompareNoCase(".def") == 0)	{
		if (theApp.IsDLLTarget())	{
			BuildDefCommand(strCmd, strFile);
			m_bFoundDef = true;
		}
		else	{
			AfxMessageBox("Non-DLL project has .def file", MB_OK | MB_ICONQUESTION);
			ExitCode = 1;
			return;
		}
	}
	else	{
		bool bRc  = strFile.Right(3).CompareNoCase(".rc")  == 0;
		bool bRes = strFile.Right(4).CompareNoCase(".res") == 0;
		m_bCpp = strFile.Right(4).CompareNoCase(".cpp") == 0;
		m_bLinkCpp |= m_bCpp;

		// ---- make a copy of the filename without the path
		m_strFilename = theApp.GetFileName(strFile);

		// ---- make a copy of the source file path and name without the file extension
		CString strSrcPath = strFile.Left(strFile.GetLength()-((m_bCpp | bRes) ? 4 : (bRc ? 3 : 2)));

		// ---- make a copy of the object file path without the filename
		//      (object files go where the exe file goes.)
		int ndx = m_strTargetName.ReverseFind('\\');
		if (ndx != -1)
			m_strOPath = m_strTargetName.Left(ndx);
		else	{
			char path[MAX_PATH];
			_getcwd(path, MAX_PATH);
			m_strOPath = path;
		}

		// ---- make a copy of the object file name
		m_strOFile = MakeObjectFileName(strSrcPath);

		// if the object file spec has no path info, add it
		if (m_strOFile.Find("\\") == -1)
			m_strOFile = m_strOPath + "\\" + m_strOFile;

		if (bRc)
			// ------ compiling a resource script (.rc) into object file
			BuildResourceScriptCommand(strCmd);
		else if (bRes)
			// --- converting resource .res file into object file
			BuildResFileCommand(strCmd);
		else	{
			remove(m_strOFile);
			BuildCompilerCommand(strCmd, strFile);
		}
	}
	ScheduleProgram(strCmd);
}

int Compiler::GatherObjects()
{
	int nSize = m_ObjectFiles.GetSize();
	int n = 0;
	if (nSize != 0)	{
		CString strFile;
		while (n < nSize)	{
			strFile = m_ObjectFiles[n++];
			if (strFile.IsEmpty())
				break;
			if (strFile.Find("\\") == -1)
				strFile = m_strOPath + "\\" + strFile;
			m_strObjFiles += theApp.Enquote(strFile) + " ";
		}
	}
	return n;
}

void Compiler::BuildLibraryTarget()
{
	CString strCmd;
	BuildLibCommand(strCmd);
	ScheduleProgram(strCmd);
}

void Compiler::BuildDLLTarget()
{
	GatherLibraries();
	CString strCmd;
	BuildDLLCommand(strCmd);
	if (!strCmd.IsEmpty())
		ScheduleProgram(strCmd);
}

void Compiler::BuildExeTarget()
{
	GatherLibraries();
	CString strCmd;
	BuildLinkerCommand(strCmd);
	ScheduleProgram(strCmd, true);
}

void Compiler::GatherLibraries()
{
	int nSize = m_LibraryFiles.GetSize();
	CString strFile;
	for (int n = 0; n < nSize; n++)	{
		strFile = m_LibraryFiles[n];
		if (strFile.IsEmpty())
			break;
		m_strLibFiles += theApp.Enquote(strFile) + " ";
	}
}

// --- schedules the execution of a compiler program (gcc, typically)
//     the programs are run in the order they are scheduled from the OnIdle function
//     if (depends) the scheduled program will not run if any prior program did not
//     complete successfully, and it will remove all subsequent programs from the
//     schedule.
void Compiler::ScheduleProgram(CString& strCmd, bool depends)
{
	ConsoleCmd cmd;
	cmd.command = strCmd;
	cmd.dependent = depends;
	cmds.push(cmd);
}


void Compiler::RunCompilerProgram(const CString& strCmd)
{
	AddLogEntry(strCmd);
	int ndx = strCmd.Find(' ');
	ASSERT(ndx != -1);
	CString strExe = strCmd.Left(ndx);
	CString strArgs = strCmd.Right(strCmd.GetLength() - ndx);
	delete m_pConsoleApp;
	m_pConsoleApp = new ConsoleApp(strExe, &Notify, &Collect);
	m_pConsoleApp->Run(strArgs);
}

void Compiler::ClearErrorLog()
{
	if (m_bErrorCreated == true)	{
		ASSERT(m_pdlgErrors != 0);
		CListBox* pList = static_cast<CListBox*>(m_pdlgErrors->GetDlgItem(IDC_ERRORLIST));
		ASSERT(pList != 0);
		pList->ResetContent();
		m_nErrorLogWidth = 0;
	}
	MessageLog.clear();
}

void Compiler::CloseErrorLog()
{
	ClearErrorLog();
	if (m_bErrorCreated)	{
		ASSERT(m_pdlgErrors != 0);
		m_pdlgErrors->ShowWindow(SW_HIDE);
	}
}

void Compiler::AddLogEntry(const CString& str)
{
	ASSERT(m_pdlgErrors != 0);
	if (m_bErrorCreated != true)	{
		m_pdlgErrors->Create(IDD_ERRORLOG);
		m_bErrorCreated = true;
	}
	m_pdlgErrors->ShowWindow(SW_SHOW);
	CListBox* pList = static_cast<CListBox*>(m_pdlgErrors->GetDlgItem(IDC_ERRORLIST));
	ASSERT(pList != 0);
	CDC* pDC = pList->GetDC();
	pList->AddString(str);
	CSize size = pDC->GetTextExtent(str);
	m_nErrorLogWidth = max(m_nErrorLogWidth, size.cx);
	pList->SendMessage(LB_SETHORIZONTALEXTENT, m_nErrorLogWidth, 0);
	MessageLog.push_back(str);
}

// --- called from the console application thread when compile program completes
void Compiler::Notify()
{
	ASSERT(pCompiler != 0);
	pCompiler->NotifyTermination();
}

void Compiler::NotifyTermination()
{
	ASSERT(m_pConsoleApp != 0);
	if (!m_bStopping && m_pConsoleApp->SuccessfulRun())	{
		ExitCode |= m_pConsoleApp->Exitcode();
		cmds.pop();	// pop off the command that just completed
		if (cmds.size() > 0 && (ExitCode == 0 || cmds.front().dependent == false))	{
			RunCompilerProgram(cmds.front().command);
			return;
		}
		if (cmds.size() == 0 && ExitCode == 0)	{
			AddLogEntry("Successful build");
			if (m_CompileAction != none)	{
				if (m_CompileAction == step)
					theApp.DebugProgram(m_strTargetName, true);
				else if (m_CompileAction == debug)
					theApp.DebugProgram(m_strTargetName, false);
				else
					theApp.StartProgram(m_strTargetName);
				m_CompileAction = none;
			}
		}
		else
			AddLogEntry("Unsuccessful build");
	}
	m_bStopping = false;
	while (cmds.size() > 0)
		cmds.pop();
	// --- if this is a compile and link of only one IDE translation unit
	//     and no user library files are in the project (no project, actually),
	//     no need to keep the object file around.
	if (!theApp.IsProjectFileLoaded())
		remove(m_strOFile);
}

// --- called from the console application thread while compiling is going on
void Compiler::Collect(DWORD bufct)
{
	ASSERT(pCompiler != 0);
	pCompiler->CollectErrorMessages(bufct);
}

void Compiler::CollectErrorMessages(DWORD bufct)
{
	char *buf = new char[bufct+1];
	ASSERT(m_pConsoleApp != 0);
	if (m_pConsoleApp->ReadConsole(buf, bufct) != 0)
		AddLogEntry(buf);
	delete buf;
}

void Compiler::Stop()
{
	AddLogEntry("Build stopped by user");
	m_bStopping = true;
	if (m_pConsoleApp != 0)
		m_pConsoleApp->Stop();
}

bool Compiler::CompileRunning() const
{
	return m_pConsoleApp != 0 && m_pConsoleApp->IsRunning();
}


////////////////////////////////////////////////////////////////////////
//
// Specific compiler specializations of the abstract base Compiler class
//
////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////
//
//                GCCCompiler member functions
//
///////////////////////////////////////////////////////////////

void GCCCompiler::CompileAllSources()
{
	m_strPrevLine.Empty();
	Compiler::CompileAllSources();
}

void GCCCompiler::CompileOneSource(const CString& strFile)
{
	const_cast<CString&>(strFile).MakeLower();	// gcc 2.95.1  bug
	Compiler::CompileOneSource(strFile);
}

void GCCCompiler::AddLibraryFile(const CString& rstrLib)
{
	if (rstrLib.Left(3).CompareNoCase("lib") == 0)	{
		CString strLib("-l");
		strLib += rstrLib.Mid(3, rstrLib.GetLength()-5);
		m_LibraryFiles.Add(strLib);
	}
	else
		m_LibraryFiles.Add(rstrLib);
}

void GCCCompiler::BuildResourceScriptCommand(CString& strCmd)
{
	strCmd = theApp.Enquote(theApp.ToolsPath() + "windres.exe");
	for (int i = 0; i < theApp.GetDefinesArray().GetSize(); i++)	{
		strCmd += " -D";
		strCmd += theApp.GetDefinesArray()[i];
	}
	strCmd += " ";
	strCmd += theApp.Enquote(m_strFilename);
	strCmd += " ";
	strCmd += theApp.Enquote(m_strOFile);
}

void GCCCompiler::BuildResFileCommand(CString& strCmd)
{
	strCmd = theApp.Enquote(theApp.ToolsPath() + "windres.exe");
	strCmd += " -i ";
	strCmd += theApp.Enquote(m_strFilename);
	strCmd += " -o ";
	strCmd += theApp.Enquote(m_strOFile);
}

void GCCCompiler::BuildCompilerCommand(CString& strCmd, const CString& strFile)
{
	strCmd = theApp.Enquote(theApp.ToolsPath() + "gcc.exe");
	if (theApp.IsAddingDebugInfo())
		strCmd += " -g";
	if (!theApp.IsAddingDebugInfo() && theApp.OptimizeLevel())	{
			strCmd += " -O";
			char oc = '0' + theApp.OptimizeLevel();
			strCmd += oc;
	}
	if (m_bCpp)	{
		if (!theApp.IncludeRTTI())
			strCmd += " -fno-rtti";
		if (!theApp.IncludeExceptions())
			strCmd += " -fno-exceptions";
	}

	if (theApp.StrictANSI())
		strCmd += " -pedantic-errors";

	int i;
	for (i = 0; i < theApp.GetIncludeArray().GetSize(); i++)	{
		strCmd += " -I";
		strCmd += theApp.Enquote(theApp.GetIncludeArray()[i]);
	}

	if (theApp.IsGUITarget())	{
		strCmd += " -I";
		strCmd += theApp.Enquote(theApp.QuincyInstallPath() + "\\include");
		strCmd += " -mwindows";
	}

	if (theApp.IsDLLTarget())
			strCmd += " -mdll";

	for (i = 0; i < theApp.GetDefinesArray().GetSize(); i++)	{
		strCmd += " -D";
		strCmd += theApp.GetDefinesArray()[i];
	}

	strCmd += " -o ";
	strCmd += theApp.Enquote(m_strOFile);
	strCmd += " -c ";

	strCmd += theApp.CmdLineOptions() + " ";

	strCmd += theApp.Enquote(strFile);
}

void GCCCompiler::BuildLibCommand(CString& strCmd)
{
	strCmd = theApp.Enquote(theApp.ToolsPath() + "ar");
	strCmd += " rc ";
	strCmd += theApp.Enquote(m_strTargetName);
	strCmd += " ";
	strCmd += m_strObjFiles;
}

void GCCCompiler::BuildDLLCommand(CString& strCmd)
{
	if (!m_bFoundDef)	{
		AfxMessageBox("DLL project has no .def file", MB_OK | MB_ICONSTOP);
		return;
	}
	// ------ build dll
	GatherLibraries();

	strCmd = theApp.Enquote(theApp.ToolsPath() + "dllwrap.exe") + " -o ";
	strCmd += theApp.Enquote(theApp.GetFileName(m_strTargetName));		// name of the dll
	strCmd += " --def ";
	strCmd += theApp.Enquote(m_strDefname);		// name of the def

	GetLibraryPaths(strCmd);

	strCmd += m_strObjFiles;
	strCmd += " ";
	strCmd += m_strLibFiles;

	GetGUILibraries(strCmd);

}

void GCCCompiler::BuildDefCommand(CString& strCmd, const CString& strFile)
{
	int ndx = m_strTargetName.ReverseFind('\\');
	// --- build the path to the import library
	CString strImportPath = m_strTargetName.Left(ndx+1);
	CString strImportName = m_strTargetName.Right(m_strTargetName.GetLength() - (ndx+1));
	CString strImportLib = strImportPath + "lib" + strImportName.Left(strImportName.GetLength() - 3) + "a";

	m_strDefname = strImportPath + strFile;

	strCmd = theApp.Enquote(theApp.ToolsPath() + "dlltool.exe");
	strCmd += " --dllname ";
	strCmd += theApp.Enquote(theApp.GetFileName(m_strTargetName));		// name of the dll
	strCmd += " --def ";
	strCmd += theApp.Enquote(m_strDefname);		// name of the def
	strCmd += " --output-lib ";
	strCmd += theApp.Enquote(strImportLib);		// name of the import lib
}

void GCCCompiler::GetLibraryPaths(CString& strCmd)
{
	int i;
	for (i = 0; i < theApp.GetLibraryArray().GetSize(); i++)	{
		strCmd += " -L";
		strCmd += theApp.Enquote(theApp.GetLibraryArray()[i]);
	}
	strCmd += " ";
}

void GCCCompiler::GetGUILibraries(CString& strCmd)
{
	strCmd += " -luser32 -lgdi32 -lcomdlg32 -lwinmm -lcomctl32 -lctl3d32 ";
}

void GCCCompiler::BuildLinkerCommand(CString& strCmd)
{
	strCmd = theApp.Enquote(theApp.ToolsPath() + "gcc.exe");

	if (theApp.IsGUITarget())
		strCmd += " -mwindows";
	strCmd += " -o ";
	strCmd += theApp.Enquote(m_strTargetName) + " ";

	if (!theApp.IsAddingDebugInfo())
		strCmd += "-s ";

	GetLibraryPaths(strCmd);

	strCmd += m_strObjFiles;
	strCmd += " ";
	strCmd += m_strLibFiles;

	if (m_bLinkCpp)
		strCmd += " -lstdc++";

	if (theApp.IsGUITarget())
		GetGUILibraries(strCmd);

}

bool GCCCompiler::GetMessageData(int sel, CString& strFile, int& line)
{
	bool rtn = false;
	if (MessageLog.size() > sel)	{
		CString& msg = MessageLog[sel];
		const char* cp = msg.GetBuffer(0);
		for (int n = 0; n < msg.GetLength(); n++)	{
			if (*(cp+n) == ':')	{
				if (isdigit(*(cp+n+1)))	{
					rtn = true;
					strFile = msg.Left(n);
					line = atoi(cp+n+1);
					break;
				}
			}
		}
	}
	return rtn;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区0| 久久综合九色综合97_久久久| 国内精品久久久久影院色 | 午夜视频在线观看一区二区| 国产精品美女久久福利网站| 国产日韩欧美综合一区| 国产亚洲欧美激情| 2020国产精品久久精品美国| 久久一留热品黄| 国产女主播在线一区二区| 国产亚洲自拍一区| 中文字幕第一区第二区| ...xxx性欧美| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲午夜激情av| 无吗不卡中文字幕| 日本不卡一区二区三区 | 日韩你懂的在线播放| 日韩欧美视频一区| 国产亚洲短视频| 亚洲激情综合网| 奇米影视一区二区三区小说| 麻豆传媒一区二区三区| 国产成人精品免费视频网站| 99久久99久久精品免费观看| 欧美中文字幕一二三区视频| 欧美肥胖老妇做爰| 久久夜色精品国产噜噜av| 国产精品久久久久久亚洲伦| 亚洲高清一区二区三区| 加勒比av一区二区| 99国产精品国产精品毛片| 欧美卡1卡2卡| 国产农村妇女毛片精品久久麻豆| 亚洲精品自拍动漫在线| 青青草成人在线观看| 不卡av免费在线观看| 欧美一区二区网站| 国产精品美女久久久久久2018| 亚洲午夜精品久久久久久久久| 国产一区 二区 三区一级| 91成人国产精品| 久久综合中文字幕| 午夜精品久久久久久久99水蜜桃| 国产成人精品影视| 日韩一区二区在线看| 综合久久国产九一剧情麻豆| 九色综合国产一区二区三区| 一本一道久久a久久精品| 精品国产乱码久久久久久免费| 亚洲男人电影天堂| 国产精品一区二区果冻传媒| 欧美日韩国产系列| 亚洲私人影院在线观看| 国产伦精品一区二区三区免费| 欧美日韩一区视频| 中文字幕亚洲电影| 国产精品自产自拍| 88在线观看91蜜桃国自产| 夜夜嗨av一区二区三区中文字幕 | 国产黄色成人av| 欧美一三区三区四区免费在线看| 亚洲女爱视频在线| 99久久er热在这里只有精品15| 国产三级欧美三级| 韩国av一区二区| 欧美一区二区啪啪| 日韩av在线发布| 91精品欧美久久久久久动漫| 亚洲国产精品久久久男人的天堂| 91色porny在线视频| 亚洲国产精品成人久久综合一区| 国产一区二区美女| 久久久精品免费网站| 麻豆成人av在线| 欧美一区二区三区免费大片| 日本不卡一区二区| 精品国一区二区三区| 久久激情综合网| 精品国产不卡一区二区三区| 激情六月婷婷综合| 久久精品一区八戒影视| 粉嫩av一区二区三区在线播放| 国产校园另类小说区| 大白屁股一区二区视频| 日本一区二区三区dvd视频在线| 国产毛片精品视频| 国产精品乱人伦一区二区| 91在线精品一区二区| 亚洲一区日韩精品中文字幕| 欧美日韩国产成人在线91| 人人精品人人爱| 国产香蕉久久精品综合网| 99免费精品在线观看| 亚洲综合区在线| 91麻豆精品91久久久久久清纯| 久久99精品一区二区三区三区| 国产午夜亚洲精品羞羞网站| 91麻豆swag| 男女激情视频一区| 国产精品女同一区二区三区| 一本色道综合亚洲| 蜜桃av一区二区三区电影| www国产成人免费观看视频 深夜成人网| 国产电影精品久久禁18| 亚洲综合成人在线| 精品成人一区二区三区| 99re6这里只有精品视频在线观看| 洋洋av久久久久久久一区| 欧美一区二区三区喷汁尤物| 粉嫩av一区二区三区| 一区二区三区日韩| 久久亚洲精品国产精品紫薇| 色综合色狠狠天天综合色| 免费成人av资源网| 亚洲人成电影网站色mp4| 日韩欧美一区二区免费| 色一情一乱一乱一91av| 寂寞少妇一区二区三区| 亚洲自拍偷拍网站| 国产精品色婷婷| 欧美一区二区三区公司| 99re成人在线| 国产在线不卡一区| 亚洲高清免费视频| 国产精品国产三级国产专播品爱网| 欧美人体做爰大胆视频| 99国产麻豆精品| 国产精品一区一区三区| 美女诱惑一区二区| 亚洲一区二区在线免费观看视频| 国产人久久人人人人爽| 精品国产污网站| 制服丝袜亚洲精品中文字幕| 91国模大尺度私拍在线视频| 国产.欧美.日韩| 国产一区二区调教| 麻豆成人91精品二区三区| 一区二区高清视频在线观看| 欧美国产激情一区二区三区蜜月| 欧美一区二区三区四区在线观看| 欧美性色欧美a在线播放| 成人av午夜影院| 国产成人精品亚洲777人妖| 国产一区二区三区久久久| 麻豆传媒一区二区三区| 麻豆精品在线观看| 麻豆精品视频在线观看免费| 日韩av电影免费观看高清完整版| 亚洲精品综合在线| 亚洲美女免费视频| 亚洲免费大片在线观看| 亚洲人成在线播放网站岛国| 国产精品剧情在线亚洲| 中文字幕亚洲不卡| 亚洲婷婷综合久久一本伊一区| 中文字幕第一区二区| 综合中文字幕亚洲| 亚洲精品久久久蜜桃| 一区二区三区四区在线免费观看| 亚洲天天做日日做天天谢日日欢| 国产精品久久久久久久久图文区 | 亚洲丝袜精品丝袜在线| 国产精品日韩成人| 最新国产成人在线观看| 尤物在线观看一区| 午夜精品一区二区三区免费视频| 亚洲sss视频在线视频| 午夜婷婷国产麻豆精品| 麻豆精品一区二区av白丝在线| 激情图片小说一区| 成熟亚洲日本毛茸茸凸凹| 97成人超碰视| 欧美日韩国产高清一区| 欧美mv和日韩mv国产网站| 久久免费视频色| 综合自拍亚洲综合图不卡区| 亚洲成av人影院在线观看网| 毛片不卡一区二区| 不卡欧美aaaaa| 欧美日韩国产三级| 欧美精品一区二区久久婷婷| 中文字幕制服丝袜成人av| 一区二区三区免费看视频| 蜜乳av一区二区| 91网站在线观看视频| 337p亚洲精品色噜噜噜| 国产欧美精品一区二区色综合| 日韩毛片一二三区| 久久激情五月激情| 色婷婷国产精品综合在线观看| 91精品国产欧美日韩| 国产精品色哟哟| 日本aⅴ亚洲精品中文乱码| jlzzjlzz国产精品久久| 欧美酷刑日本凌虐凌虐| 一区在线观看免费| 蜜桃视频免费观看一区| 91国产福利在线| 国产欧美日本一区视频|