view editor.js @ 69:ba032565c7a5

Fix handling of variable style access to self and parent object messages defined with lambdas. Improve test case for this bug to include parent object access as well as self object access.
author Mike Pavone <pavone@retrodev.com>
date Sat, 14 Jul 2012 19:24:04 -0700
parents 18cec540238a
children 648659961e0e
line wrap: on
line source



object.prototype.toHTML = function(node) {
	var el = newEl('div', {
		className: 'object'
	});
	node.appendChild(el);
	for (var i in this.messages) {
		this.messages[i].toHTML(el);
	}
};

lambda.prototype.toHTML = function(node) {
	var astNode = this;
	var el = newEl('div', {
		className: 'lambda',
		onclick: function(event) {
			mainModule.lambdaClick(this, astNode, event);
		}
	});
	var args = newEl('div', {
		className: 'args'
	});
	for (var i in this.args) {
		this.args[i].toHTML(args);
	}
	var body = newEl('div', {
		className: 'lambdabody'
	});
	for (var i in this.expressions) {
		this.expressions[i].toHTML(body);
	}
	el.appendChild(args);
	el.appendChild(body);
	node.appendChild(el);
};

assignment.prototype.toHTML = function(node) {
	var base = newEl('div', {
		className: 'assignment'
	});
	var varName = newEl('span', {
		textContent: this.symbol.name + ' <-'
	});
	base.appendChild(varName);
	node.appendChild(base);
	this.expression.toHTML(base);
};

op.prototype.toHTML = function(node) {
	var base = newEl('span', {
		className: 'op'
	});
	this.left.toHTML(base);
	base.appendChild(newEl('span', {
		textContent: this.op,
		className: 'opname'
	}));
	this.right.toHTML(base);
	node.appendChild(base);
};

intlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'integer',
		textContent: this.val
	}));
};

floatlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'float',
		textContent: this.val
	}));
};

strlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'string',
		contentEditable: 'true',
		textContent: this.val
	}));
};

funcall.prototype.toHTML = function(node) {
	var astNode = this;
	var base = newEl('div', {
		className: 'funcall'
	});
	if (this.receiver) {
		this.receiver.toHTML(base);
	}
	var parts = this.name.split(':');
	for (var i in parts ) {
		if(parts[i]) {
			base.appendChild(newEl('span', {
				textContent: parts[i] + (this.receiver && parts.length == 1 ? '' : ':'),
				className: 'funpart',
				onclick: function(event) {
					mainModule.funClick(this, astNode, event);
				}}));
			if (this.args[i]) {
				this.args[i].toHTML(base);
			}
		}
	}
	for (; i < this.args.length; i++) {
		this.args[i].toHTML(base);
	}
	node.appendChild(base);
};

symbol.prototype.toHTML = function(node) {
	var astNode = this;
	node.appendChild(newEl('span', {
		className: 'symbol',
		textContent: this.name,
		onclick: function(event) {
			mainModule.symbolClick(this, astNode, event);
		}
	}));
}