quakeforge/ruamoko/scheme/Lambda.r
Bill Currie 75ec6bf244 Clean out some unnecessary types from the progs engine and clean up the mess.
This is a nasty commit, sorry, but 99% of the commit is interdependent.
2011-01-10 12:25:31 +09:00

45 lines
1,022 B
R

#include "Lambda.h"
#include "Nil.h"
#include "Symbol.h"
#include "string.h"
#include "Cons.h"
#include "defs.h"
#include "Error.h"
#include "Machine.h"
@implementation Lambda
+ (id) newWithCode: (CompiledCode []) c environment: (Frame []) e
{
return [[self alloc] initWithCode: c environment: e];
}
- (id) initWithCode: (CompiledCode []) c environment: (Frame []) e
{
self = [super init];
code = c;
env = e;
return self;
}
- (void) invokeOnMachine: (Machine []) m
{
[super invokeOnMachine: m];
if (length([m stack]) < [code minimumArguments]) {
[m value: [Error type: "call"
message: sprintf("expected at least %i arguments, received %i",
[code minimumArguments], length([m stack]))
by: m]];
return;
}
[m loadCode: code];
[m environment: env];
[m procedure: self];
}
- (void) markReachable
{
[env mark];
[code mark];
}
@end