changeset 21:6c8ae6b47ab5

Small improvements to property support and elimination of setP and getP functions as they are no longer needed
author Mike Pavone <pavone@retrodev.com>
date Sun, 25 Mar 2012 21:11:10 -0700
parents bf03c9f0dd55
children 40a85f135be5
files editor.tp jsbackend.js
diffstat 2 files changed, 19 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/editor.tp	Sun Mar 25 16:52:11 2012 -0700
+++ b/editor.tp	Sun Mar 25 21:11:10 2012 -0700
@@ -7,10 +7,6 @@
 removeClass <- foreign: :node className {}
 get <- foreign: :url onSuccess onFail onOther {}
 
-//JS interop helpers
-setP <- foreign: :object property val {}
-getP <- foreign: :object property {}
-
 //TP Parser
 parser <- foreign: #{
 	parse <- foreign: :str {}
@@ -38,7 +34,7 @@
 editFile <- :path {
 	get: path :request {
 		addClass: (q: "body") "editorMode"
-		src <- request getP: "responseText"
+		src <- request responseText
 		console log: src
 		ast <- parser parse: src
 		console log: ast
@@ -50,29 +46,32 @@
 main <- {
 	//bind handlers for file browser links
 	each: (qall: "a") :idx el {
-		el setP: "onclick" :event {
+		el onclick!: :event {
 			link <- foreign: this
-			editFile: (link getP: "href")
+			path <- link href
+			path <- path substr: (path indexOf: "/edit/") + 5
+			console log: path
+			editFile: path
 			foreign: false
 		}
 	}
 	
 	//bind handlers for editor buttons
 	each: (qall: ".controls li") :idx el {
-		el setP: "onclick" :event {
+		el onclick!: :event {
 			srcel <- (q: "#src")
-			srcel setP: "textContent" (srcel getP: "textContent") + (el getP: "textContent")
+			srcel textContent!: (srcel textContent) + (el textContent)
 		}
 	}
-	(q: "#ops_button") setP: "onclick" :event {
+	(q: "#ops_button") onclick!: :event {
 		addClass: (q: ".controls") "showops"
 	}
 	
-	(q: "#builtin_button") setP: "onclick" :event {
+	(q: "#builtin_button") onclick!: :event {
 		removeClass: (q: ".controls") "showops"
 	}
 	
-	path <- (window getP: "location") getP: "pathname"
+	path <- (window location) pathname
 	if: (path indexOf: "/edit/") = 0 {
 		editFile: (path substr: 5)
 	} else: {}
--- a/jsbackend.js	Sun Mar 25 16:52:11 2012 -0700
+++ b/jsbackend.js	Sun Mar 25 21:11:10 2012 -0700
@@ -16,17 +16,6 @@
 	throw new Error("can't make val into object");
 }
 
-function setP(o, p, val)
-{
-	o[p] = val;
-	return o;
-}
-
-function getP(o, p)
-{
-	return o[p];
-}
-
 op.prototype.toJS = function(isReceiver) {
 	var ret = '(' + this.left.toJS() +' '+ (this.op == '=' ? '==' : this.op) +' '+ this.right.toJS() + ')';
 	if (isReceiver) {
@@ -75,8 +64,6 @@
 	if (this.receiver) {
 		args.splice(0, 0, this.receiver);
 	}
-	console.log(this);
-	console.log('Checking symbol table for ' + name);
 	var funinfo = this.symbols.find(name);
 	if (!funinfo || funinfo.def instanceof setter) {
 		var receiver = args[0];
@@ -85,11 +72,16 @@
 			args[i] = args[i].toJS();
 		}
 		var rJS = receiver.toJS(true);
-		var jsName = (new symbol(name, this.symbols)).toJS();
 		if ((name[name.length-1] == '!' && args.length == 1) || (funinfo && funinfo.def instanceof setter)) {
-			return  '(' + rJS + '.' + jsName + ' = ' + args[0] + ', ' + rJS + ')'
+			console.log(name.substr(0, name.length-1));
+			return  '(' + rJS + '.' + (new symbol(name.substr(0, name.length-1), this.symbols)).toJS()  + ' = ' + args[0] + ', ' + rJS + ')'
 		} else {
-			return rJS + '.' + jsName + '(' + args.join(', ') + ')';
+			var callCode = rJS + '.' + (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')';
+			if (args.length == 0) {
+				return '(' + rJS + ' instanceof Function ? ' + callCode + ' : ' + callCode.substr(0, callCode.length-2) + ')';
+			} else {
+				return callCode;
+			}
 		}
 	}
 	var ret = '';