コード例 #1
0
ファイル: extern.c プロジェクト: Terraspace/HJWasm
static struct asym *CreateProto( int i, struct asm_tok tokenarray[], const char *name, enum lang_type langtype )
/**************************************************************************************************************/
{
    struct asym      *sym;
    struct dsym      *dir;

    DebugMsg1(("CreateProto( i=%u, name=%s, lang=%u )\n", i, name ? name : "NULL", langtype ));
    sym = SymSearch( name );

    /* the symbol must be either NULL or state
     * - SYM_UNDEFINED
     * - SYM_EXTERNAL + isproc == FALSE ( previous EXTERNDEF )
     * - SYM_EXTERNAL + isproc == TRUE ( previous PROTO )
     * - SYM_INTERNAL + isproc == TRUE ( previous PROC )
     */
    if( sym == NULL ||
       sym->state == SYM_UNDEFINED ||
       ( sym->state == SYM_EXTERNAL && sym->weak == TRUE && sym->isproc == FALSE )) {
        if ( NULL == ( sym = CreateProc( sym, name, SYM_EXTERNAL ) ) )
            return( NULL ); /* name was probably invalid */
    } else if ( sym->isproc == FALSE ) {
        EmitErr( SYMBOL_REDEFINITION, sym->name );
        return( NULL );
    }
    dir = (struct dsym *)sym;

    /* a PROTO typedef may be used */
    if ( tokenarray[i].token == T_ID ) {
        struct asym * sym2;
        sym2 = SymSearch( tokenarray[i].string_ptr );
        if ( sym2 && sym2->state == SYM_TYPE && sym2->mem_type == MT_PROC ) {
            i++;
            if ( tokenarray[i].token != T_FINAL ) {
                EmitErr( SYNTAX_ERROR_EX, tokenarray[i].string_ptr );
                return( NULL );
            }
            CopyPrototype( dir, (struct dsym *)sym2->target_type );
            return( sym );
        }
    }
    /* sym->isproc is set inside ParseProc() */
    //sym->isproc = TRUE;

    if ( Parse_Pass == PASS_1 ) {
        if ( ParseProc( dir, i, tokenarray, FALSE, langtype ) == ERROR )
            return( NULL );
#if DLLIMPORT
        sym->dll = ModuleInfo.CurrDll;
#endif
    } else {
        sym->isdefined = TRUE;
    }
    return( sym );
}
コード例 #2
0
ファイル: parser.cpp プロジェクト: ValeevaDA/compiler-236
void Parser::ParseDecl()
{
	while (true)
	{
		if (t.GetValue() == "var")
			ParseVarDecl();
		else
		if(t.GetValue() == "type")
			ParseTypeDecl();
		else
		if(t.GetValue() == "const")
			ParseConstDecl();
		else
		if(t.GetValue() == "procedure")
			ParseProc();
		else
		if(t.GetValue() == "function")
			ParseFunc();
		else
			break;
	}
}
コード例 #3
0
INT32 CYWXmlBase::NETXml_Proc(string &strErr)
{
	DBG_PRINT(("=======NETXml_Proc Begin============="));
	MutexLock();
	INT32 errcode = 0;
	errcode = BuildProc();
	if(errcode != XML_SUCCESS)
	{
		MutexUnlock();
		strErr = "组装请求信息错误";
		return XML_INTERNAL_ERR_NO;
	}
	
	FILE *fp;	
	string sInputInfo;
	string sOutputInfo;
	
	//读取XML文件至BUFF
	memset(tmpBuff, 0, sizeof(tmpBuff));
	if( (fp = fopen(KJ_XML_REQUEST_FILE, "rb")) == NULL )
	{
		MutexUnlock();
		strErr = "未找到请求XML文件";
		return XML_INTERNAL_ERR_NO;
	}
	fseek( fp, 0L, SEEK_END );	
	int dataLen = ftell( fp );				
	DBG_PRINT(("Req filelen: %d", dataLen));
	
	fseek( fp, 0L, SEEK_SET );	
	fread( (void *)tmpBuff, dataLen, 1, fp);

	fclose(fp);
	sInputInfo = tmpBuff;
	
	//设置服务器IP,端口和路径
	
	CNetTransfers *p=NULL;
	p=g_netManager->GetTransHandle();

	m_servip =p->m_serverIP;
	m_servport =p->m_serverPort;
	m_servpath =p->m_serverFile;
	DBG_PRINT(("m_servip= %s",m_servip.c_str()));
	DBG_PRINT(("m_servport= %s",m_servport.c_str()));
	DBG_PRINT(("m_servpath= %s",m_servpath.c_str()));

	OperateNet((char *)m_ywxml_gy.m_zskl.c_str(), m_servip, m_servport, m_servpath, "", m_ywxml_gy.m_nsrsbh, sInputInfo, sOutputInfo, strErr);
	
	//接收数据写文件
	memset(tmpBuff, 0, sizeof(tmpBuff));
	sprintf((INT8 *)tmpBuff, "%s", sOutputInfo.c_str());
	UINT32 tmpLen = sOutputInfo.length();
	DBG_PRINT(("tmpLen = %u", tmpLen));
	
	if(tmpLen > 0)
	{
		if( (fp = fopen(KJ_XML_RESPONSE_FILE, "wb")) == NULL )
		{
			MutexUnlock();
			strErr = "未找到应答XML文件";
			return XML_INTERNAL_ERR_NO;
		}
		fwrite( (void *)tmpBuff, tmpLen, 1, fp);
		fclose(fp);
		
		errcode = ParseProc();
		if(errcode != XML_SUCCESS)
		{
			MutexUnlock();
			strErr = "解析应答数据错误";
			return XML_INTERNAL_ERR_NO;
		}
		
		errcode = atoi(m_retInfo.m_retCode.c_str());
		DBG_PRINT(("errcode = %d", errcode));
		if(errcode != 0)
		{
			MutexUnlock();
			strErr = m_retInfo.m_retMsg;
			return errcode;
		}
	}
	else
	{
		MutexUnlock();
		return XML_NET_ERR_NO;
	}

	MutexUnlock();
	DBG_PRINT(("=============NETXml_Proc End================"));
	return XML_SUCCESS;
}
コード例 #4
0
INT32 CYWXmlBase::YWXml_Proc(string &strErr)
{
	DBG_PRINT(("=======YWXml_Proc Begin============="));
	MutexLock();
	INT32 errcode = 0;
	errcode = BuildProc();
	if(errcode != XML_SUCCESS)
	{
		MutexUnlock();
		strErr = "组装请求信息错误";
		return XML_INTERNAL_ERR_NO;
	}

	FILE *fp;	
	string sInputInfo;
	string sOutputInfo;

	//读取XML文件至BUFF
	memset(tmpBuff, 0, sizeof(tmpBuff));
	if( (fp = fopen(KJ_XML_REQUEST_FILE, "rb")) == NULL )
	{
		MutexUnlock();
		strErr = "未找到请求XML文件";
		return XML_INTERNAL_ERR_NO;
	}
	fseek( fp, 0L, SEEK_END );	
	int dataLen = ftell( fp );				
	DBG_PRINT(("Req filelen: %d", dataLen));
	
	fseek( fp, 0L, SEEK_SET );	
	fread( (void *)tmpBuff, dataLen, 1, fp);
	fclose(fp);
	sInputInfo = tmpBuff;

	OperateDisk(sInputInfo, sOutputInfo);

	//接收数据写文件
	memset(tmpBuff, 0, sizeof(tmpBuff));
	sprintf((INT8 *)tmpBuff, "%s", sOutputInfo.c_str());
	UINT32 tmpLen = sOutputInfo.length();
	DBG_PRINT(("tmpLen = %u", tmpLen));
	
	if( (fp = fopen(KJ_XML_RESPONSE_FILE, "wb")) == NULL )
	{
		MutexUnlock();
		strErr = "未找到应答XML文件";
		return XML_INTERNAL_ERR_NO;
	}
	fwrite( (void *)tmpBuff, tmpLen, 1, fp);
	fclose(fp);

	errcode = ParseProc();
	if(errcode != XML_SUCCESS)
	{
		MutexUnlock();
		strErr = "解析应答数据错误";
		return XML_INTERNAL_ERR_NO;
	}

	errcode = atoi(m_retInfo.m_retCode.c_str());
	DBG_PRINT(("errcode = %d", errcode));
	if(errcode != 0)
	{
		MutexUnlock();
		strErr = m_retInfo.m_retMsg;
		return errcode;
	}

	MutexUnlock();
	DBG_PRINT(("=============YWXml_Proc End================"));
	return XML_SUCCESS;
}