diff -r 0998a43cc155 -r ca99a81745fe src/main.cpp --- a/src/main.cpp Sat Dec 29 00:55:38 2012 -0800 +++ b/src/main.cpp Tue Jan 01 15:34:07 2013 -0800 @@ -20,6 +20,14 @@ #include #include #include "../include/keima.h" +#include "Utility.h" +#include "Platform.h" +#ifdef WIN32 +# include +# include +#else +# include +#endif using namespace Ke; @@ -34,11 +42,22 @@ IStackFrameIterator *iter = Keima::NewStackFrameIterator(); unsigned index = 0; + + const char *filename = iter->source(); + if (!filename) + filename = ""; + if (const char *tail = strrchr(filename, '/')) + filename = tail + 1; +#ifdef WIN32 + if (const char *tail = strrchr(filename, '\\')) + filename = tail + 1; +#endif + while (!iter->done() && index < 10) { fprintf(stderr, "[%d] %s (%s line %d)\n", index, iter->function(), - iter->source(), + filename, iter->lineNumber()); iter->prev(); index++; @@ -107,6 +126,14 @@ if (!Keima::Initialize()) return 1; + ke::AutoFree fullpath; + if (!ke::OS::GetAbsolutePath(argv[1], fullpath)) + return 1; + + ke::AutoFree path, name; + if (!ke::OS::SplitPath(*fullpath, path, name)) + return 1; + int rval = 0; Keima::InstallMessageReporter(&s_Reporter); @@ -115,7 +142,13 @@ Keima::SetPublicFunctionListener(&entry); HandleScope scope; - if (!Compile(argv[1])) { + Local package = Package::New(Handle(), Handle(), *path, Package::Normal); + if (!package) { + rval = 1; + break; + } + + if (!Keima::Compile(package, *name)) { rval = 1; break; }