🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

scope

Package Overview
Dependencies
Maintainers
0
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

scope - npm Package Compare versions

Comparing version
0.8.2
to
0.9.0
+31
-25
browser/scope.js

@@ -17,3 +17,3 @@ (function() {

/*
* Scopejs v0.8.0
* Scopejs v0.9.0
* http://scopejs.org

@@ -52,2 +52,5 @@ *

EVAL_LITERAL = "(function(__expr){return eval(__expr)})";
Scope.prototype.literal = function() {
return EVAL_LITERAL;
};
Scope.eval = (1, eval)(EVAL_LITERAL);

@@ -62,3 +65,3 @@ Scope.literalize = literalize = function(x) {

} else {
return x.literalize();
return x.literal();
}

@@ -127,3 +130,3 @@ };

function Scope(options) {
var C, exports, k, literals, n, name, names, val, varTypes, x, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _m, _n, _ref, _ref2;
var C, exports, k, n, name, names, varTypes, x, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _m, _n, _ref, _ref2, _ref3;
this.options = options != null ? options : {};

@@ -137,3 +140,3 @@ varTypes = ['locals', 'literals'];

}
this.options.locals.__scope = this;
this.options.locals.__this = this;
this.parent = this.options.parent;

@@ -154,18 +157,9 @@ names = [];

this.names = names.concat(((_ref2 = this.parent) != null ? _ref2.names : void 0) || []);
this._eval = this.parent == null ? Scope.eval : (literals = ((function() {
var _ref3, _results;
_ref3 = this.options.literals;
_results = [];
for (name in _ref3) {
val = _ref3[name];
_results.push("var " + name + " = " + (literalize(val)) + ";\n");
}
return _results;
}).call(this)).join(''), this.parent.eval(this.options, literals + EVAL_LITERAL));
this._eval = ((_ref3 = this.parent) != null ? _ref3.eval(this.options, this) : void 0) || Scope.eval;
exports = (function() {
var _l, _len4, _ref3, _results;
_ref3 = this.names;
var _l, _len4, _ref4, _results;
_ref4 = this.names;
_results = [];
for (_l = 0, _len4 = _ref3.length; _l < _len4; _l++) {
x = _ref3[_l];
for (_l = 0, _len4 = _ref4.length; _l < _len4; _l++) {
x = _ref4[_l];
if (!x.match(/^_/)) {

@@ -197,16 +191,28 @@ _results.push(x);

}
Scope.prototype.eval = function(ctx, expr) {
var locals, name, _ref;
Scope.prototype.context = null;
Scope.prototype.eval = function(context, expr) {
var literals, locals, name, val, _ref;
this.context = context;
if (!expr) {
_ref = [{}, ctx], ctx = _ref[0], expr = _ref[1];
_ref = [{}, this.context], this.context = _ref[0], expr = _ref[1];
}
locals = ctx.locals ? ((function() {
locals = this.context.locals ? ((function() {
var _results;
_results = [];
for (name in ctx.locals) {
for (name in this.context.locals) {
_results.push("var " + name + " = this.locals." + name + ";\n");
}
return _results;
})()).join('') : "";
return this._eval.call(ctx, locals + literalize(expr));
}).call(this)).join('') : "";
literals = this.context.literals ? ((function() {
var _ref2, _results;
_ref2 = this.context.literals;
_results = [];
for (name in _ref2) {
val = _ref2[name];
_results.push("var " + name + " = " + (literalize(val)) + ";\n");
}
return _results;
}).call(this)).join('') : "";
return this._eval.call(this.context, locals + literals + literalize(expr));
};

@@ -213,0 +219,0 @@ Scope.prototype.run = function(ctx, fn) {

<!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">&#182;</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">8.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">9.0</span>
<span class="o">*</span> <span class="nx">http</span><span class="o">:</span><span class="err">//scopejs.org</span>

@@ -12,3 +12,4 @@ <span class="o">*</span>

<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">&#182;</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">&quot;(function(__expr){return eval(__expr)})&quot;</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">&#182;</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">&#182;</a> </div> <h4>Scope.eval(expr)</h4>
</pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">&#182;</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">&quot;(function(__expr){return eval(__expr)})&quot;</span>
<span class="nv">literal: </span><span class="o">-&gt;</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">&#182;</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">&#182;</a> </div> <h4>Scope.eval(expr)</h4>

@@ -31,3 +32,3 @@ <p>A function to eval a given expression safely wrapped in a function

<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">&#182;</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">&#182;</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">&quot;function (&quot;</span>
<span class="s2">&quot;(#{x})&quot;</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</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">literalize</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">&#182;</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">&#182;</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">&#182;</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="s2">&quot;(#{x})&quot;</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</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">&#182;</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">&#182;</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">&#182;</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) -&gt;</span> <span class="o">-&gt;</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>

@@ -96,13 +97,10 @@ <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) -&gt;</span>

log(scope.eval('foo')); // 3
</code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">constructor: </span><span class="nf">(@options = {}) -&gt;</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">&#182;</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">&#39;locals&#39;</span><span class="p">,</span> <span class="s1">&#39;literals&#39;</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">&#182;</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">&#182;</a> </div> <h5>The <code>__scope</code> local variable</h5>
</code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">constructor: </span><span class="nf">(@options = {}) -&gt;</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">&#182;</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">&#39;locals&#39;</span><span class="p">,</span> <span class="s1">&#39;literals&#39;</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">&#182;</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">&#182;</a> </div> <h5>The <code>__this</code> local variable</h5>
<p>Within the target scope, <code>__scope</code> refers to the Scope object for that
target scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@options.locals.__scope = </span><span class="err">@</span>
<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">&#182;</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">&#39;Reserved&#39;</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">&#182;</a> </div> <p>Compile the 'scoped eval'</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@_eval = </span>
<span class="nx">unless</span> <span class="nx">@parent</span><span class="o">?</span> <span class="k">then</span> <span class="nx">Scope</span><span class="p">.</span><span class="nb">eval</span>
<span class="k">else</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">&#182;</a> </div> <p>Concatenate and assign all local literals</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">literals = </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">@options</span><span class="p">.</span><span class="nx">literals</span>
<span class="s2">&quot;var #{name} = #{literalize val};\n&quot;</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</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">&#182;</a> </div> <p>Eval <code>literals</code> in the parent scope with <code>@options.locals</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@parent</span><span class="p">.</span><span class="nb">eval</span> <span class="nx">@options</span><span class="p">,</span> <span class="nx">literals</span> <span class="o">+</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">&#182;</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-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">&#182;</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">&#182;</a> </div> <h5>Exports</h5>

@@ -130,13 +128,14 @@ <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-34"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-34">&#182;</a> </div> <p>In environments where <code>__defineGetter__</code> and <code>__defineSetter__</code>
<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">&#182;</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>
</pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-35">&#182;</a> </div> <h4>Scope::eval(ctx, expr)</h4>
</pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-33">&#182;</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">&#182;</a> </div> <h4>Scope::eval(context, expr)</h4>
<p>Evaluate an expression in this scope.</p>
<p>The optional <code>ctx</code> parameter serves as the value of <code>this</code>
<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>ctx.locals</code> may define additional locals visible only to <code>expr</code>.</p>
<p><code>context.locals</code> may define additional locals visible only to <code>expr</code>.</p>

@@ -151,11 +150,15 @@ <h5>Argument Decompilation</h5>

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">(ctx, expr) -&gt;</span>
<span class="p">[</span><span class="nx">ctx</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">ctx</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">expr</span>
</code></pre> </td> <td class="code"> <div class="highlight"><pre> <span class="nb">eval</span><span class="o">:</span> <span class="nf">(@context, expr) -&gt;</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">ctx</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">ctx</span><span class="p">.</span><span class="nx">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">&quot;var #{name} = this.locals.#{name};\n&quot;</span><span class="p">).</span><span class="nx">join</span> <span class="s1">&#39;&#39;</span>
<span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="nx">@_eval</span><span class="p">.</span><span class="nx">call</span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">locals</span> <span class="o">+</span> <span class="nx">literalize</span> <span class="nx">expr</span>
</pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-36">&#182;</a> </div> <h4>Scope::run(ctx, fn)</h4>
<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">&quot;var #{name} = #{literalize val};\n&quot;</span><span class="p">).</span><span class="nx">join</span> <span class="s1">&#39;&#39;</span>
<span class="k">else</span> <span class="s2">&quot;&quot;</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">&#182;</a> </div> <h4>Scope::run(ctx, fn)</h4>

@@ -168,3 +171,3 @@ <p>'Run' a function in this scope. i.e., <code>literalize</code>, <code>eval</code> and <code>call</code>

<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">&quot;#{literalize fn}.call(this)&quot;</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-37">&#182;</a> </div> <h4>Scope::set(name, val, isLiteral)</h4>
<span class="nx">@eval</span> <span class="nx">ctx</span><span class="p">,</span> <span class="s2">&quot;#{literalize fn}.call(this)&quot;</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-36">&#182;</a> </div> <h4>Scope::set(name, val, isLiteral)</h4>

@@ -180,11 +183,11 @@ <p>Set local variable to value.

<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-38"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-38">&#182;</a> </div> <h4>Scope::get(name)</h4>
</pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-37">&#182;</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) -&gt;</span> <span class="nx">@_eval</span> <span class="nx">name</span></pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-39">&#182;</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) -&gt;</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">&#182;</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 = {}) -&gt;</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-40"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-40">&#182;</a> </div> <p>Initialize this class</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@initialize</span><span class="p">()</span>
</pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-39">&#182;</a> </div> <p>Initialize this class</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@initialize</span><span class="p">()</span>
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
(function() {
/*
* Scopejs v0.8.0
* Scopejs v0.9.0
* http://scopejs.org

@@ -37,2 +37,5 @@ *

EVAL_LITERAL = "(function(__expr){return eval(__expr)})";
Scope.prototype.literal = function() {
return EVAL_LITERAL;
};
Scope.eval = (1, eval)(EVAL_LITERAL);

@@ -47,3 +50,3 @@ Scope.literalize = literalize = function(x) {

} else {
return x.literalize();
return x.literal();
}

@@ -112,3 +115,3 @@ };

function Scope(options) {
var C, exports, k, literals, n, name, names, val, varTypes, x, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _m, _n, _ref, _ref2;
var C, exports, k, n, name, names, varTypes, x, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _m, _n, _ref, _ref2, _ref3;
this.options = options != null ? options : {};

@@ -122,3 +125,3 @@ varTypes = ['locals', 'literals'];

}
this.options.locals.__scope = this;
this.options.locals.__this = this;
this.parent = this.options.parent;

@@ -139,18 +142,9 @@ names = [];

this.names = names.concat(((_ref2 = this.parent) != null ? _ref2.names : void 0) || []);
this._eval = this.parent == null ? Scope.eval : (literals = ((function() {
var _ref3, _results;
_ref3 = this.options.literals;
_results = [];
for (name in _ref3) {
val = _ref3[name];
_results.push("var " + name + " = " + (literalize(val)) + ";\n");
}
return _results;
}).call(this)).join(''), this.parent.eval(this.options, literals + EVAL_LITERAL));
this._eval = ((_ref3 = this.parent) != null ? _ref3.eval(this.options, this) : void 0) || Scope.eval;
exports = (function() {
var _l, _len4, _ref3, _results;
_ref3 = this.names;
var _l, _len4, _ref4, _results;
_ref4 = this.names;
_results = [];
for (_l = 0, _len4 = _ref3.length; _l < _len4; _l++) {
x = _ref3[_l];
for (_l = 0, _len4 = _ref4.length; _l < _len4; _l++) {
x = _ref4[_l];
if (!x.match(/^_/)) {

@@ -182,16 +176,28 @@ _results.push(x);

}
Scope.prototype.eval = function(ctx, expr) {
var locals, name, _ref;
Scope.prototype.context = null;
Scope.prototype.eval = function(context, expr) {
var literals, locals, name, val, _ref;
this.context = context;
if (!expr) {
_ref = [{}, ctx], ctx = _ref[0], expr = _ref[1];
_ref = [{}, this.context], this.context = _ref[0], expr = _ref[1];
}
locals = ctx.locals ? ((function() {
locals = this.context.locals ? ((function() {
var _results;
_results = [];
for (name in ctx.locals) {
for (name in this.context.locals) {
_results.push("var " + name + " = this.locals." + name + ";\n");
}
return _results;
})()).join('') : "";
return this._eval.call(ctx, locals + literalize(expr));
}).call(this)).join('') : "";
literals = this.context.literals ? ((function() {
var _ref2, _results;
_ref2 = this.context.literals;
_results = [];
for (name in _ref2) {
val = _ref2[name];
_results.push("var " + name + " = " + (literalize(val)) + ";\n");
}
return _results;
}).call(this)).join('') : "";
return this._eval.call(this.context, locals + literals + literalize(expr));
};

@@ -198,0 +204,0 @@ Scope.prototype.run = function(ctx, fn) {

@@ -6,3 +6,3 @@ {

"author": "Derek Brans <dbrans@gmail.com>",
"version": "0.8.2",
"version": "0.9.0",
"homepage": "http://scopejs.org",

@@ -9,0 +9,0 @@ "bugs": { "web" : "github.com/dbrans/scope/issues"},

# File header.
###
* Scopejs v0.8.2
* Scopejs v0.9.0
* http://scopejs.org

@@ -28,2 +28,3 @@ *

EVAL_LITERAL = "(function(__expr){return eval(__expr)})"
literal: -> EVAL_LITERAL

@@ -58,3 +59,3 @@ # ### Class methods

# Otherwise, `x` must literalize itself.
else x.literalize()
else x.literal()

@@ -143,6 +144,6 @@ # #### Class properties intended to be overridden.

@options[k] ?= {} for k in varTypes
# #####The `__scope` local variable
# Within the target scope, `__scope` refers to the Scope object for that
# #####The `__this` local variable
# Within the target scope, `__this` refers to the Scope object for that
# target scope.
@options.locals.__scope = @
@options.locals.__this = @
{@parent} = @options

@@ -155,10 +156,3 @@ # Register variable names declared in options.

# Compile the 'scoped eval'
@_eval =
unless @parent? then Scope.eval
else
# Concatenate and assign all local literals
literals = (for name, val of @options.literals
"var #{name} = #{literalize val};\n").join('')
# Eval `literals` in the parent scope with `@options.locals`.
@parent.eval @options, literals + EVAL_LITERAL
@_eval = @parent?.eval(@options, @) or Scope.eval
# #####Exports

@@ -192,9 +186,12 @@ # Exports allow direct access to locals inside the scope via

# #### Scope::eval(ctx, expr)
# The current value of `this` inside the eval.
context: null
# #### Scope::eval(context, expr)
# Evaluate an expression in this scope.
#
# The optional `ctx` parameter serves as the value of `this`
# The optional `context` parameter serves as the value of `this`
# for the eval of `expr`.
#
# `ctx.locals` may define additional locals visible only to `expr`.
# `context.locals` may define additional locals visible only to `expr`.
#

@@ -209,10 +206,14 @@ # ##### Argument Decompilation

#
eval: (ctx, expr) ->
[ctx, expr] = [{}, ctx] unless expr
eval: (@context, expr) ->
[@context, expr] = [{}, @context] unless expr
locals =
if ctx.locals then (for name of ctx.locals
if @context.locals then (for name of @context.locals
"var #{name} = this.locals.#{name};\n").join ''
else ""
@_eval.call ctx, locals + literalize expr
literals =
if @context.literals then (for name, val of @context.literals
"var #{name} = #{literalize val};\n").join ''
else ""
@_eval.call @context, locals + literals + literalize expr

@@ -219,0 +220,0 @@ # #### Scope::run(ctx, fn)