Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve error reporting detail #286

Merged
merged 2 commits into from
May 4, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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!
Expand Down
21 changes: 10 additions & 11 deletions src/CLR/Core/TypeSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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 );
Expand All @@ -1804,16 +1804,15 @@ 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
{
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 );
Expand All @@ -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);
}
}
}
Expand All @@ -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 );
Expand All @@ -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);
}
}

Expand All @@ -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 );
Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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)
Expand Down
27 changes: 17 additions & 10 deletions src/CLR/Include/nanoCLR_Interop.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down