Skip to content

Commit

Permalink
Merge pull request #19 from mohayonao/code-cleanup
Browse files Browse the repository at this point in the history
code cleanup
  • Loading branch information
mohayonao committed Apr 26, 2014
2 parents 3ec6ec3 + 2ebf9cf commit 2d6e491
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 73 deletions.
48 changes: 22 additions & 26 deletions build/scscript.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(function(global) {
"use strict";

var sc = { VERSION: "0.0.11" };
var sc = { VERSION: "0.0.12" };

// src/sc/sc.js
(function(sc) {
Expand Down Expand Up @@ -1401,6 +1401,13 @@ var sc = { VERSION: "0.0.11" };

})(sc);

// src/sc/lang/classlib.js
(function(sc) {

sc.lang.classlib = {};

})(sc);

// src/sc/lang/classlib/Core/Object.js
(function(sc) {

Expand Down Expand Up @@ -4001,14 +4008,13 @@ var sc = { VERSION: "0.0.11" };

})(sc);

// src/sc/lang/classlib/Math/Integer.js
// src/sc/lang/classlib/Math/bop.js
(function(sc) {

var $SC = sc.lang.$SC;
var iterator = sc.lang.iterator;
var mathlib = sc.libs.mathlib;

function prOpInt(selector, type1, type2) {
sc.lang.classlib.bop = function(selector, type1, type2) {
var func = mathlib[selector];

return function($aNumber, $adverb) {
Expand All @@ -4025,7 +4031,16 @@ var sc = { VERSION: "0.0.11" };
$SC.Symbol(selector), this, $adverb
);
};
}
};

})(sc);

// src/sc/lang/classlib/Math/Integer.js
(function(sc) {

var $SC = sc.lang.$SC;
var iterator = sc.lang.iterator;
var mathlib = sc.libs.mathlib;

sc.lang.klass.refine("Integer", function(spec, utils) {
var $int1 = utils.int1Instance;
Expand Down Expand Up @@ -4092,7 +4107,7 @@ var sc = { VERSION: "0.0.11" };
[ "rrand" , $SC.Integer, $SC.Float ],
[ "exprand" , $SC.Float , $SC.Float ],
].forEach(function(items) {
spec[items[0]] = prOpInt.apply(null, items);
spec[items[0]] = sc.lang.classlib.bop.apply(null, items);
});

spec.wrap2 = function($aNumber, $adverb) {
Expand Down Expand Up @@ -4408,25 +4423,6 @@ var sc = { VERSION: "0.0.11" };
var iterator = sc.lang.iterator;
var mathlib = sc.libs.mathlib;

function prOpFloat(selector, type1, type2) {
var func = mathlib[selector];

return function($aNumber, $adverb) {
var tag = $aNumber.__tag;

switch (tag) {
case 770:
return type1(func(this._, $aNumber._));
case 777:
return type2(func(this._, $aNumber._));
}

return $aNumber.performBinaryOpOnSimpleNumber(
$SC.Symbol(selector), this, $adverb
);
};
}

sc.lang.klass.refine("Float", function(spec, utils) {
spec.toString = function() {
var raw = this._;
Expand Down Expand Up @@ -4495,7 +4491,7 @@ var sc = { VERSION: "0.0.11" };
[ "rrand" , $SC.Float, $SC.Float ],
[ "exprand" , $SC.Float, $SC.Float ],
].forEach(function(items) {
spec[items[0]] = prOpFloat.apply(null, items);
spec[items[0]] = sc.lang.classlib.bop.apply(null, items);
});

spec.clip = function($lo, $hi) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "scscript",
"version": "0.0.11",
"version": "0.0.12",
"author": "Nao Yonamine <mohayonao@gmail.com>",
"homepage": "http://mohayonao.github.io/SCScript/",
"bugs": "https://github.com/mohayonao/SCScript/issues",
Expand Down
19 changes: 13 additions & 6 deletions src/sc/lang/classlib.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
require("./klass");
require("./dollarSC");
require("./iterator");
require("./fn");
require("../libs/random");
require("../libs/mathlib");
(function(sc) {
"use strict";

require("./klass");
require("./dollarSC");
require("./iterator");
require("./fn");
require("../libs/random");
require("../libs/mathlib");

sc.lang.classlib = {};

})(sc);
22 changes: 2 additions & 20 deletions src/sc/lang/classlib/Math/Float.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,12 @@
"use strict";

require("./SimpleNumber");
require("./bop");

var $SC = sc.lang.$SC;
var iterator = sc.lang.iterator;
var mathlib = sc.libs.mathlib;

function prOpFloat(selector, type1, type2) {
var func = mathlib[selector];

return function($aNumber, $adverb) {
var tag = $aNumber.__tag;

switch (tag) {
case sc.C.TAG_INT:
return type1(func(this._, $aNumber._));
case sc.C.TAG_FLOAT:
return type2(func(this._, $aNumber._));
}

return $aNumber.performBinaryOpOnSimpleNumber(
$SC.Symbol(selector), this, $adverb
);
};
}

sc.lang.klass.refine("Float", function(spec, utils) {
spec.toString = function() {
var raw = this._;
Expand Down Expand Up @@ -94,7 +76,7 @@
[ "rrand" , $SC.Float, $SC.Float ],
[ "exprand" , $SC.Float, $SC.Float ],
].forEach(function(items) {
spec[items[0]] = prOpFloat.apply(null, items);
spec[items[0]] = sc.lang.classlib.bop.apply(null, items);
});

spec.clip = function($lo, $hi) {
Expand Down
22 changes: 2 additions & 20 deletions src/sc/lang/classlib/Math/Integer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,12 @@
"use strict";

require("./SimpleNumber");
require("./bop");

var $SC = sc.lang.$SC;
var iterator = sc.lang.iterator;
var mathlib = sc.libs.mathlib;

function prOpInt(selector, type1, type2) {
var func = mathlib[selector];

return function($aNumber, $adverb) {
var tag = $aNumber.__tag;

switch (tag) {
case sc.C.TAG_INT:
return type1(func(this._, $aNumber._));
case sc.C.TAG_FLOAT:
return type2(func(this._, $aNumber._));
}

return $aNumber.performBinaryOpOnSimpleNumber(
$SC.Symbol(selector), this, $adverb
);
};
}

sc.lang.klass.refine("Integer", function(spec, utils) {
var $int1 = utils.int1Instance;
var SCArray = $SC.Class("Array");
Expand Down Expand Up @@ -91,7 +73,7 @@
[ "rrand" , $SC.Integer, $SC.Float ],
[ "exprand" , $SC.Float , $SC.Float ],
].forEach(function(items) {
spec[items[0]] = prOpInt.apply(null, items);
spec[items[0]] = sc.lang.classlib.bop.apply(null, items);
});

spec.wrap2 = function($aNumber, $adverb) {
Expand Down
28 changes: 28 additions & 0 deletions src/sc/lang/classlib/Math/bop.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
(function(sc) {
"use strict";

require("../../classlib");

var $SC = sc.lang.$SC;
var mathlib = sc.libs.mathlib;

sc.lang.classlib.bop = function(selector, type1, type2) {
var func = mathlib[selector];

return function($aNumber, $adverb) {
var tag = $aNumber.__tag;

switch (tag) {
case sc.C.TAG_INT:
return type1(func(this._, $aNumber._));
case sc.C.TAG_FLOAT:
return type2(func(this._, $aNumber._));
}

return $aNumber.performBinaryOpOnSimpleNumber(
$SC.Symbol(selector), this, $adverb
);
};
};

})(sc);
68 changes: 68 additions & 0 deletions src/sc/lang/classlib/Math/bop_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"use strict";

require("./bop");
require("../../../libs/mathlib");

describe("sc.lang.classlib.bop", function() {
var $SC = sc.lang.$SC;
var bop = sc.lang.classlib.bop;
it("(int, int)", function() {
var func, test;

func = bop("+", $SC.Integer, $SC.Integer);

test = func.call($SC.Integer(1), $SC.Integer(2));
expect(test).to.be.a("SCInteger").that.equals(3);

test = func.call($SC.Integer(1), $SC.Float(2));
expect(test).to.be.a("SCInteger").that.equals(3);

test = func.call($SC.Float(1), $SC.Integer(2));
expect(test).to.be.a("SCInteger").that.equals(3);

test = func.call($SC.Float(1), $SC.Float(2));
expect(test).to.be.a("SCInteger").that.equals(3);
});
it("(int, float)", function() {
var func, test;

func = bop("+", $SC.Integer, $SC.Float);

test = func.call($SC.Integer(1), $SC.Integer(2));
expect(test).to.be.a("SCInteger").that.equals(3);

test = func.call($SC.Integer(1), $SC.Float(2));
expect(test).to.be.a("SCFloat").that.equals(3);

test = func.call($SC.Float(1), $SC.Integer(2));
expect(test).to.be.a("SCInteger").that.equals(3);

test = func.call($SC.Float(1), $SC.Float(2));
expect(test).to.be.a("SCFloat").that.equals(3);
});
it("(float, float)", function() {
var func, test;

func = bop("+", $SC.Float, $SC.Float);

test = func.call($SC.Integer(1), $SC.Integer(2));
expect(test).to.be.a("SCFloat").that.equals(3);

test = func.call($SC.Integer(1), $SC.Float(2));
expect(test).to.be.a("SCFloat").that.equals(3);

test = func.call($SC.Float(1), $SC.Integer(2));
expect(test).to.be.a("SCFloat").that.equals(3);

test = func.call($SC.Float(1), $SC.Float(2));
expect(test).to.be.a("SCFloat").that.equals(3);
});
it("(others)", function() {
var func, test;

func = bop("+", $SC.Float, $SC.Float);

test = func.call($SC.Integer(1), $SC.Array([ $SC.Integer(2) ]));
expect(test).to.be.a("SCArray").that.eqls([ 3 ]);
});
});

0 comments on commit 2d6e491

Please sign in to comment.