Skip to content

Commit

Permalink
added further unwrapping to bang operator.
Browse files Browse the repository at this point in the history
  • Loading branch information
weepy committed Mar 21, 2011
1 parent 2e8945a commit 250c2e0
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 54 deletions.
95 changes: 67 additions & 28 deletions expectations/bang
@@ -1,26 +1,16 @@
#at bang

compiles:
function(callback) {
callback(add!(3,4))
}
to:
function(callback) {
add(3,4, function(_bang) { callback(_bang) })
}

compiles:
function() {
sum = add!(3, 4)
ok(sum == 7)
}
create!
//x
}

to:
function() {
add(3, 4, function(_bang) { sum = _bang
ok(sum == 7) })
}

create(function() {
//x
}) }


compiles:
Expand All @@ -33,17 +23,7 @@ function() {
add(3, 4, function(_bang) { sum = _bang.length })
}

compiles:
function() {
create!
//x
}

to:
function() {
create(function() {
//x
}) }



Expand Down Expand Up @@ -125,7 +105,7 @@ function() {
}
to:
function() {
puzzle1.users("played", function(_bang) { _bang.length.should.eql(0) })
puzzle1.users("played", function(_bang) { _bang.length.should.eql(0) })
}


Expand All @@ -137,4 +117,63 @@ function() {
to:
function() {
count(function(_bang) { callback(_bang) })
}
}


compiles:
function() {
a.callback(a.count!)
}

to:
function() {
a.count(function(_bang) { a.callback(_bang) })
}


compiles:
function() {
sum = add!(3, 4)
ok(sum == 7)
}

to:
function() {
add(3, 4, function(_bang) { sum = _bang
ok(sum == 7) })
}

compiles:
function(callback) {
callback(add!(3,4))
}
to:
function(callback) {
add(3,4, function(_bang) { callback(_bang) })
}

compiles:
function() {
callback({a: count!})
}

to:
function() {
count(function(_bang) { callback({a: _bang}) })
}

compiles:
function() {
a(callback(count!))
}

to:
function() {
count(function(_bang) { a(callback(_bang)) })
}






56 changes: 32 additions & 24 deletions lib/plugins/bang.js
Expand Up @@ -4,7 +4,7 @@ var Token = require("../token");
var Token = require("../token");

module.exports = function(stream) {
// console.log("fun:", stream.collectText())

stream.each(function(token) {
if(!token.bang) return

Expand All @@ -24,16 +24,16 @@ module.exports = function(stream) {

var indent = token.indent();

var func = token.expressionStart()
var func = token.expressionStart(function() { if(this.text == ":") return true}) // break on operators
var func_before = func.prev
var args = "_bang"

var rbracket = lbracket.matching

var before_start = func.prev.expressionStart()
//var before_start = func.lineStart ()

var before_start = func.lineStart ()
var vars = []


if(func_before && func_before.assign) {
var vars = before_start.collectText(func_before.prev).split(", ")
var v = []
Expand All @@ -42,29 +42,33 @@ module.exports = function(stream) {
}
args = v.join(", ")
}

var before = before_start.remove(func.prev)
var start_after_fn = rbracket.next

debugger

// count brackets
var brackets = 0
before.each(function() {
if(this.lbracket) brackets++
if(this.rbracket) brackets--
})
var before = null

// console.log("brackets", brackets)
if(func == before_start) {
var brackets = 0
}
else {
var before = before_start.remove(func.prev)

before.each(function() {
if(this.lbracket) brackets++
if(this.rbracket) brackets--
})

}

var start_after_fn = rbracket.next
var end_after_fn = start_after_fn.find(function() {

if(this.lbracket) return this.matching.next
if(this.rbracket) {
if(brackets == 0) return true
else brackets--
}
})

// console.log("brackets", brackets)

var after
if(start_after_fn == end_after_fn) {
// debugger
Expand All @@ -74,19 +78,21 @@ module.exports = function(stream) {
} else {
after = start_after_fn.remove(end_after_fn.prev)
}

var before_text = before ? before.collectText() : ""

var before_text = before.collectText()

if(before_text.match(/^[ \n]*$/)) {
args = ""
func.before(before_text)
if(before_text) func.before(before_text)
}


if(lbracket.next == rbracket) {
num_func_args = 0
} else {
var func_args = lbracket.next.collectText(rbracket.prev)
var num_func_args = func_args.split(",").length
var num_func_args = func_args.split(",").length
}

var fn = token.findClosure()
Expand All @@ -101,10 +107,12 @@ module.exports = function(stream) {
}
})


if(args == "" && after && !after.myTextNoComments().match(/^[ \n]*$/)) {
args = "_bang"
}



if(vars.length > 1) {
var a = []
for(var i=0; i<vars.length ; i++) {
Expand All @@ -118,9 +126,9 @@ module.exports = function(stream) {



var fn = before_text + (after ? after.collectText() : "")
var funct = before_text + (after ? after.collectText() : "")

var body = Token.ize("function(" + (args) + ") { " + fn + " }")
var body = Token.ize("function(" + (args) + ") { " + funct + " }")

if(num_func_args > 0) rbracket.before(", ")

Expand Down
7 changes: 5 additions & 2 deletions lib/token.js
Expand Up @@ -273,8 +273,11 @@ base.fn.lineStart = function(breakFn) {
x = x.prev
y = x.prev

if(x.lbracket && x.curly && this.blockType != "object") return true
if(x.assign) return true
if(x.lbracket && x.curly && x.blockType != "object") {
console.log(x)
return true
}
// if(x.assign) return true
if(x.semi) {
return true
}
Expand Down

0 comments on commit 250c2e0

Please sign in to comment.