From 6b7a301b3fb1d2d9dc681f5f84d4a662c00fe5f5 Mon Sep 17 00:00:00 2001 From: mohayonao Date: Mon, 12 May 2014 20:24:00 +0900 Subject: [PATCH] fixes - fix $SC.Ref - fix $SC.Function - fix sc-mode - fix ArrayedCollection#asString - build v0.0.23 --- build/scscript.js | 29 +++++++++++-------- demo/sc-mode.js | 4 +++ package.json | 2 +- .../classlib/Collections/ArrayedCollection.js | 4 +-- src/sc/lang/classlib/Core/Ref.js | 8 +---- src/sc/lang/klass/constructors.js | 16 ++++++++-- src/sc/lang/klass/constructors_test.js | 9 ++++++ 7 files changed, 48 insertions(+), 24 deletions(-) diff --git a/build/scscript.js b/build/scscript.js index 296e2bd..4478c22 100644 --- a/build/scscript.js +++ b/build/scscript.js @@ -1,7 +1,7 @@ (function(global) { "use strict"; -var sc = { VERSION: "0.0.22" }; +var sc = { VERSION: "0.0.23" }; // src/sc/sc.js (function(sc) { @@ -4431,6 +4431,7 @@ var sc = { VERSION: "0.0.22" }; (function(sc) { var $SC = sc.lang.$SC; + var fn = sc.lang.fn; var klass = sc.lang.klass; function SCNil() { @@ -4560,6 +4561,12 @@ var sc = { VERSION: "0.0.22" }; __tag: 12 }); + function SCRef(args) { + this.__initializeWith__("Object"); + this._value = args[0] || /* istanbul ignore next */ $nil; + } + sc.lang.klass.define(SCRef, "Ref : AbstractFunction"); + function SCInterpreter() { this.__initializeWith__("Object"); } @@ -4660,12 +4667,16 @@ var sc = { VERSION: "0.0.22" }; return instance; }; - $SC.Function = function(value) { + $SC.Function = function(value, def) { var instance = new SCFunction(); - instance._ = value; + instance._ = def ? fn(value, def) : value; return instance; }; + $SC.Ref = function(value) { + return new SCRef([ value ]); + }; + sc.lang.klass.$interpreter = new SCInterpreter(); })(sc); @@ -8320,14 +8331,8 @@ var sc = { VERSION: "0.0.22" }; (function(sc) { var fn = sc.lang.fn; - var $SC = sc.lang.$SC; - - function SCRef(args) { - this.__initializeWith__("Object"); - this._value = args[0] || $SC.Nil(); - } - sc.lang.klass.define(SCRef, "Ref : AbstractFunction", function(spec, utils) { + sc.lang.klass.refine("Ref", function(spec, utils) { spec.valueOf = function() { return this._value.valueOf(); }; @@ -12352,8 +12357,8 @@ var sc = { VERSION: "0.0.22" }; }; spec.asString = function() { - return $SC.String("[ " + this._.map(function(elem) { - return elem.__str__(); + return $SC.String("[ " + this._.map(function($elem) { + return $elem.asString().__str__(); }).join(", ") + " ]"); }; }); diff --git a/demo/sc-mode.js b/demo/sc-mode.js index 5d02e6b..cef6169 100644 --- a/demo/sc-mode.js +++ b/demo/sc-mode.js @@ -39,6 +39,10 @@ return "keyword"; } + if (stream.match(/[a-z]\w*/)) { + return "atom"; + } + if (stream.match(/[A-Z]\w*/)) { return "class"; } diff --git a/package.json b/package.json index d621268..0189740 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scscript", - "version": "0.0.22", + "version": "0.0.23", "author": "Nao Yonamine ", "homepage": "http://mohayonao.github.io/SCScript/", "bugs": "https://github.com/mohayonao/SCScript/issues", diff --git a/src/sc/lang/classlib/Collections/ArrayedCollection.js b/src/sc/lang/classlib/Collections/ArrayedCollection.js index 4f22a56..ad9074f 100644 --- a/src/sc/lang/classlib/Collections/ArrayedCollection.js +++ b/src/sc/lang/classlib/Collections/ArrayedCollection.js @@ -756,8 +756,8 @@ }; spec.asString = function() { - return $SC.String("[ " + this._.map(function(elem) { - return elem.__str__(); + return $SC.String("[ " + this._.map(function($elem) { + return $elem.asString().__str__(); }).join(", ") + " ]"); }; }); diff --git a/src/sc/lang/classlib/Core/Ref.js b/src/sc/lang/classlib/Core/Ref.js index d4c6dad..8018325 100644 --- a/src/sc/lang/classlib/Core/Ref.js +++ b/src/sc/lang/classlib/Core/Ref.js @@ -4,14 +4,8 @@ require("./Object"); var fn = sc.lang.fn; - var $SC = sc.lang.$SC; - function SCRef(args) { - this.__initializeWith__("Object"); - this._value = args[0] || $SC.Nil(); - } - - sc.lang.klass.define(SCRef, "Ref : AbstractFunction", function(spec, utils) { + sc.lang.klass.refine("Ref", function(spec, utils) { spec.valueOf = function() { return this._value.valueOf(); }; diff --git a/src/sc/lang/klass/constructors.js b/src/sc/lang/klass/constructors.js index 055226b..1016972 100644 --- a/src/sc/lang/klass/constructors.js +++ b/src/sc/lang/klass/constructors.js @@ -2,8 +2,10 @@ "use strict"; require("./klass"); + require("../fn"); var $SC = sc.lang.$SC; + var fn = sc.lang.fn; var klass = sc.lang.klass; function SCNil() { @@ -133,6 +135,12 @@ __tag: sc.C.TAG_FUNCTION }); + function SCRef(args) { + this.__initializeWith__("Object"); + this._value = args[0] || /* istanbul ignore next */ $nil; + } + sc.lang.klass.define(SCRef, "Ref : AbstractFunction"); + function SCInterpreter() { this.__initializeWith__("Object"); } @@ -234,12 +242,16 @@ return instance; }; - $SC.Function = function(value) { + $SC.Function = function(value, def) { var instance = new SCFunction(); - instance._ = value; + instance._ = def ? fn(value, def) : value; return instance; }; + $SC.Ref = function(value) { + return new SCRef([ value ]); + }; + sc.lang.klass.$interpreter = new SCInterpreter(); })(sc); diff --git a/src/sc/lang/klass/constructors_test.js b/src/sc/lang/klass/constructors_test.js index ca1885aea..71c6b3b 100644 --- a/src/sc/lang/klass/constructors_test.js +++ b/src/sc/lang/klass/constructors_test.js @@ -103,9 +103,18 @@ }); it("Function should return an instance of SCFunction", function() { var a; + + a = $SC.Function(function() {}, "a"); + expect(a).to.be.a("SCFunction"); + a = $SC.Function(function() {}); expect(a).to.be.a("SCFunction"); }); + it("Ref should return an instance of SCRef", function() { + var a; + a = $SC.Ref($SC.Integer(10)); + expect(a._value).to.be.a("SCInteger").that.equals(10); + }); }); })();