Skip to content

Commit

Permalink
Merge pull request #717 from adamdruppe/exception_speed
Browse files Browse the repository at this point in the history
lazier generation of stack traces
  • Loading branch information
braddr committed Feb 20, 2014
2 parents a42d10f + dc30883 commit 9ee8ff1
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions src/core/runtime.d
Expand Up @@ -442,8 +442,6 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
{
this()
{
static enum MAXFRAMES = 128;
void*[MAXFRAMES] callstack;
numframes = 0; //backtrace( callstack, MAXFRAMES );
if (numframes < 2) // backtrace() failed, do it ourselves
{
Expand Down Expand Up @@ -475,12 +473,6 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}
}
}
framelist = backtrace_symbols( callstack.ptr, numframes );
}

~this()
{
free( framelist );
}

override int opApply( scope int delegate(ref const(char[])) dg ) const
Expand Down Expand Up @@ -512,6 +504,9 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}
int ret = 0;

const framelist = backtrace_symbols( callstack.ptr, numframes );
scope(exit) free(cast(void*) framelist);

for( int i = FIRSTFRAME; i < numframes; ++i )
{
char[4096] fixbuf;
Expand All @@ -535,7 +530,8 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )

private:
int numframes;
char** framelist;
static enum MAXFRAMES = 128;
void*[MAXFRAMES] callstack = void;

private:
const(char)[] fixline( const(char)[] buf, ref char[4096] fixbuf ) const
Expand Down Expand Up @@ -597,7 +593,7 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}

assert(symBeg < buf.length && symEnd < buf.length);
assert(symBeg < symEnd);
assert(symBeg <= symEnd);

enum min = (size_t a, size_t b) => a <= b ? a : b;
if (symBeg == symEnd || symBeg >= fixbuf.length)
Expand Down

0 comments on commit 9ee8ff1

Please sign in to comment.