2006-07-07 00:07:18 -04:00
|
|
|
#include "factor.h"
|
2006-02-19 22:08:08 -05:00
|
|
|
|
2006-03-19 02:42:40 -05:00
|
|
|
#import "Foundation/NSAutoreleasePool.h"
|
|
|
|
#import "Foundation/NSBundle.h"
|
2006-02-19 22:08:08 -05:00
|
|
|
#import "Foundation/NSException.h"
|
2006-03-19 02:42:40 -05:00
|
|
|
#import "Foundation/NSString.h"
|
2006-09-02 01:58:23 -04:00
|
|
|
#import "Foundation/NSPathUtilities.h"
|
2006-02-19 22:08:08 -05:00
|
|
|
|
2006-05-19 14:59:44 -04:00
|
|
|
static CELL error;
|
|
|
|
|
2006-03-17 22:15:16 -05:00
|
|
|
/* This code is convoluted because Cocoa places restrictions on longjmp and
|
|
|
|
exception handling. In particular, a longjmp can never cross an NS_DURING,
|
|
|
|
NS_HANDLER or NS_ENDHANDLER. */
|
2006-10-15 00:10:54 -04:00
|
|
|
void run()
|
2006-02-19 22:08:08 -05:00
|
|
|
{
|
2006-05-19 14:59:44 -04:00
|
|
|
error = F;
|
2006-03-17 22:15:16 -05:00
|
|
|
|
2006-02-19 22:08:08 -05:00
|
|
|
for(;;)
|
|
|
|
{
|
2006-03-17 22:15:16 -05:00
|
|
|
NS_DURING
|
2006-02-23 02:09:34 -05:00
|
|
|
SETJMP(stack_chain->toplevel);
|
2006-02-19 22:08:08 -05:00
|
|
|
handle_error();
|
2006-03-17 22:15:16 -05:00
|
|
|
|
|
|
|
if(error != F)
|
|
|
|
{
|
|
|
|
CELL e = error;
|
|
|
|
error = F;
|
2006-05-15 00:03:55 -04:00
|
|
|
general_error(ERROR_OBJECTIVE_C,e,F,true);
|
2006-03-17 22:15:16 -05:00
|
|
|
}
|
|
|
|
|
2006-10-15 00:10:54 -04:00
|
|
|
interpreter_loop();
|
2006-02-19 22:08:08 -05:00
|
|
|
NS_VOIDRETURN;
|
|
|
|
NS_HANDLER
|
2006-03-17 22:15:16 -05:00
|
|
|
error = tag_object(make_alien(F,(CELL)localException));
|
2006-02-19 22:08:08 -05:00
|
|
|
NS_ENDHANDLER
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-10-15 00:10:54 -04:00
|
|
|
void run_toplevel(void)
|
|
|
|
{
|
|
|
|
interpreter();
|
|
|
|
}
|
|
|
|
|
2006-03-19 02:42:40 -05:00
|
|
|
void early_init(void)
|
|
|
|
{
|
|
|
|
[[NSAutoreleasePool alloc] init];
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *default_image_path(void)
|
|
|
|
{
|
|
|
|
NSBundle *bundle = [NSBundle mainBundle];
|
2006-08-28 04:03:09 -04:00
|
|
|
NSString *path = [bundle bundlePath];
|
|
|
|
NSString *image;
|
|
|
|
if([path hasSuffix:@".app"] || [path hasSuffix:@".app/"])
|
|
|
|
image = [[path stringByDeletingLastPathComponent] stringByAppendingString:@"/factor.image"];
|
|
|
|
else
|
|
|
|
image = [path stringByAppendingString:@"/factor.image"];
|
2006-03-19 02:42:40 -05:00
|
|
|
return [image cString];
|
|
|
|
}
|
2006-07-07 00:07:18 -04:00
|
|
|
|
|
|
|
void init_signals(void)
|
|
|
|
{
|
|
|
|
unix_init_signals();
|
|
|
|
mach_initialize();
|
|
|
|
}
|