Skip to content

Commit

Permalink
add some binders and inline a few more things
Browse files Browse the repository at this point in the history
  • Loading branch information
NotFound committed Nov 25, 2011
1 parent 8b9ad0f commit e1a409a
Showing 1 changed file with 34 additions and 23 deletions.
57 changes: 34 additions & 23 deletions winxedst2.winxed
Expand Up @@ -81,25 +81,46 @@ inline find_same(var src, var value) return var
return null;
}

function find_if(src, fun)
inline find_if(var src, var fun) return var
{
for (var item in src)
if (fun(item))
return item;
return null;
}

function bindfirst(fun, argfirst[slurpy])
{
return function(arglast[slurpy])
{
return fun(argfirst:[flat], arglast:[flat]);
};
}

function bindlast(fun, arglast[slurpy])
{
return function(argfirst[slurpy])
{
return fun(argfirst:[flat], arglast:[flat]);
};
}

function bindmethod(string name)
{
return function(obj, args[slurpy])
{
return obj.*name(args:[flat]);
};
}

function addprefix(string prefix)
{
return function (string str) { return prefix + str; };
}

inline clone_array(var src, var owner) return var
{
var dest = [];
for (var item in src)
push(dest, item.clone(owner));
return dest;
return transform(src, [], bindlast(bindmethod("clone"), owner));
}

//*********************************************
Expand Down Expand Up @@ -2171,8 +2192,7 @@ inline optimize_array(var arr)

inline emit_array(var e, var arr)
{
for (var item in arr)
item.emit(e);
for_each(arr, bindlast(bindmethod("emit"), e));
}

function parseDotted(tk)
Expand Down Expand Up @@ -2222,8 +2242,7 @@ function parseIdentifier(tk, unused)
function toIdentifierList(var tlist)
{
string list[];
for (var t in tlist)
push(list, t.getidentifier());
transform(tlist, list, bindmethod("getidentifier"));
return list;
}

Expand Down Expand Up @@ -2360,10 +2379,7 @@ class SimpleArgList
}
function getargvalues(var e)
{
var argreg = [];
for (var a in self.args)
push(argreg, a.emit_get(e));
return argreg;
return transform(self.args, [], bindlast(bindmethod("emit_get"), e));
}
function emitargs(var e)
{
Expand Down Expand Up @@ -10025,8 +10041,7 @@ class FunctionBase : BlockStatement
self.multi_sig = multi_sig_from_multi_modifier(self, multi);
}
}
for (var used in self.usednamespaces)
used.fixnamespaces();
for_each(self.usednamespaces, bindmethod("fixnamespaces"));
self.body = self.body.optimize();
return self;
}
Expand Down Expand Up @@ -10101,8 +10116,8 @@ class FunctionBase : BlockStatement
}
function freetemps()
{
for (var st in [ self.regstI, self.regstN, self.regstS, self.regstP ] )
st.freetemps();
for_each([ self.regstI, self.regstN, self.regstS, self.regstP ],
bindmethod("freetemps"));
}
function genlabel()
{
Expand Down Expand Up @@ -10187,8 +10202,7 @@ class FunctionBase : BlockStatement
e.say("\n.end # ", name, "\n");

// Local functions
for (var fn in self.localfun)
fn.emit(e);
for_each(self.localfun, bindlast(bindmethod("emit"), e));
}
}

Expand Down Expand Up @@ -10304,10 +10318,7 @@ class LocalFunctionStatement : FunctionBase
{
if (self.lexicals != null || self.usedlexicals != null)
return true;
for (var fn in self.localfun)
if (fn.needclosure())
return true;
return false;
return null != find_if(self.localfun, bindmethod("needclosure"));
}
function getsubid()
{
Expand Down

0 comments on commit e1a409a

Please sign in to comment.