diff compiler.js @ 20:bf03c9f0dd55

Initial work on proper property support
author Mike Pavone <pavone@retrodev.com>
date Sun, 25 Mar 2012 16:52:11 -0700
parents 59e83296e331
children 068d63627b16
line wrap: on
line diff
--- a/compiler.js	Sun Mar 25 16:11:19 2012 -0700
+++ b/compiler.js	Sun Mar 25 16:52:11 2012 -0700
@@ -142,6 +142,7 @@
 }
 
 funcall.prototype.populateSymbols = function(symbols) {
+	if(this.name == 'q:') { console.log('populateSymbols', this); }
 	if (this.name == 'foreign:') {
 		if ((this.args[0] instanceof lambda) || (this.args[0] instanceof object) || (this.args[0] instanceof symbol)) {
 			return;
@@ -149,9 +150,13 @@
 			throw new Error("Unexpected AST type for foreign:");
 		}
 	}
+	this.symbols = symbols;
 	for (var i in this.args) {
 		this.args[i].populateSymbols(symbols);
 	}
+	if (this.receiver) {
+		this.receiver.populateSymbols(symbols);
+	}
 }
 
 object.prototype.populateSymbols = function(symbols) {
@@ -186,10 +191,26 @@
 	}
 	this.symbol.populateSymbols(symbols);
 	this.expression.populateSymbols(symbols);
+	this.symbols = symbols;
 };
 assignment.prototype.populateSymbolsObject = function(symbols) {
+	console.log('populateSymbolsObject for assignment to ' + this.symbol.name)
 	symbols.defineMsg(this.symbol.name, this.expression);
+	if (!(this.expression instanceof lambda)) {
+		symbols.defineMsg(this.symbol.name + '!', new setter(null));
+	}
 	this.symbol.populateSymbols(symbols);
 	this.expression.populateSymbols(symbols);
+	this.symbols = symbols;
 };
 
+function setter(fun)
+{
+	this.fun = fun;
+}
+
+function getter(fun)
+{
+	this.fun = fun;
+}
+