Skip to content

Instantly share code, notes, and snippets.

@geelen
Created March 23, 2014 06:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geelen/9719388 to your computer and use it in GitHub Desktop.
Save geelen/9719388 to your computer and use it in GitHub Desktop.
macro (->) {
rule infix { $assign:expr = ($arg (,) ...) | {$body ...} } => {
function($arg (,) ...) {
$body ...
}
}
rule infix { $assign:expr = ($arg (,) ...) | $value:expr } => {
function($arg (,) ...) {
return $value;
}
}
rule infix { $assign:expr = $param:ident | {$body ...} } => {
function($param) {
$body ...
}
}
rule infix { $assign:expr = $param:ident | $value:expr } => {
function($param) {
return $value;
}
}
rule infix { ($arg (,) ...) | {$body ...} } => {
function($arg (,) ...) {
$body ...
}
}
rule infix { ($arg (,) ...) | $value:expr } => {
function($arg (,) ...) {
return $value;
}
}
rule infix { $param:ident | {$body ...} } => {
function($param) {
$body ...
}
}
rule infix { $param:ident | $value:expr } => {
function($param) {
return $value;
}
}
rule { { $body ... } } => {
function($x) {
$body ...
}
}
rule { $value:expr } => {
function() {
return $value;
}
}
}
"SINGLE ARROW";
var A = -> {
this.data = 1;
}
var B = x -> {
this.data = 2;
}
var C = (x,y,z) -> {
this.data = 3;
}
var D = -> a;
var E = x -> a(x);
var F = (x,y) -> z(x,y);
A.a = -> y;
A.b = -> { z };
A.c = x -> y(x);
A.d = x -> { y(x) };
A.e = (x,y) -> z(x,y);
A.f = (x,y) -> { z(x,y) };
macro (=>) {
rule infix { $assign:expr = ($arg (,) ...) | {$body ...} } => {
$assign = function($arg (,) ...) {
$body ...
}.bind(this)
}
rule infix { $assign:expr = ($arg (,) ...) | $value:expr } => {
$assign = function($arg (,) ...) {
return $value;
}.bind(this)
}
rule infix { $assign:expr = $param:ident | {$body ...} } => {
$assign = function($param) {
$body ...
}.bind(this)
}
rule infix { $assign:expr = $param:ident | $value:expr } => {
$assign = function($param) {
return $value;
}.bind(this)
}
rule infix { ($arg (,) ...) | {$body ...} } => {
function($arg (,) ...) {
$body ...
}.bind(this)
}
rule infix { ($arg (,) ...) | $value:expr } => {
function($arg (,) ...) {
return $value;
}.bind(this)
}
rule infix { $param:ident | {$body ...} } => {
function($param) {
$body ...
}.bind(this)
}
rule infix { $param:ident | $value:expr } => {
function($param) {
return $value;
}.bind(this)
}
rule { { $body ... } } => {
function($x) {
$body ...
}.bind(this)
}
rule { $value:expr } => {
function() {
return $value;
}.bind(this)
}
}
"FAT ARROW";
var G = => {
this.data = 1;
}
var H = x => {
this.data = 2;
}
var I = (x,y,z) => {
this.data = 3;
}
var J = => a;
var K = x => a(x);
var L = (x,y) => z(x,y);
G.a = => y;
G.b = => { z };
G.c = x => y(x);
G.d = x => { y(x) };
G.e = (x,y) => z(x,y);
G.f = (x,y) => { z(x,y) };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment