diff --git a/README.md b/README.md index 5a950a5edd..2649723d23 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/nanoframework/nf-interpreter.svg?branch=master)](https://travis-ci.org/nanoframework/nf-interpreter) -[![Join the chat at https://nanoframework.slack.com/](https://img.shields.io/badge/join%20us-on%20slack-orange.svg)](https://nanoframework.slack.com/) +[![Join the chat at https://nanoframework.slack.com/](https://img.shields.io/badge/join%20us-on%20slack-orange.svg)](https://nanoframework.wordpress.com/slack-invite-form/) Welcome to the nanoFramework Interpreter repository! diff --git a/src/CLR/Core/TypeSystem.cpp b/src/CLR/Core/TypeSystem.cpp index 9dfb7cd748..06a4c8fb73 100644 --- a/src/CLR/Core/TypeSystem.cpp +++ b/src/CLR/Core/TypeSystem.cpp @@ -1535,7 +1535,7 @@ HRESULT CLR_RT_Assembly::CreateInstance( const CLR_RECORD_ASSEMBLY* header, CLR_ NANOCLR_CLEAR(*skeleton); - if(header->GoodAssembly() == false) NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + if(header->GoodAssembly() == false) NANOCLR_MSG_SET_AND_LEAVE(CLR_E_FAIL, L"Failed in type system: assembly is not good.\n"); skeleton->m_header = header; @@ -1795,7 +1795,7 @@ HRESULT CLR_RT_Assembly::Resolve_TypeRef() #if !defined(BUILD_RTM) CLR_Debug::Printf( "Resolve: unknown scope: %08x\r\n", src->scope ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: unknown scope: %08x\r\n", src->scope); } const char* szName = GetString( src->name ); @@ -1804,8 +1804,7 @@ HRESULT CLR_RT_Assembly::Resolve_TypeRef() #if !defined(BUILD_RTM) CLR_Debug::Printf( "Resolve: unknown type: %s\r\n", szName ); #endif - - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: unknown type: %s\r\n", szName); } } else @@ -1813,7 +1812,7 @@ HRESULT CLR_RT_Assembly::Resolve_TypeRef() CLR_RT_Assembly* assm = m_pCrossReference_AssemblyRef[ src->scope ].m_target; if(assm == NULL) { - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: assm is null\n"); } const char* szNameSpace = GetString( src->nameSpace ); @@ -1824,7 +1823,7 @@ HRESULT CLR_RT_Assembly::Resolve_TypeRef() CLR_Debug::Printf( "Resolve: unknown type: %s.%s\r\n", szNameSpace, szName ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: unknown type: %s\r\n", szName); } } } @@ -1849,7 +1848,7 @@ HRESULT CLR_RT_Assembly::Resolve_FieldRef() CLR_Debug::Printf( "Resolve Field: unknown scope: %08x\r\n", src->container ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve Field: unknown scope: %08x\r\n", src->container); } const char* szName = GetString( src->name ); @@ -1860,7 +1859,7 @@ HRESULT CLR_RT_Assembly::Resolve_FieldRef() CLR_Debug::Printf( "Resolve: unknown field: %s\r\n", szName ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: unknown field: %s\r\n", szName); } } @@ -1884,7 +1883,7 @@ HRESULT CLR_RT_Assembly::Resolve_MethodRef() CLR_Debug::Printf( "Resolve Field: unknown scope: %08x\r\n", src->container ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve Field: unknown scope: %08x\r\n", src->container); } const char* name = GetString( src->name ); @@ -1912,7 +1911,7 @@ HRESULT CLR_RT_Assembly::Resolve_MethodRef() CLR_Debug::Printf( "Resolve: unknown method: %s.%s.%s\r\n", qASSM->GetString( qTD->nameSpace ), qASSM->GetString( qTD->name ), name ); #endif - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG1_SET_AND_LEAVE(CLR_E_FAIL, L"Resolve: unknown method: %s\r\n", name); } } @@ -2845,7 +2844,7 @@ HRESULT CLR_RT_Assembly::PrepareForExecution() //Circular dependency _ASSERTE(false); - NANOCLR_SET_AND_LEAVE(CLR_E_FAIL); + NANOCLR_MSG_SET_AND_LEAVE(CLR_E_FAIL, L"Failed to prepare type system for execution\n"); } if((m_flags & CLR_RT_Assembly::c_PreparedForExecution) == 0) diff --git a/src/CLR/Include/nanoCLR_Interop.h b/src/CLR/Include/nanoCLR_Interop.h index 095e4440f6..55f9b45a8b 100644 --- a/src/CLR/Include/nanoCLR_Interop.h +++ b/src/CLR/Include/nanoCLR_Interop.h @@ -35,16 +35,23 @@ __nfweak extern HRESULT NANOCLR_DEBUG_PROCESS_EXCEPTION( HRESULT hr, const char* #endif -#define NANOCLR_HEADER() HRESULT hr -#define NANOCLR_CHECK_HRESULT(expr) { if(FAILED(hr = (expr))) NANOCLR_LEAVE(); } -#define NANOCLR_EXIT_ON_SUCCESS(expr) { if(SUCCEEDED(hr = (expr))) NANOCLR_LEAVE(); } -#define NANOCLR_SET_AND_LEAVE(expr) { hr = (expr); NANOCLR_LEAVE(); } -#define NANOCLR_CLEANUP() hr = S_OK; nanoCLR_Cleanup: -#define NANOCLR_CLEANUP_END() NANOCLR_RETURN() -#define NANOCLR_NOCLEANUP() NANOCLR_CLEANUP(); NANOCLR_CLEANUP_END() -#define NANOCLR_NOCLEANUP_NOLABEL() hr = S_OK; NANOCLR_RETURN() -#define FAULT_ON_NULL(ptr) if(!(ptr)) NANOCLR_SET_AND_LEAVE(CLR_E_NULL_REFERENCE) -#define FAULT_ON_NULL_ARG(ptr) if(!(ptr)) NANOCLR_SET_AND_LEAVE(CLR_E_ARGUMENT_NULL) +#define NANOCLR_HEADER() HRESULT hr +#define NANOCLR_CHECK_HRESULT(expr) { if(FAILED(hr = (expr))) NANOCLR_LEAVE(); } +#define NANOCLR_EXIT_ON_SUCCESS(expr) { if(SUCCEEDED(hr = (expr))) NANOCLR_LEAVE(); } +#define NANOCLR_SET_AND_LEAVE(expr) { hr = (expr); NANOCLR_LEAVE(); } +#if defined(_MSC_VER) +#define NANOCLR_MSG_SET_AND_LEAVE(expr, msg) { wprintf(msg); hr = (expr); NANOCLR_LEAVE(); } +#define NANOCLR_MSG1_SET_AND_LEAVE(expr, msg, arg) { wprintf(msg, arg); hr = (expr); NANOCLR_LEAVE(); } +#else +#define NANOCLR_MSG_SET_AND_LEAVE(expr, msg) { hr = (expr); NANOCLR_LEAVE(); } +#define NANOCLR_MSG1_SET_AND_LEAVE(expr, msg, arg) { hr = (expr); NANOCLR_LEAVE(); } +#endif +#define NANOCLR_CLEANUP() hr = S_OK; nanoCLR_Cleanup: +#define NANOCLR_CLEANUP_END() NANOCLR_RETURN() +#define NANOCLR_NOCLEANUP() NANOCLR_CLEANUP(); NANOCLR_CLEANUP_END() +#define NANOCLR_NOCLEANUP_NOLABEL() hr = S_OK; NANOCLR_RETURN() +#define FAULT_ON_NULL(ptr) if(!(ptr)) NANOCLR_SET_AND_LEAVE(CLR_E_NULL_REFERENCE) +#define FAULT_ON_NULL_ARG(ptr) if(!(ptr)) NANOCLR_SET_AND_LEAVE(CLR_E_ARGUMENT_NULL) // Correspondence between CLR C# and C++ native types: