+5
-8
@@ -17,3 +17,3 @@ (function() { | ||
| /* | ||
| * Scopejs v0.9.0 | ||
| * Scopejs v0.10.1 | ||
| * http://scopejs.org | ||
@@ -119,5 +119,2 @@ * | ||
| })()).join('') || ""; | ||
| if (typeof this.set === "function") { | ||
| this.set('__context', context); | ||
| } | ||
| return this._eval.call(context, locals + literals + literalize_(expr)); | ||
@@ -173,5 +170,2 @@ }; | ||
| this.parent = this.options.parent; | ||
| if (!this.parent) { | ||
| this.options.locals.__context = null; | ||
| } | ||
| names = []; | ||
@@ -220,3 +214,3 @@ for (_j = 0, _len2 = varTypes.length; _j < _len2; _j++) { | ||
| x = exports[_n]; | ||
| this[x] = C.makeGetter(x)(); | ||
| this[x] = C.makeGetter(x).call(this); | ||
| } | ||
@@ -227,2 +221,5 @@ } | ||
| Scope.prototype.run = Scope.run; | ||
| Scope.prototype.self = function(f) { | ||
| return f.call(this); | ||
| }; | ||
| Scope.prototype.set = function(name, val, isLiteral) { | ||
@@ -229,0 +226,0 @@ var obj, _len, _ref, _results; |
| <!DOCTYPE html> <html> <head> <title>scope.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> scope.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> <p>File header.</p> | ||
| <h1>#</h1> </td> <td class="code"> <div class="highlight"><pre> <span class="o">*</span> <span class="nx">Scopejs</span> <span class="nx">v0</span><span class="p">.</span><span class="mf">9.0</span> | ||
| <h1>#</h1> </td> <td class="code"> <div class="highlight"><pre> <span class="o">*</span> <span class="nx">Scopejs</span> <span class="nx">v0</span><span class="p">.</span><span class="mf">10.1</span> | ||
| <span class="o">*</span> <span class="nx">http</span><span class="o">:</span><span class="err">//scopejs.org</span> | ||
@@ -9,7 +9,20 @@ <span class="o">*</span> | ||
| Visit <a href="http://scopejs.org">scopejs.org</a> for more information.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <h2>Helpers</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>isString and isFn are borrowed from underscorejs by way of CoffeeScript</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">isString = </span><span class="nf">(x) -></span> <span class="o">!!</span><span class="p">(</span><span class="nx">x</span> <span class="o">is</span> <span class="s1">''</span> <span class="o">or</span> <span class="p">(</span><span class="nx">x</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">charCodeAt</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">substr</span><span class="p">))</span> | ||
| <span class="nv">isFn = </span><span class="nf">(x) -></span> <span class="o">!!</span><span class="p">(</span><span class="nx">x</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">constructor</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">call</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">apply</span><span class="p">)</span> </pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Extend object <code>x</code> with the properties of all objects in <code>more</code></p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">extend = </span><span class="nf">(x, more...) -></span> <span class="p">(</span><span class="nx">x</span><span class="p">[</span><span class="nx">k</span><span class="p">]</span> <span class="o">=</span> <span class="nx">v</span> <span class="k">for</span> <span class="nx">k</span><span class="p">,</span><span class="nx">v</span> <span class="k">of</span> <span class="nx">o</span><span class="p">)</span> <span class="k">for</span> <span class="nx">o</span> <span class="k">in</span> <span class="nx">more</span><span class="p">;</span> <span class="nx">x</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <h2>class Scope</h2> | ||
| <span class="nv">isFn = </span><span class="nf">(x) -></span> <span class="o">!!</span><span class="p">(</span><span class="nx">x</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">constructor</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">call</span> <span class="o">and</span> <span class="nx">x</span><span class="p">.</span><span class="nx">apply</span><span class="p">)</span> </pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Extend object <code>x</code> with the properties of all objects in <code>more</code></p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">extend = </span><span class="nf">(x, more...) -></span> <span class="p">(</span><span class="nx">x</span><span class="p">[</span><span class="nx">k</span><span class="p">]</span> <span class="o">=</span> <span class="nx">v</span> <span class="k">for</span> <span class="nx">k</span><span class="p">,</span><span class="nx">v</span> <span class="k">of</span> <span class="nx">o</span><span class="p">)</span> <span class="k">for</span> <span class="nx">o</span> <span class="k">in</span> <span class="nx">more</span><span class="p">;</span> <span class="nx">x</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>CoffeeScript runtime helpers</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.COFFEESCRIPT_HELPERS = COFFEESCRIPT_HELPERS =</span> | ||
| <span class="nv">__slice: </span><span class="nb">Array</span><span class="o">::</span><span class="nx">slice</span> | ||
| <span class="nv">__bind: </span><span class="nf">(fn, me) -></span> <span class="o">-></span> <span class="nx">fn</span><span class="p">.</span><span class="nx">apply</span> <span class="nx">me</span><span class="p">,</span> <span class="nx">arguments</span> | ||
| <span class="nv">__indexOf: </span><span class="nb">Array</span><span class="o">::</span><span class="nx">indexOf</span> <span class="o">or</span> <span class="nf">(item) -></span> | ||
| <span class="k">return</span> <span class="nx">i</span> <span class="k">if</span> <span class="nx">x</span> <span class="o">is</span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="err">@</span> | ||
| <span class="nv">__hasProp: </span><span class="nb">Object</span><span class="o">::</span><span class="nx">hasOwnProperty</span> | ||
| <span class="nv">__extends: </span><span class="nf">(child, parent) -></span> | ||
| <span class="k">for</span> <span class="nx">key</span> <span class="k">of</span> <span class="nx">parent</span> | ||
| <span class="nx">child</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">parent</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="k">if</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">'__hasProp'</span><span class="p">).</span><span class="nx">call</span> <span class="nx">parent</span><span class="p">,</span> <span class="nx">key</span> | ||
| <span class="nv">ctor = </span><span class="o">-></span> <span class="vi">@constructor = </span><span class="nx">child</span> | ||
| <span class="nv">ctor:: = </span><span class="nx">parent</span><span class="p">.</span><span class="nx">prototype</span> | ||
| <span class="nv">child.prototype = </span><span class="k">new</span> <span class="nx">ctor</span> | ||
| <span class="nv">child.__super__ = parent::</span> | ||
| <span class="nx">child</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <h2>class Scope</h2> | ||
| <p>This class represents a lexical scope.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.Scope = </span><span class="k">class</span> <span class="nx">Scope</span> | ||
| </pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>The 'scoped eval' literal.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">EVAL_LITERAL = </span><span class="s2">"(function(__expr){return eval(__expr)})"</span> | ||
| <span class="nv">literal: </span><span class="o">-></span> <span class="nx">EVAL_LITERAL</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <h3>Class methods</h3> </td> <td class="code"> <div class="highlight"><pre> </pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <h4>Scope.eval(expr)</h4> | ||
| </pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>The 'scoped eval' literal.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">EVAL_LITERAL = </span><span class="s2">"(function(__expr){return eval(__expr)})"</span> | ||
| </pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <h3>Class methods</h3> </td> <td class="code"> <div class="highlight"><pre> </pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <h4>Scope.eval(expr)</h4> | ||
@@ -28,36 +41,46 @@ <p>A function to eval a given expression safely wrapped in a function | ||
| <p><code>Scope.eval</code> provides the outer scope for all scoped evals.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@eval = </span><span class="o">`</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">eval</span><span class="p">)(</span><span class="nx">EVAL_LITERAL</span><span class="p">)</span><span class="o">`</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <h4>Scope.literalize(x)</h4> | ||
| <p><code>Scope.eval</code> provides the outer scope for all scoped evals.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@_eval = </span><span class="o">`</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">eval</span><span class="p">)(</span><span class="nx">EVAL_LITERAL</span><span class="p">)</span><span class="o">`</span> | ||
| </pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <h4>Scope::eval(context, expr)</h4> | ||
| <p>Return a literal expression for <code>x</code></p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@literalize = </span><span class="nv">literalize = </span><span class="nf">(x) -></span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>A string must already be an expression.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="nx">isString</span> <span class="nx">x</span> <span class="k">then</span> <span class="nx">x</span> | ||
| <span class="k">else</span> <span class="k">if</span> <span class="nx">isFn</span> <span class="nx">x</span> </pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>'Decompile' a function using <code>Function::toString</code> (where supported)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">x = </span><span class="nx">x</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Remove name from named function</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">x = </span><span class="nx">x</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/function[^\(]*\(/</span><span class="p">,</span> <span class="s2">"function ("</span> | ||
| <span class="s2">"(#{x})"</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Otherwise, <code>x</code> must literalize itself.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">else</span> <span class="nx">x</span><span class="p">.</span><span class="nx">literal</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">¶</a> </div> <h4>Class properties intended to be overridden.</h4> </td> <td class="code"> <div class="highlight"><pre> </pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">¶</a> </div> <p>These locals are defined in the root scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@rootLocals =</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>CoffeeScript runtime helpers</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">__slice: </span><span class="nb">Array</span><span class="o">::</span><span class="nx">slice</span> | ||
| <span class="nv">__bind: </span><span class="nf">(fn, me) -></span> <span class="o">-></span> <span class="nx">fn</span><span class="p">.</span><span class="nx">apply</span> <span class="nx">me</span><span class="p">,</span> <span class="nx">arguments</span> | ||
| <span class="nv">__indexOf: </span><span class="nb">Array</span><span class="o">::</span><span class="nx">indexOf</span> <span class="o">or</span> <span class="nf">(item) -></span> | ||
| <span class="k">return</span> <span class="nx">i</span> <span class="k">if</span> <span class="nx">x</span> <span class="o">is</span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="err">@</span> | ||
| <span class="nv">__hasProp: </span><span class="nb">Object</span><span class="o">::</span><span class="nx">hasOwnProperty</span> | ||
| <span class="nv">__extends: </span><span class="nf">(child, parent) -></span> | ||
| <span class="k">for</span> <span class="nx">key</span> <span class="k">of</span> <span class="nx">parent</span> | ||
| <span class="nx">child</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">parent</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="k">if</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">'__hasProp'</span><span class="p">).</span><span class="nx">call</span> <span class="nx">parent</span><span class="p">,</span> <span class="nx">key</span> | ||
| <span class="nv">ctor = </span><span class="o">-></span> <span class="vi">@constructor = </span><span class="nx">child</span> | ||
| <span class="nv">ctor:: = </span><span class="nx">parent</span><span class="p">.</span><span class="nx">prototype</span> | ||
| <span class="nv">child.prototype = </span><span class="k">new</span> <span class="nx">ctor</span> | ||
| <span class="nv">child.__super__ = parent::</span> | ||
| <span class="nx">child</span> | ||
| </pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>List of reserved variable names.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@reserved = </span><span class="p">[</span><span class="s1">'__expr'</span><span class="p">]</span> | ||
| </pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>Create a getters / setters for the given name.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@makeGetter = </span><span class="nf">(name) -></span> <span class="o">-></span> <span class="nx">@get</span> <span class="nx">name</span> | ||
| <p>Evaluate an expression in this scope.</p> | ||
| <p>The optional <code>context</code> parameter serves as the value of <code>this</code> | ||
| for the eval of <code>expr</code>.</p> | ||
| <p><code>context.locals</code> may define additional locals visible only to <code>expr</code>.</p> | ||
| <h5>Argument Decompilation</h5> | ||
| <p>The <code>expr</code> argument need not be a string: it can also be a function or | ||
| an object that defines a <code>literalize</code> method. See <code>Scope.literalize</code>. | ||
| This means that you can recompile a function in another scope like this:</p> | ||
| <pre><code>var getXFromScope = scope.eval(function(){return x}); | ||
| log(getXFromScope()); // Prints the current value of x in the scope. | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@eval = </span><span class="nf">(context, expr, literalize_ = literalize) -></span> </pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Normalize arguments</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">[</span><span class="nx">context</span><span class="p">,</span> <span class="nx">expr</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="kc">null</span><span class="p">,</span> <span class="nx">context</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">expr</span><span class="o">?</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Code to declare and set locals</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">locals = </span><span class="nx">context</span><span class="o">?</span><span class="p">.</span><span class="nx">locals</span> <span class="o">and</span> <span class="p">(</span><span class="k">for</span> <span class="nx">name</span> <span class="k">of</span> <span class="nx">context</span><span class="p">.</span><span class="nx">locals</span> | ||
| <span class="s2">"var #{name} = this.locals.#{name};\n"</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span> <span class="o">or</span> <span class="s2">""</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Code to declare and set literals</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">literals = </span><span class="nx">context</span><span class="o">?</span><span class="p">.</span><span class="nx">literals</span> <span class="o">and</span> <span class="p">(</span><span class="k">for</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">context</span><span class="p">.</span><span class="nx">literals</span> | ||
| <span class="s2">"var #{name} = #{literalize val};\n"</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span> <span class="o">or</span> <span class="s2">""</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">¶</a> </div> <p>eval expr in the context of locals and literals</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@_eval</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">locals</span> <span class="o">+</span> <span class="nx">literals</span> <span class="o">+</span> <span class="nx">literalize_</span> <span class="nx">expr</span> | ||
| </pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">¶</a> </div> <h4>Scope::run(ctx, fn)</h4> | ||
| <p>'Run' a function in this scope. i.e., <code>literalize</code>, <code>eval</code> and <code>call</code> | ||
| the given function within this scope.</p> | ||
| <pre><code>log(scope.run(function(){return x})); // Prints the current value of x in the scope. | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@run = </span><span class="nf">(ctx, fn) -></span> <span class="nx">@eval</span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">fn</span><span class="p">,</span> <span class="nf">(fn) -></span> <span class="s2">"#{literalize fn}.call(this)"</span> | ||
| </pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <h4>Scope.literalize(x)</h4> | ||
| <p>Return a literal expression for <code>x</code></p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@literalize = </span><span class="nv">literalize = </span><span class="nf">(x) -></span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>A string must already be an expression.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="nx">isString</span> <span class="nx">x</span> <span class="k">then</span> <span class="nx">x</span> | ||
| <span class="k">else</span> <span class="k">if</span> <span class="nx">isFn</span> <span class="nx">x</span> </pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>'Decompile' a function using <code>Function::toString</code> (where supported)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">x = </span><span class="nx">x</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">¶</a> </div> <p>Remove name from named function</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">x = </span><span class="nx">x</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/function[^\(]*\(/</span><span class="p">,</span> <span class="s2">"function ("</span> | ||
| <span class="s2">"(#{x})"</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Otherwise, <code>x</code> must literalize itself.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">else</span> <span class="nx">x</span><span class="p">.</span><span class="nx">literal</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <h4>Class properties intended to be overridden.</h4> </td> <td class="code"> <div class="highlight"><pre> </pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>List of reserved variable names.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@reserved = </span><span class="p">[</span><span class="s1">'__expr'</span><span class="p">]</span> | ||
| </pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>Create a getters / setters for the given name.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@makeGetter = </span><span class="nf">(name) -></span> <span class="o">-></span> <span class="nx">@get</span> <span class="nx">name</span> | ||
| <span class="vi">@makeSetter = </span><span class="nf">(name) -></span> <span class="nf">(val) -></span> <span class="nx">@set</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">val</span><span class="p">,</span> <span class="kc">false</span> | ||
| </pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">¶</a> </div> <h4>Class initializer</h4> | ||
| <span class="vi">@root = </span><span class="k">new</span> <span class="err">@</span> <span class="p">{</span><span class="nv">locals: </span><span class="nx">COFFEESCRIPT_HELPERS</span><span class="p">}</span> | ||
| </pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <h4>Scope.create(options)</h4> | ||
| <p>Call this function at the end of your Scope subclass to | ||
| create global and root scopes for your class.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@initialize = </span><span class="o">-></span> | ||
| </pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Create a global scope for this class</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@global = </span><span class="k">new</span> <span class="err">@</span><span class="p">()</span> | ||
| </pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>Create a root scope for this class. | ||
| All scopes may extend this scope. | ||
| It contains the rootLocals.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@root = </span><span class="nx">@global</span><span class="p">.</span><span class="nx">extend</span> <span class="nv">locals: </span><span class="nx">@rootLocals</span> | ||
| </pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <h4>Scope.create(options)</h4> | ||
| <p>Returns a scope that extends the root scope | ||
| of this class. </p> | ||
| <p>See <code>constructor</code> for description of options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@create = </span><span class="nf">(options) -></span> <span class="nx">@root</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">options</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <h4>constructor(options)</h4> | ||
| <p>See <code>constructor</code> for description of options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@create = </span><span class="nf">(options = {}) -></span> <span class="nx">@root</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">options</span> | ||
| </pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <h4>constructor(options)</h4> | ||
@@ -97,10 +120,10 @@ <p>Called with no arguments: creates a global scope.</p> | ||
| log(scope.eval('foo')); // 3 | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">constructor: </span><span class="nf">(@options = {}) -></span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <p>The types of variables in options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">varTypes = </span><span class="p">[</span><span class="s1">'locals'</span><span class="p">,</span> <span class="s1">'literals'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <p>Normalize options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@options</span><span class="p">[</span><span class="nx">k</span><span class="p">]</span> <span class="o">?=</span> <span class="p">{}</span> <span class="k">for</span> <span class="nx">k</span> <span class="k">in</span> <span class="nx">varTypes</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-28">¶</a> </div> <h5>The <code>__this</code> local variable</h5> | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">constructor: </span><span class="nf">(@options = {}) -></span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-28">¶</a> </div> <p>The types of variables in options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">varTypes = </span><span class="p">[</span><span class="s1">'locals'</span><span class="p">,</span> <span class="s1">'literals'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-29">¶</a> </div> <p>Normalize options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@options</span><span class="p">[</span><span class="nx">k</span><span class="p">]</span> <span class="o">?=</span> <span class="p">{}</span> <span class="k">for</span> <span class="nx">k</span> <span class="k">in</span> <span class="nx">varTypes</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">¶</a> </div> <h5>The <code>__this</code> local variable</h5> | ||
| <p>Within the target scope, <code>__this</code> refers to the Scope object for that | ||
| target scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@options.locals.__this = </span><span class="err">@</span> | ||
| <span class="p">{</span><span class="nx">@parent</span><span class="p">}</span> <span class="o">=</span> <span class="nx">@options</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-29">¶</a> </div> <p>Register variable names declared in options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">names = </span><span class="p">[]</span> | ||
| <span class="p">{</span><span class="nx">@parent</span><span class="p">}</span> <span class="o">=</span> <span class="nx">@options</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">¶</a> </div> <p>Register variable names declared in options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">names = </span><span class="p">[]</span> | ||
| <span class="nx">names</span><span class="p">.</span><span class="nx">push</span> <span class="nx">name</span> <span class="k">for</span> <span class="nx">name</span> <span class="k">of</span> <span class="nx">@options</span><span class="p">[</span><span class="nx">k</span><span class="p">]</span> <span class="k">for</span> <span class="nx">k</span> <span class="k">in</span> <span class="nx">varTypes</span> | ||
| <span class="k">throw</span> <span class="s1">'Reserved'</span> <span class="k">for</span> <span class="nx">n</span> <span class="k">in</span> <span class="nx">names</span> <span class="k">when</span> <span class="nx">n</span> <span class="k">in</span> <span class="nx">@constructor</span><span class="p">.</span><span class="nx">reserved</span> | ||
| <span class="vi">@names = </span><span class="nx">names</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">@parent</span><span class="o">?</span><span class="p">.</span><span class="nx">names</span> <span class="o">or</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">¶</a> </div> <p>Compile the 'scoped eval'</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@_eval = </span><span class="nx">@parent</span><span class="o">?</span><span class="p">.</span><span class="nb">eval</span><span class="p">(</span><span class="nx">@options</span><span class="p">,</span> <span class="err">@</span><span class="p">)</span> <span class="o">or</span> <span class="nx">Scope</span><span class="p">.</span><span class="nb">eval</span> </pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">¶</a> </div> <h5>Exports</h5> | ||
| <span class="vi">@names = </span><span class="nx">names</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">@parent</span><span class="o">?</span><span class="p">.</span><span class="nx">names</span> <span class="o">or</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-32">¶</a> </div> <p>Compile the 'scoped eval'</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@_eval = </span><span class="p">(</span><span class="nx">@parent</span> <span class="o">or</span> <span class="nx">Scope</span><span class="p">).</span><span class="nb">eval</span> <span class="nx">@options</span><span class="p">,</span> <span class="nx">EVAL_LITERAL</span></pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-33">¶</a> </div> <h5>Exports</h5> | ||
@@ -128,45 +151,9 @@ <p>Exports allow direct access to locals inside the scope via | ||
| <span class="nx">@__defineSetter__</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">C</span><span class="p">.</span><span class="nx">makeSetter</span> <span class="nx">x</span> | ||
| <span class="k">else</span> </pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-32">¶</a> </div> <p>In environments where <code>__defineGetter__</code> and <code>__defineSetter__</code> | ||
| are not supported, <code>@[name]</code> is set once when the scope is created.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="err">@</span><span class="p">[</span><span class="nx">x</span><span class="p">]</span> <span class="o">=</span> <span class="nx">C</span><span class="p">.</span><span class="nx">makeGetter</span><span class="p">(</span><span class="nx">x</span><span class="p">)()</span> <span class="k">for</span> <span class="nx">x</span> <span class="k">in</span> <span class="nx">exports</span> | ||
| <span class="k">else</span> </pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-34">¶</a> </div> <p>In environments where <code>__defineGetter__</code> and <code>__defineSetter__</code> | ||
| are not supported, <code>@[name]</code> is set once when the scope is created.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="err">@</span><span class="p">[</span><span class="nx">x</span><span class="p">]</span> <span class="o">=</span> <span class="nx">C</span><span class="p">.</span><span class="nx">makeGetter</span><span class="p">(</span><span class="nx">x</span><span class="p">).</span><span class="nx">call</span> <span class="err">@</span> <span class="k">for</span> <span class="nx">x</span> <span class="k">in</span> <span class="nx">exports</span> | ||
| </pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-33">¶</a> </div> <p>The current value of <code>this</code> inside the eval.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">context: </span><span class="kc">null</span> | ||
| </pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-34">¶</a> </div> <h4>Scope::eval(context, expr)</h4> | ||
| </pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-35">¶</a> </div> <p>See Scope.eval</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nb">eval</span><span class="o">:</span> <span class="nx">@eval</span> | ||
| </pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-36">¶</a> </div> <p>See Scope.run</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">run: </span><span class="nx">@run</span> | ||
| </pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-37">¶</a> </div> <p>Call <code>f</code> with this scope as the context.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">self: </span><span class="nf">(f) -></span> <span class="nx">f</span><span class="p">.</span><span class="nx">call</span> <span class="err">@</span></pre></div> </td> </tr> <tr id="section-38"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-38">¶</a> </div> <h4>Scope::set(name, val, isLiteral)</h4> | ||
| <p>Evaluate an expression in this scope.</p> | ||
| <p>The optional <code>context</code> parameter serves as the value of <code>this</code> | ||
| for the eval of <code>expr</code>.</p> | ||
| <p><code>context.locals</code> may define additional locals visible only to <code>expr</code>.</p> | ||
| <h5>Argument Decompilation</h5> | ||
| <p>The <code>expr</code> argument need not be a string: it can also be a function or | ||
| an object that defines a <code>literalize</code> method. See <code>Scope.literalize</code>. | ||
| This means that you can recompile a function in another scope like this:</p> | ||
| <pre><code>var getXFromScope = scope.eval(function(){return x}); | ||
| log(getXFromScope()); // Prints the current value of x in the scope. | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nb">eval</span><span class="o">:</span> <span class="nf">(@context, expr) -></span> | ||
| <span class="p">[</span><span class="nx">@context</span><span class="p">,</span> <span class="nx">expr</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{},</span> <span class="nx">@context</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">expr</span> | ||
| <span class="nv">locals = </span> | ||
| <span class="k">if</span> <span class="nx">@context</span><span class="p">.</span><span class="nx">locals</span> <span class="k">then</span> <span class="p">(</span><span class="k">for</span> <span class="nx">name</span> <span class="k">of</span> <span class="nx">@context</span><span class="p">.</span><span class="nx">locals</span> | ||
| <span class="s2">"var #{name} = this.locals.#{name};\n"</span><span class="p">).</span><span class="nx">join</span> <span class="s1">''</span> | ||
| <span class="k">else</span> <span class="s2">""</span> | ||
| <span class="nv">literals = </span> | ||
| <span class="k">if</span> <span class="nx">@context</span><span class="p">.</span><span class="nx">literals</span> <span class="k">then</span> <span class="p">(</span><span class="k">for</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@context</span><span class="p">.</span><span class="nx">literals</span> | ||
| <span class="s2">"var #{name} = #{literalize val};\n"</span><span class="p">).</span><span class="nx">join</span> <span class="s1">''</span> | ||
| <span class="k">else</span> <span class="s2">""</span> | ||
| <span class="nx">@_eval</span><span class="p">.</span><span class="nx">call</span> <span class="nx">@context</span><span class="p">,</span> <span class="nx">locals</span> <span class="o">+</span> <span class="nx">literals</span> <span class="o">+</span> <span class="nx">literalize</span> <span class="nx">expr</span> | ||
| </pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-35">¶</a> </div> <h4>Scope::run(ctx, fn)</h4> | ||
| <p>'Run' a function in this scope. i.e., <code>literalize</code>, <code>eval</code> and <code>call</code> | ||
| the given function within this scope.</p> | ||
| <pre><code>log(scope.run(function(){return x})); // Prints the current value of x in the scope. | ||
| </code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">run: </span><span class="nf">(ctx, fn) -></span> | ||
| <span class="p">[</span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">fn</span><span class="p">]</span> <span class="o">=</span> <span class="p">[{},</span> <span class="nx">ctx</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">fn</span> | ||
| <span class="nx">@eval</span> <span class="nx">ctx</span><span class="p">,</span> <span class="s2">"#{literalize fn}.call(this)"</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-36">¶</a> </div> <h4>Scope::set(name, val, isLiteral)</h4> | ||
| <p>Set local variable to value. | ||
@@ -181,11 +168,11 @@ <code>if isLiteral then literalize val</code>.</p> | ||
| <span class="nx">@set</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">val</span><span class="p">,</span> <span class="nx">isLiteral</span> <span class="k">for</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">val</span> <span class="k">in</span> <span class="nx">obj</span> | ||
| </pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-37">¶</a> </div> <h4>Scope::get(name)</h4> | ||
| </pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-39">¶</a> </div> <h4>Scope::get(name)</h4> | ||
| <p>Get a local value from this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">get: </span><span class="nf">(name) -></span> <span class="nx">@_eval</span> <span class="nx">name</span></pre></div> </td> </tr> <tr id="section-38"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-38">¶</a> </div> <h4>Scope::extend(options)</h4> | ||
| <p>Get a local value from this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">get: </span><span class="nf">(name) -></span> <span class="nx">@_eval</span> <span class="nx">name</span></pre></div> </td> </tr> <tr id="section-40"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-40">¶</a> </div> <h4>Scope::extend(options)</h4> | ||
| <p>Create a new scope that extends this one, with the given options. | ||
| See <code>constructor</code> for a list of options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">extend: </span><span class="nf">(options = {}) -></span> <span class="k">new</span> <span class="nx">@constructor</span> <span class="nx">extend</span> <span class="nx">options</span><span class="p">,</span> <span class="nv">parent: </span><span class="err">@</span> | ||
| </pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-39">¶</a> </div> <p>Initialize this class</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@initialize</span><span class="p">()</span> | ||
| See <code>constructor</code> for a list of options.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">extend: </span><span class="nf">(options = {}) -></span> | ||
| <span class="k">new</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="k">class</span> <span class="o">or</span> <span class="nx">@constructor</span><span class="p">)</span> <span class="nx">extend</span> <span class="nx">options</span><span class="p">,</span> <span class="nv">parent: </span><span class="err">@</span> | ||
| </pre></div> </td> </tr> </tbody> </table> </div> </body> </html> |
@@ -6,3 +6,3 @@ # ScopeJS | ||
| Latest version: [0.10.0](http://github.com/dbrans/scope) | ||
| Latest version: [0.10.1](http://github.com/dbrans/scope) | ||
@@ -9,0 +9,0 @@ ## Table of Contents |
+2
-2
@@ -12,4 +12,2 @@ <!DOCTYPE html> | ||
| <p><em>Pimp your Lexical Scopes.</em></p> | ||
| <p>A JavaScript library for defining and working with lexical scopes.</p> | ||
@@ -19,2 +17,4 @@ | ||
| <p>Latest version: <a href="http://github.com/dbrans/scope">0.10.1</a></p> | ||
| <h2>Table of Contents</h2> | ||
@@ -21,0 +21,0 @@ |
+5
-8
| (function() { | ||
| /* | ||
| * Scopejs v0.9.0 | ||
| * Scopejs v0.10.1 | ||
| * http://scopejs.org | ||
@@ -104,5 +104,2 @@ * | ||
| })()).join('') || ""; | ||
| if (typeof this.set === "function") { | ||
| this.set('__context', context); | ||
| } | ||
| return this._eval.call(context, locals + literals + literalize_(expr)); | ||
@@ -158,5 +155,2 @@ }; | ||
| this.parent = this.options.parent; | ||
| if (!this.parent) { | ||
| this.options.locals.__context = null; | ||
| } | ||
| names = []; | ||
@@ -205,3 +199,3 @@ for (_j = 0, _len2 = varTypes.length; _j < _len2; _j++) { | ||
| x = exports[_n]; | ||
| this[x] = C.makeGetter(x)(); | ||
| this[x] = C.makeGetter(x).call(this); | ||
| } | ||
@@ -212,2 +206,5 @@ } | ||
| Scope.prototype.run = Scope.run; | ||
| Scope.prototype.self = function(f) { | ||
| return f.call(this); | ||
| }; | ||
| Scope.prototype.set = function(name, val, isLiteral) { | ||
@@ -214,0 +211,0 @@ var obj, _len, _ref, _results; |
+1
-1
@@ -6,3 +6,3 @@ { | ||
| "author": "Derek Brans <dbrans@gmail.com>", | ||
| "version": "0.10.0", | ||
| "version": "0.10.1", | ||
| "homepage": "http://scopejs.org", | ||
@@ -9,0 +9,0 @@ "bugs": { "web" : "github.com/dbrans/scope/issues"}, |
+8
-8
| # File header. | ||
| ### | ||
| * Scopejs v0.10.0 | ||
| * Scopejs v0.10.1 | ||
| * http://scopejs.org | ||
@@ -47,3 +47,3 @@ * | ||
| # #### Scope.eval(expr) | ||
| # #### Scope._eval(expr) | ||
| # A function to eval a given expression safely wrapped in a function | ||
@@ -87,4 +87,2 @@ # in the global scope. | ||
| "var #{name} = #{literalize val};\n").join('') or "" | ||
| # Set the value of `this` for this scope for this invocation. | ||
| @set? '__context', context | ||
| # eval expr in the context of locals and literals | ||
@@ -174,5 +172,2 @@ @_eval.call context, locals + literals + literalize_ expr | ||
| {@parent} = @options | ||
| # The last value of `this` when Scope::eval was called with a context. | ||
| # Root scopes only. | ||
| @options.locals.__context = null if not @parent | ||
| # Register variable names declared in options. | ||
@@ -210,8 +205,13 @@ names = [] | ||
| # are not supported, `@[name]` is set once when the scope is created. | ||
| @[x] = C.makeGetter(x)() for x in exports | ||
| @[x] = C.makeGetter(x).call @ for x in exports | ||
| # See Scope.eval | ||
| eval: @eval | ||
| # See Scope.run | ||
| run: @run | ||
| # Call `f` with this scope as the context. | ||
| self: (f) -> f.call @ | ||
@@ -218,0 +218,0 @@ # #### Scope::set(name, val, isLiteral) |
130213
-0.08%1761
-0.34%