diff options
| author | Nicola Mettifogo | 2007-03-17 13:14:50 +0000 | 
|---|---|---|
| committer | Nicola Mettifogo | 2007-03-17 13:14:50 +0000 | 
| commit | 48460e2ea66a308fc5085c51f47ccbcfac9ecbc5 (patch) | |
| tree | 897f9d96ec74faa7a9ce32609f4f8a7b962ee543 | |
| parent | 97514214349ed236c54fa6a91a0937b9c6073aab (diff) | |
| download | scummvm-rg350-48460e2ea66a308fc5085c51f47ccbcfac9ecbc5.tar.gz scummvm-rg350-48460e2ea66a308fc5085c51f47ccbcfac9ecbc5.tar.bz2 scummvm-rg350-48460e2ea66a308fc5085c51f47ccbcfac9ecbc5.zip | |
- Made Node a superclass for Zone, WalkNode, Command, Instruction, Program and Job.
- Moved Job list management inside Parallaction (because constructors for global variables are not always invoked on some platforms)
svn-id: r26164
| -rw-r--r-- | engines/parallaction/animation.cpp | 36 | ||||
| -rw-r--r-- | engines/parallaction/callables.cpp | 4 | ||||
| -rw-r--r-- | engines/parallaction/commands.cpp | 6 | ||||
| -rw-r--r-- | engines/parallaction/defs.h | 11 | ||||
| -rw-r--r-- | engines/parallaction/inventory.cpp | 2 | ||||
| -rw-r--r-- | engines/parallaction/location.cpp | 6 | ||||
| -rw-r--r-- | engines/parallaction/parallaction.cpp | 35 | ||||
| -rw-r--r-- | engines/parallaction/parallaction.h | 21 | ||||
| -rw-r--r-- | engines/parallaction/walk.cpp | 30 | ||||
| -rw-r--r-- | engines/parallaction/zone.cpp | 18 | ||||
| -rw-r--r-- | engines/parallaction/zone.h | 12 | 
11 files changed, 93 insertions, 88 deletions
| diff --git a/engines/parallaction/animation.cpp b/engines/parallaction/animation.cpp index 0af2561250..edcf47a861 100644 --- a/engines/parallaction/animation.cpp +++ b/engines/parallaction/animation.cpp @@ -67,7 +67,7 @@ Animation *findAnimation(const char *name) {  	while (v4) {  		if (!scumm_stricmp(name, v4->_zone._label._text)) return v4; -		v4 = (Animation*)v4->_zone._node._next; +		v4 = (Animation*)v4->_zone._next;  	}  	return NULL; @@ -83,7 +83,7 @@ Animation *Parallaction::parseAnimation(Script& script, Node *list, char *name)  	vD0->_zone._label._text = (char*)malloc(strlen(name)+1);  	strcpy(vD0->_zone._label._text, name); -	addNode(list, &vD0->_zone._node); +	addNode(list, &vD0->_zone);  	fillBuffers(script, true);  	while (scumm_stricmp(_tokens[0], "endanimation")) { @@ -160,7 +160,7 @@ void  freeScript(Program *program) {  	if (!program) return;  	free(program->_locals); -	freeNodeList(&program->_node); +	freeNodeList(program);  	return;  } @@ -172,7 +172,7 @@ void freeAnimations() {  	while (v4) {  		freeScript(v4->_program);  		_vm->_gfx->freeCnv(&v4->_cnv); -		v4 = (Animation*)v4->_zone._node._next; +		v4 = (Animation*)v4->_zone._next;  	}  	return; @@ -188,7 +188,7 @@ void jobDisplayAnimations(void *parm, Job *j) {  	uint16 _si = 0; -	for ( ; v18; v18 = (Animation*)v18->_zone._node._next) { +	for ( ; v18; v18 = (Animation*)v18->_zone._next) {  		if ((v18->_zone._flags & kFlagsActive) && ((v18->_zone._flags & kFlagsRemove) == 0))   {  			v14._width = v18->_cnv._width; @@ -229,7 +229,7 @@ void jobEraseAnimations(void *arg_0, Job *j) {  	Animation *a = (Animation*)_animations._next; -	for (; a; a=(Animation*)a->_zone._node._next) { +	for (; a; a=(Animation*)a->_zone._next) {  		if (((a->_zone._flags & kFlagsActive) == 0) && ((a->_zone._flags & kFlagsRemove) == 0)) continue; @@ -262,7 +262,7 @@ void Parallaction::loadProgram(Animation *a, char *filename) {  	a->_program = (Program*)malloc(sizeof(Program));  	memset(a->_program, 0, sizeof(Program));  	a->_program->_locals = (LocalVariable*)malloc(sizeof(LocalVariable)*10); -	Node *vD0 = &a->_program->_node; +	Node *vD0 = a->_program;  	Instruction *vCC = (Instruction*)malloc(sizeof(Instruction));  	memset(vCC, 0, sizeof(Instruction)); @@ -270,8 +270,8 @@ void Parallaction::loadProgram(Animation *a, char *filename) {  	while (scumm_stricmp(_tokens[0], "endscript")) {  		parseScriptLine(vCC, a, a->_program->_locals); -		addNode(vD0, &vCC->_node); -		vD0 = &vCC->_node; +		addNode(vD0, vCC); +		vD0 = vCC;  		vCC = (Instruction*)malloc(sizeof(Instruction));  		memset(vCC, 0, sizeof(Instruction)); @@ -279,11 +279,11 @@ void Parallaction::loadProgram(Animation *a, char *filename) {  	}  	vCC->_index = INST_END; -	addNode(vD0, &vCC->_node); +	addNode(vD0, vCC);  	delete script; -	a->_program->_ip = (Instruction*)a->_program->_node._next; +	a->_program->_ip = (Instruction*)a->_program->_next;  	return;  } @@ -490,7 +490,7 @@ void jobRunScripts(void *parm, Job *j) {  	WalkNode *v4 = NULL;  	if (a->_zone._flags & kFlagsCharacter) a->_z = a->_zone.pos._position._y + a->_cnv._height; -	for ( ; a; a = (Animation*)a->_zone._node._next) { +	for ( ; a; a = (Animation*)a->_zone._next) {  		if ((a->_zone._flags & kFlagsActing) == 0) continue;  		Instruction *inst = a->_program->_ip; @@ -566,7 +566,7 @@ void jobRunScripts(void *parm, Job *j) {  			case INST_MOVE: // move  				v4 = buildWalkPath(*inst->_opA._pvalue, *inst->_opB._pvalue); -				addJob(jobWalk, v4, kPriority19 ); +				_vm->addJob(jobWalk, v4, kPriority19 );  				_engineFlags |= kEngineWalking;  				break; @@ -591,7 +591,7 @@ void jobRunScripts(void *parm, Job *j) {  					a->_zone._flags &= ~kFlagsActing;  					runCommands(a->_zone._commands, (Zone*)&a->_zone);  				} -				a->_program->_ip = (Instruction*)a->_program->_node._next; +				a->_program->_ip = (Instruction*)a->_program->_next;  				goto label1; @@ -625,10 +625,10 @@ void jobRunScripts(void *parm, Job *j) {  			} -			inst = (Instruction*)inst->_node._next; +			inst = (Instruction*)inst->_next;  		} -		a->_program->_ip = (Instruction*)inst->_node._next; +		a->_program->_ip = (Instruction*)inst->_next;  label1:  		if (a->_zone._flags & kFlagsCharacter) @@ -672,9 +672,9 @@ void sortAnimations() {  			v8 = v8->_next;  		} -		v4 = (Animation*)vC->_zone._node._next; +		v4 = (Animation*)vC->_zone._next; -		addNode(v8, &vC->_zone._node); +		addNode(v8, &vC->_zone);  		vC = v4;  	} diff --git a/engines/parallaction/callables.cpp b/engines/parallaction/callables.cpp index 950b8a6a24..b422909010 100644 --- a/engines/parallaction/callables.cpp +++ b/engines/parallaction/callables.cpp @@ -322,7 +322,7 @@ void _c_finito(void *parm) {  		_vm->_menu->selectCharacter();  	} -	removeNode(&_vm->_char._ani._zone._node); +	removeNode(&_vm->_char._ani._zone);  	_vm->_locationNames[0][0] = '\0';  	_vm->_numLocations = 0;  	_commandFlags = 0; @@ -339,7 +339,7 @@ void _c_finito(void *parm) {  	_engineFlags &= ~kEngineQuit; -	addNode(&_animations, &_vm->_char._ani._zone._node); +	addNode(&_animations, &_vm->_char._ani._zone);  	_score = 0;  	return; diff --git a/engines/parallaction/commands.cpp b/engines/parallaction/commands.cpp index ca8ae70085..52ce068a63 100644 --- a/engines/parallaction/commands.cpp +++ b/engines/parallaction/commands.cpp @@ -286,7 +286,7 @@ void runCommands(Command *list, Zone *z) {  		case CMD_OPEN:	// open  			u->_zone->_flags &= ~kFlagsClosed;  			if (u->_zone->u.door->_cnv._count != 0) { -				addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 ); +				_vm->addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 );  			}  			break; @@ -305,7 +305,7 @@ void runCommands(Command *list, Zone *z) {  				u->_zone->_flags &= ~kFlagsRemove;  				u->_zone->_flags |= kFlagsActive;  				if ((u->_zone->_type & 0xFFFF) == kZoneGet) { -					addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 ); +					_vm->addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 );  				}  			}  			break; @@ -334,7 +334,7 @@ void runCommands(Command *list, Zone *z) {  			WalkNode *vC = buildWalkPath(u->_move._x, u->_move._y); -			addJob(&jobWalk, vC, kPriority19 ); +			_vm->addJob(&jobWalk, vC, kPriority19 );  			_engineFlags |= kEngineWalking;  			}  			break; diff --git a/engines/parallaction/defs.h b/engines/parallaction/defs.h index 587b211816..f5d2093d38 100644 --- a/engines/parallaction/defs.h +++ b/engines/parallaction/defs.h @@ -38,10 +38,17 @@ struct Node {  	Node*	_next;  }; -struct WalkNode { -	Node	_node; +struct WalkNode : public Node { +//	Node	_node;  	int32	_x;  	int32	_y; + +public: +	WalkNode() : _x(0), _y(0) { +	} + +	WalkNode(int32 x, int32 y) : _x(x), _y(y) { +	}  };  struct Point { diff --git a/engines/parallaction/inventory.cpp b/engines/parallaction/inventory.cpp index 0308266101..c82ae19fb8 100644 --- a/engines/parallaction/inventory.cpp +++ b/engines/parallaction/inventory.cpp @@ -125,7 +125,7 @@ int16 pickupItem(Zone *z) {  	_inventory[_si]._id = MAKE_INVENTORY_ID(z->u.get->_icon);  	_inventory[_si]._index = z->u.get->_icon; -	addJob(jobRemovePickedItem, z, kPriority17 ); +	_vm->addJob(jobRemovePickedItem, z, kPriority17 );  	if (_inventory[_si]._id == 0) return 0; diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp index e092240d81..ff0f13c943 100644 --- a/engines/parallaction/location.cpp +++ b/engines/parallaction/location.cpp @@ -240,7 +240,7 @@ void parseWalkNodes(Script& script, Node *list) {  			v4->_x = atoi(_tokens[1]) - _vm->_char._ani._cnv._width/2;  			v4->_y = atoi(_tokens[2]) - _vm->_char._ani._cnv._height; -			addNode(list, &v4->_node); +			addNode(list, v4);  		} @@ -342,7 +342,7 @@ void Parallaction::changeLocation(char *location) {  		debugC(2, kDebugLocation, "changeLocation: changed cursor");  	} -	removeNode(&_vm->_char._ani._zone._node); +	removeNode(&_vm->_char._ani._zone);  	debugC(2, kDebugLocation, "changeLocation: removed character from the animation list");  	freeLocation(); @@ -375,7 +375,7 @@ void Parallaction::changeLocation(char *location) {  		}  	} -	addNode(&_animations, &_vm->_char._ani._zone._node); +	addNode(&_animations, &_vm->_char._ani._zone);  	debugC(2, kDebugLocation, "changeLocation: new character added to the animation list");  	strcpy(_saveData1, list[0].c_str()); diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index a11e88391a..62268aa3c1 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -136,9 +136,6 @@ uint16		_introSarcData2 = 1;  // private stuff - - -  static Job	   *_jDrawInventory = NULL;  Job	   *_jDrawLabel = NULL;  Job	   *_jEraseLabel = NULL; @@ -146,12 +143,6 @@ Zone    *_hoverZone = NULL;  static Job	   *_jRunScripts = NULL; - -static Job		_jobs = { { NULL, NULL }, 0, 0, 0, NULL, 0 }; - - - -  Parallaction::Parallaction(OSystem *syst) :  	Engine(syst) { @@ -248,7 +239,7 @@ int Parallaction::init() {  	_vm->_char._ani._zone._label._cnv._data0 = NULL;  	_vm->_char._ani._zone._label._text = strdup("yourself"); -	addNode(&_animations, &_vm->_char._ani._zone._node); +	addNode(&_animations, &_vm->_char._ani._zone);  	_gfx = new Gfx(this);  	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); @@ -902,7 +893,7 @@ void removeNode(Node *n) {  } -Job *addJob(JobFn fn, void *parm, uint16 tag) { +Job *Parallaction::addJob(JobFn fn, void *parm, uint16 tag) {  	Job *v8 = (Job*)malloc(sizeof(Job)); @@ -914,41 +905,41 @@ Job *addJob(JobFn fn, void *parm, uint16 tag) {  	Job *v4 = &_jobs; -	while (v4->_node._next && ((Job*)(v4->_node._next))->_tag > tag) { -		v4 = (Job*)v4->_node._next; +	while (v4->_next && ((Job*)(v4->_next))->_tag > tag) { +		v4 = (Job*)v4->_next;  	} -	addNode(&v4->_node, &v8->_node); +	addNode(v4, v8);  	return v8;  } -void removeJob(Job *j) { +void Parallaction::removeJob(Job *j) { -	removeNode(&j->_node); +	removeNode(j);  	free(j);  	return;  } -void pauseJobs() { +void Parallaction::pauseJobs() {  	_engineFlags |= kEnginePauseJobs;  	return;  } -void resumeJobs() { +void Parallaction::resumeJobs() {  	_engineFlags &= ~kEnginePauseJobs;  	return;  } -void runJobs() { +void Parallaction::runJobs() {  	if (_engineFlags & kEnginePauseJobs) return; -	Job *j = (Job*)_jobs._node._next; +	Job *j = (Job*)_jobs._next;  	while (j) {  		debugC(3, kDebugJobs, "runJobs: %i", j->_tag);  		(*j->_fn)(j->_parm, j); -		Job *v4 = (Job*)j->_node._next; +		Job *v4 = (Job*)j->_next;  		if (j->_finished == 1)  			removeJob(j); @@ -974,7 +965,7 @@ void jobWaitRemoveJob(void *parm, Job *j) {  	count++;  	if (count == 2) {  		count = 0; -		removeJob(arg); +		_vm->removeJob(arg);  		_engineFlags &= ~kEngineMouse;  		j->_finished = 1;  	} diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 348ead7a87..00f382a68f 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -87,13 +87,17 @@ struct PARALLACTIONGameDescription;  struct Job;  typedef void (*JobFn)(void*, Job*); -struct Job { -	Node		_node; +struct Job : public Node { +//	Node		_node;  	uint16		_count; 		// # of executions left  	uint16		_tag;			// used for ordering  	uint16		_finished;  	void *		_parm;  	JobFn		_fn; + +public: +	Job() : _count(0), _tag(0), _finished(0), _parm(NULL), _fn(NULL) { +	}  };  extern Point _mousePos; @@ -166,11 +170,7 @@ void runDialogue(SpeakData*);  WalkNode *buildWalkPath(uint16 x, uint16 y); -Job *addJob(JobFn fn, void *parm, uint16 tag); -void removeJob(Job *j); -void runJobs(); -void pauseJobs(); -void resumeJobs(); +  void jobRemovePickedItem(void*, Job *j);  void jobDisplayDroppedItem(void*, Job *j); @@ -275,6 +275,11 @@ public:  	char   *parseDialogueString(Script &script);  	Dialogue   *parseDialogue(Script &script); +	Job *addJob(JobFn fn, void *parm, uint16 tag); +	void removeJob(Job *j); +	void pauseJobs(); +	void resumeJobs(); +	void runJobs();  public:  	int getGameType() const; @@ -334,6 +339,8 @@ protected:		// data  	int16 _keyDown; +	Job			_jobs; +  protected:		// members  	bool detectGame(void); diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp index d22cdb5a06..152dc68d24 100644 --- a/engines/parallaction/walk.cpp +++ b/engines/parallaction/walk.cpp @@ -32,7 +32,7 @@ namespace Parallaction {  uint16 walkFunc1(int16, int16, WalkNode *); -WalkNode _NULL_WALKNODE = { {NULL, NULL}, 0, 0 }; +WalkNode _NULL_WALKNODE();  static byte		*_buffer; @@ -117,7 +117,7 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  	v48->_x = to_x - _vm->_char._ani._cnv._width / 2; 		// target top left coordinates  	v48->_y = to_y - _vm->_char._ani._cnv._height; -	v48->_node._next = NULL; +	v48->_next = NULL;  	memcpy(v44, v48, sizeof(WalkNode));  	uint16 v38 = walkFunc1(to_x, to_y, v44); @@ -136,7 +136,7 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  	int16 _si = v48->_x;						// _si, _di: target top left coordinates  	int16 _di = v48->_y; -	addNode(&v58._node, &v48->_node); +	addNode(&v58, v48);  	WalkNode *_closest_node = NULL; @@ -182,7 +182,7 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  					_closest_node = location_node;  				} -				location_node = (WalkNode*)location_node->_node._next; +				location_node = (WalkNode*)location_node->_next;  			}  			if (_closest_node_found == 0) break; @@ -197,7 +197,7 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  			debugC(1, kDebugWalk, "adding walk node (%i, %i) to path", _newnode->_x, _newnode->_y); -			addNode(&v48->_node, &_newnode->_node); +			addNode(v48, _newnode);  			v48 = _newnode;  		} @@ -205,12 +205,12 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  		if (v38 != 0 && v34 > v38) {  			// no alternative path (gap?) -			freeNodeList(v58._node._next); +			freeNodeList(v58._next);  			debugC(1, kDebugWalk, "can't find a path node: rejecting partial path");  			return v44;  		} else { -			_si = ((WalkNode*)(v58._node._next))->_x; -			_di = ((WalkNode*)(v58._node._next))->_y; +			_si = ((WalkNode*)(v58._next))->_x; +			_di = ((WalkNode*)(v58._next))->_y;  			emptyList = false;  			_closest_node_found = 1;  		} @@ -221,15 +221,15 @@ WalkNode *buildWalkPath(uint16 x, uint16 y) {  	WalkNode* tmp = &v58;  	uint16 i = 1; -	while (tmp->_node._next) { +	while (tmp->_next) {  		debugC(1, kDebugWalk, "node %i: %i, %i", i, tmp->_x, tmp->_y); -		tmp = (WalkNode*)tmp->_node._next; +		tmp = (WalkNode*)tmp->_next;  		i++;  	}  	free(v44); -	return (WalkNode*)v58._node._next; +	return (WalkNode*)v58._next;  } @@ -325,7 +325,7 @@ void jobWalk(void *parm, Job *j) {  	_vm->_char._ani._zone.pos._oldposition._y = _di;  	if ((node->_x == _si) && (node->_y == _di)) { -		if (node->_node._next == NULL) { +		if (node->_next == NULL) {  			debugC(1, kDebugWalk, "jobWalk reached last node"); @@ -336,8 +336,8 @@ void jobWalk(void *parm, Job *j) {  		} -		WalkNode *tmp = (WalkNode*)node->_node._next; -		j->_parm = node->_node._next; +		WalkNode *tmp = (WalkNode*)node->_next; +		j->_parm = node->_next;  		free(node);  		debugC(1, kDebugWalk, "jobWalk moving to next node (%i, %i)", tmp->_x, tmp->_y); @@ -419,7 +419,7 @@ void jobWalk(void *parm, Job *j) {  		j->_finished = 1;  		checkDoor(); -		freeNodeList(&node->_node); +		freeNodeList(node);  	} else { diff --git a/engines/parallaction/zone.cpp b/engines/parallaction/zone.cpp index fd8237a1ec..8ce938be5f 100644 --- a/engines/parallaction/zone.cpp +++ b/engines/parallaction/zone.cpp @@ -44,7 +44,7 @@ Zone *findZone(const char *name) {  	while (v4) {  		if (!scumm_stricmp(name, v4->_label._text)) return v4; -		v4 = (Zone*)v4->_node._next; +		v4 = (Zone*)v4->_next;  	}  	Animation *a = findAnimation(name); @@ -70,7 +70,7 @@ void Parallaction::parseZone(Script &script, Node *list, char *name) {  	z->_label._text = (char*)malloc(strlen(name)+1);  	strcpy(z->_label._text, name); -	addNode(list, &z->_node); +	addNode(list, z);  	fillBuffers(script, true);  	while (scumm_stricmp(_tokens[0], "endzone")) { @@ -140,9 +140,9 @@ void freeZones(Node *list) {  			debugC(1, kDebugLocation, "freeZones preserving zone '%s'", z->_label._text); -			v8 = (Zone*)z->_node._next; -			removeNode(&z->_node); -			addNode(&helperNode, &z->_node); +			v8 = (Zone*)z->_next; +			removeNode(z); +			addNode(&helperNode, z);  			z = v8;  			continue;  		} @@ -190,7 +190,7 @@ void freeZones(Node *list) {  		_vm->_gfx->freeStaticCnv(&z->_label._cnv);  		freeCommands(z->_commands); -		z=(Zone*)z->_node._next; +		z=(Zone*)z->_next;  	} @@ -456,7 +456,7 @@ uint16 runZone(Zone *z) {  		if (z->_flags & kFlagsLocked) break;  		z->_flags ^= kFlagsClosed;  		if (z->u.door->_cnv._count == 0) break; -		addJob(jobToggleDoor, z, kPriority18 ); +		_vm->addJob(jobToggleDoor, z, kPriority18 );  		break;  	case kZoneHear: @@ -576,7 +576,7 @@ Zone *hitZone(uint32 type, uint16 x, uint16 y) {  	uint16 _si = x;  	Zone *z = (Zone*)_zones._next; -	for (; z; z = (Zone*)z->_node._next) { +	for (; z; z = (Zone*)z->_next) {  //		printf("Zone name: %s", z->_name);  		if (z->_flags & kFlagsRemove) continue; @@ -632,7 +632,7 @@ Zone *hitZone(uint32 type, uint16 x, uint16 y) {  	Animation *a = (Animation*)_animations._next;  	int16 _a, _b, _c, _d, _e, _f; -	for (; a; a = (Animation*)a->_zone._node._next) { +	for (; a; a = (Animation*)a->_zone._next) {  //		printf("Animation name: %s", a->_zone._name);  		_a = (a->_zone._flags & kFlagsActive) ? 1 : 0;															   // _a: active Animation diff --git a/engines/parallaction/zone.h b/engines/parallaction/zone.h index c7158e1821..6ae7c8a538 100644 --- a/engines/parallaction/zone.h +++ b/engines/parallaction/zone.h @@ -123,8 +123,8 @@ struct ZoneLabel {  	StaticCnv		_cnv;  }; -struct Zone { -	Node			_node; +struct Zone : public Node { +//	Node			_node;  	union {  		Rect		_limits;		// for zones  		struct {	// for animations @@ -163,8 +163,8 @@ enum InstructionFlags {  	kInstMaskedPut		= 8  }; -struct Instruction { -	Node	_node; +struct Instruction : public Node { +//	Node	_node;  	uint32	_index;  	uint32	_flags;  	union { @@ -178,8 +178,8 @@ struct Instruction {  }; -struct Program { -	Node			_node; +struct Program : public Node { +//	Node			_node;  	LocalVariable	*_locals;  	uint16			_loopCounter;  	Instruction 	*_ip; | 
