Code coverage report for sc/classlib/Collections/Environment.js

Statements: 100% (42 / 42)      Branches: 100% (4 / 4)      Functions: 100% (12 / 12)      Lines: 100% (42 / 42)      Ignored: 1 branch     

All files » sc/classlib/Collections/ » Environment.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 881     1   1 1   1 1   1 1     1 1     1     1   1 1 1 1   1   1     1     83   83 83 83 83   83   83     1     1     1     1     1 21 20   21     1     20 20 20     1 2     1 20            
SCScript.install(function(sc) {
  "use strict";
 
  require("./Dictionary");
 
  var $ = sc.lang.$;
  var $nil = $.nil;
 
  sc.lang.klass.refine("Environment", function(builder) {
    var envStack = [];
 
    builder.addClassMethod("make",function($function) {
      return this.new().make($function);
    });
 
    builder.addClassMethod("use", function($function) {
      return this.new().use($function);
    });
 
    builder.addMethod("make", {
      args: "function"
    }, function($function) {
      var $saveEnvir;
 
      $saveEnvir = sc.lang.main.getCurrentEnvir();
      sc.lang.main.setCurrentEnvir(this);
      try {
        $function.value(this);
      } catch (e) {}
      sc.lang.main.setCurrentEnvir($saveEnvir);
 
      return this;
    });
 
    builder.addMethod("use", {
      args: "function"
    }, function($function) {
      var $result, $saveEnvir;
 
      $saveEnvir = sc.lang.main.getCurrentEnvir();
      sc.lang.main.setCurrentEnvir(this);
      try {
        $result = $function.value(this);
      } catch (e) {}
      sc.lang.main.setCurrentEnvir($saveEnvir);
 
      return $result || /* istanbul ignore next */ $nil;
    });
 
    builder.addMethod("eventAt", {
      args: "key"
    }, function($key) {
      return this.at($key);
    });
 
    builder.addMethod("composeEvents", {
      args: "event"
    }, function($event) {
      return this.copy().putAll($event);
    });
 
    builder.addClassMethod("pop", function() {
      if (envStack.length) {
        sc.lang.main.setCurrentEnvir(envStack.pop());
      }
      return this;
    });
 
    builder.addClassMethod("push", {
      args: "envir"
    }, function($envir) {
      envStack.push(sc.lang.main.getCurrentEnvir());
      sc.lang.main.setCurrentEnvir($envir);
      return this;
    });
 
    builder.addMethod("pop", function() {
      return this.class().pop();
    });
 
    builder.addMethod("push", function() {
      return this.class().push(this);
    });
    // TODO: implements linkDoc
    // TODO: implements unlinkDoc
  });
});