Skip to content

Instantly share code, notes, and snippets.

View kl0tl's full-sized avatar

Cyril Sobierajewicz kl0tl

View GitHub Profile
@kl0tl
kl0tl / reduceRight.macro.sjs
Last active August 29, 2015 14:03
Inline `Array#reduceRight`
macro inline_reduceRight {
rule { ($list:expr, function ($accumulator:ident, $value:ident, $index:ident, $ref:ident) {
$return:expr
}, $context:expr) } => {
(function ($ref) {
var $accumulator = $ref.pop();
for (var $index = $ref.length - 1; $index > -1; $index -= 1) {
var $value = $ref[$index];
@kl0tl
kl0tl / reduce.macro.sjs
Last active August 29, 2015 14:03
Inline `Array#reduce`
macro inline_reduce {
rule { ($list:expr, function ($accumulator:ident, $value:ident, $index:ident, $ref:ident) {
$return:expr
}, $context:expr) } => {
(function ($ref) {
var $accumulator = $ref.shift(), length = $ref.length;
for (var $index = 0; $index < length; $index += 1) {
var $value = $ref[$index];
@kl0tl
kl0tl / every.macro.sjs
Last active August 29, 2015 14:03
Inline `Array#every`
macro inline_every {
rule { ($list:expr, function ($value:ident, $index:ident, $ref:ident) {
$return:expr
}, $context:expr) } => {
(function ($ref) {
var length = $ref.length;
for (var $index = 0; $index < length; $index += 1) {
var $value = $ref[$index];
@kl0tl
kl0tl / some.macro.sjs
Last active August 29, 2015 14:03
Inline `Array#some`
macro inline_some {
rule { ($list:expr, function ($value:ident, $index:ident, $ref:ident) {
$return:expr
}, $context:expr) } => {
(function ($ref) {
var length = $ref.length;
for (var $index = 0; $index < length; $index += 1) {
var $value = $ref[$index];
@kl0tl
kl0tl / filter.macro.sjs
Last active August 29, 2015 14:03
Inline `Array#filter`
macro inline_filter {
rule { ($list:expr, function ($value:ident, $index:ident, $ref:ident) {
$return:expr
}, $context:expr) } => {
(function ($ref) {
var length = $ref.length, res = [];
for (var $index = 0; $index < length; $index += 1) {
var $value = $ref[$index];
@kl0tl
kl0tl / defn.macro.sjs
Created June 21, 2014 15:19
Shorthand method definition
/*
```
defn foo.method() => expression
defn bar.method() {}
```
*/
macro function_parameters {
@kl0tl
kl0tl / cascade.macro.sjs
Last active August 29, 2015 14:02
Cascade operator
/*
```
foo
..method()
..property = value
..method()
```
*/
@kl0tl
kl0tl / accessors.macro.sjs
Last active August 29, 2015 14:02
Shorthand get/set accessors notation
/*
```
var foo = {};
get foo.computed() {
...
}
set foo.computed() {
@kl0tl
kl0tl / create.macro.sjs
Last active August 29, 2015 14:02
Inline `Object.create`
let create = macro {
rule { Object. | (null) } => { Object.create(null); }
rule infix { Object. | ($proto:expr) } => {
(function (proto, ObjectConstructor) {
if (typeof proto !== 'object' && typeof proto !== 'function') {
throw new TypeError('Object prototype may only be an Object or null:' + proto);
}
if (proto === null) {
return ObjectConstructor.create(null);
@kl0tl
kl0tl / keys.macro.sjs
Created June 8, 2014 14:44
Inline `Object.keys` (seems slower with Firefox)
let keys = macro {
rule infix { Object. | () } => { Object.keys() }
rule infix { Object. | ($object:expr) } => {
(function (object) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var keys = [], proto = object.__proto__;