Skip to content

Instantly share code, notes, and snippets.

@be5invis
Created May 1, 2012 09:10
Show Gist options
  • Save be5invis/2566627 to your computer and use it in GitHub Desktop.
Save be5invis/2566627 to your computer and use it in GitHub Desktop.
Moescript source map example
function F1$_(){
var Tp$_, Tq$_, T11$_, T12$_;
var ecSchemata$, item$, mktable$, t$;
//MoeMap// var ecSchemata = [yield: fYield, return: fReturn, bind: fBind]
//MoeMap// where
ecSchemata$ = (function F2$_(){
var fBind$, fReturn$, fYield$;
//MoeMap// fReturn = Enumerable function(x):
fReturn$ = Enumerable$({build:function(SCHEMATA$_){return function(x$){
var T4$_, T5$_, T6$_, T7$_;
function block_T1(T1$_){
//MoeMap// if(x != undefined)
if(!((x$ !== undefined)))return block_T2();
//MoeMap// enumeration.yield! x
T4$_ = (enumeration$);
T5$_ = ("yield");
T6$_ = (((T4$_)[T5$_]));
T7$_ = (x$);
return SCHEMATA$_.yield(T6$_.call(T4$_,T7$_,block_T8));
};
function block_T8(T8$_){
T8$_;
return block_T2();
};
function block_T2(T2$_){
return SCHEMATA$_["return"]();
};
return block_T1;
}}});
//MoeMap// fYield(x) = x
fYield$ = function F4$_(x$){
return x$;
};
//MoeMap// fBind = Enumerable function(list, callback):
fBind$ = Enumerable$({build:function(SCHEMATA$_){return function(list$, callback$){
var Tb$_, Tc$_, Tf$_, Tg$_, Tj$_, Tk$_, Tl$_, Tm$_;
var x$, y$;
function block_Ta(Ta$_){
//MoeMap// for(var x in list)
Tb$_=MOE_GET_ENUM(list$);
(Tc$_ = Tb$_()) ? ( x$ = Tc$_[0] ): undefined;
return block_Td();
};
function block_Td(Td$_){
if(!(Tc$_))return block_Te();
//MoeMap// for(var y in callback x)
Tf$_=MOE_GET_ENUM(callback$(x$));
(Tg$_ = Tf$_()) ? ( y$ = Tg$_[0] ): undefined;
return block_Th();
};
function block_Th(Th$_){
if(!(Tg$_))return block_Ti();
//MoeMap// enumeration.yield! y
Tj$_ = (enumeration$);
Tk$_ = ("yield");
Tl$_ = (((Tj$_)[Tk$_]));
Tm$_ = (y$);
return SCHEMATA$_.yield(Tl$_.call(Tj$_,Tm$_,block_Tn));
};
function block_Tn(Tn$_){
Tn$_;
(Tg$_ = Tf$_()) ? ( y$ = Tg$_[0] ): undefined;
return block_Th();
};
function block_Ti(Ti$_){
(Tc$_ = Tb$_()) ? ( x$ = Tc$_[0] ): undefined;
return block_Td();
};
function block_Te(Te$_){
return SCHEMATA$_["return"]();
};
return block_Ta;
}}});
//@ - MOEMAP -- undefined;
return {"yield": fYield$, "return": fReturn$, "bind": fBind$};
}());
//MoeMap// var mktable(G) =
mktable$ = function F6$_(G$){
var _$_THIS = this;
var _$_ARGS = MOE_SLICE(arguments, 0);
var f$;
//MoeMap// var f = G.build ecSchemata
f$ = G$.build(ecSchemata$);
//MoeMap// f.apply(this, arguments)()
//MoeMap//
//MoeMap// // simple usage
return f$.apply(_$_THIS, _$_ARGS)();
};
//MoeMap// for(var item in mktable {var x <- (1..100); x * 2 + 1}) trace item
//MoeMap//
//MoeMap// // complicated usage
Tp$_ = MOE_GET_ENUM(mktable$({build:function(SCHEMATA$_){return function(){
var Ts$_;
var x$;
function block_Tr(Tr$_){
Ts$_ = (((MOE_RANGE_EX(1, 100))));
return (SCHEMATA$_.bind(Ts$_,block_Tt));
};
function block_Tt(Tt$_){
(x$ = Tt$_);
return SCHEMATA$_["return"]((x$ * 2 + 1));
return SCHEMATA$_["return"]();
};
return block_Tr;
}}}));
while((Tq$_ = Tp$_())){
item$ = Tq$_[0];
trace$(item$);
};
//MoeMap// var t = mktable {var x <- (1...9); var y <- (x...9); x + ' * ' + y + ' = ' + x * y }
//MoeMap// // t = mktable [build: fBuild]
//MoeMap// // where fBuild(schemata)()() =
//MoeMap// // schemata.bind (1...9), (x) =>
//MoeMap// // schemata.bind (x...9), (y) =>
//MoeMap// // schemata.return (x + ' * ' + y + ' = ' + x * y)
t$ = mktable$({build:function(SCHEMATA$_){return function(){
var Tw$_, Ty$_;
var x$, y$;
function block_Tv(Tv$_){
Tw$_ = (((MOE_RANGE_INCL(1, 9))));
return (SCHEMATA$_.bind(Tw$_,block_Tx));
};
function block_Tx(Tx$_){
(x$ = Tx$_);
Ty$_ = (((MOE_RANGE_INCL(x$, 9))));
return (SCHEMATA$_.bind(Ty$_,block_Tz));
};
function block_Tz(Tz$_){
(y$ = Tz$_);
return SCHEMATA$_["return"]((x$ + " * " + y$ + " = " + x$ * y$));
return SCHEMATA$_["return"]();
};
return block_Tv;
}}});
//MoeMap// for(var item in t) trace item
T11$_ = MOE_GET_ENUM(t$);
while((T12$_ = T11$_())){
item$ = T12$_[0];
trace$(item$);
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment