quakeforge/ruamoko/scheme/Instruction.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

59 lines
1 KiB
R

#include "Instruction.h"
#include "defs.h"
@implementation Instruction
+ (id) opcode: (opcode_e) oc
{
return [[self alloc] initWithOpcode: oc operand: 0 label: NIL];
}
+ (id) opcode: (opcode_e) oc operand: (integer) op
{
return [[self alloc] initWithOpcode: oc operand: op label: NIL];
}
+ (id) opcode: (opcode_e) oc label: (Instruction []) l
{
return [[self alloc] initWithOpcode: oc operand: 0 label: l];
}
- (id) initWithOpcode: (opcode_e) oc operand: (integer) op label: (Instruction []) l
{
self = [super init];
opcode = oc;
operand = op;
label = l;
return self;
}
- (void) offset: (integer) ofs
{
offset = ofs;
}
- (integer) offset
{
return offset;
}
- (opcode_e) opcode
{
return opcode;
}
- (void) emitStruct: (instruction_t []) program
{
program[offset].opcode = opcode;
if (label) {
program[offset].operand = [label offset];
} else {
program[offset].operand = operand;
}
}
- (void) markReachable
{
[label mark];
}
@end