1.1 --- a/src/main.cpp Sat Dec 29 00:55:38 2012 -0800
1.2 +++ b/src/main.cpp Tue Jan 01 15:34:07 2013 -0800
1.3 @@ -20,6 +20,14 @@
1.4 #include <stdlib.h>
1.5 #include <string.h>
1.6 #include "../include/keima.h"
1.7 +#include "Utility.h"
1.8 +#include "Platform.h"
1.9 +#ifdef WIN32
1.10 +# include <Windows.h>
1.11 +# include <direct.h>
1.12 +#else
1.13 +# include <unistd.h>
1.14 +#endif
1.15
1.16 using namespace Ke;
1.17
1.18 @@ -34,11 +42,22 @@
1.19
1.20 IStackFrameIterator *iter = Keima::NewStackFrameIterator();
1.21 unsigned index = 0;
1.22 +
1.23 + const char *filename = iter->source();
1.24 + if (!filename)
1.25 + filename = "<anonymous>";
1.26 + if (const char *tail = strrchr(filename, '/'))
1.27 + filename = tail + 1;
1.28 +#ifdef WIN32
1.29 + if (const char *tail = strrchr(filename, '\\'))
1.30 + filename = tail + 1;
1.31 +#endif
1.32 +
1.33 while (!iter->done() && index < 10) {
1.34 fprintf(stderr, "[%d] %s (%s line %d)\n",
1.35 index,
1.36 iter->function(),
1.37 - iter->source(),
1.38 + filename,
1.39 iter->lineNumber());
1.40 iter->prev();
1.41 index++;
1.42 @@ -107,6 +126,14 @@
1.43 if (!Keima::Initialize())
1.44 return 1;
1.45
1.46 + ke::AutoFree<char> fullpath;
1.47 + if (!ke::OS::GetAbsolutePath(argv[1], fullpath))
1.48 + return 1;
1.49 +
1.50 + ke::AutoFree<char> path, name;
1.51 + if (!ke::OS::SplitPath(*fullpath, path, name))
1.52 + return 1;
1.53 +
1.54 int rval = 0;
1.55
1.56 Keima::InstallMessageReporter(&s_Reporter);
1.57 @@ -115,7 +142,13 @@
1.58 Keima::SetPublicFunctionListener(&entry);
1.59
1.60 HandleScope scope;
1.61 - if (!Compile(argv[1])) {
1.62 + Local<Package> package = Package::New(Handle<Package>(), Handle<String>(), *path, Package::Normal);
1.63 + if (!package) {
1.64 + rval = 1;
1.65 + break;
1.66 + }
1.67 +
1.68 + if (!Keima::Compile(package, *name)) {
1.69 rval = 1;
1.70 break;
1.71 }