# HG changeset patch # User Mike Pavone # Date 1332735070 25200 # Node ID 6c8ae6b47ab5c19480b9740683f540c43bd4ae44 # Parent bf03c9f0dd55247548753705037febad4d8a9438 Small improvements to property support and elimination of setP and getP functions as they are no longer needed diff -r bf03c9f0dd55 -r 6c8ae6b47ab5 editor.tp --- 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: {} diff -r bf03c9f0dd55 -r 6c8ae6b47ab5 jsbackend.js --- 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 = '';