Adding std functions if need.

This commit is contained in:
Onoshko Dan 2014-04-18 13:10:20 +07:00
parent ea892ef28c
commit 2f11d32a70
4 changed files with 34 additions and 15 deletions

View File

@ -64,11 +64,11 @@
localStorage.isjs = isjs.checked ? "t" : "f";
stream = new Cola.OutputStream({ beautify : true, is_js : isjs.checked });
compressor = Cola.Compressor({ is_js : isjs.checked });
compressor = new Cola.Compressor({ is_js : isjs.checked });
try {
// 1. compile
ast = Cola.parse(source, null, isjs.checked);
ast = Cola.parse(source, { is_js : isjs.checked });
if(!isjs.checked) ast = ast.toJavaScript();
ast.print(stream);
translationArea.value = stream.toString();
@ -82,7 +82,7 @@
ast.compute_char_frequency();
ast.mangle_names({ is_js : isjs.checked, sort : true, toplevel : true });
stream = new Cola.OutputStream();
stream = new Cola.OutputStream({ is_js : isjs.checked });
ast.print(stream);
resultArea.value = stream.toString();
} catch(e){

View File

@ -780,24 +780,25 @@ Cola.ATOMIC_START_TOKEN = Cola.array_to_hash([ "atom", "num", "string", "regexp"
/* -----[ Parser ]----- */
Cola.parse = function ($TEXT, options, is_js) {
return (new Cola.Parser($TEXT, options, is_js)).parse();
Cola.parse = function ($TEXT, options) {
return (new Cola.Parser($TEXT, options)).parse();
};
Cola.Parser = function ($TEXT, options, is_js) {
Cola.Parser = function ($TEXT, options) {
var _this = this;
this.is_js = !!is_js;
this.is_js = !!options.is_js;
this.options = Cola.defaults(options, {
strict : false,
filename : null,
toplevel : null,
expression : false,
html5_comments : true
html5_comments : true,
is_js : false
});
this.tokenizer = typeof $TEXT == "string" ? new Cola.Tokenizer($TEXT, this.options.filename, is_js, this.options.html5_comments) : $TEXT;
this.tokenizer = typeof $TEXT == "string" ? new Cola.Tokenizer($TEXT, this.options.filename, this.is_js, this.options.html5_comments) : $TEXT;
this.S = {
input : function(){ return _this.tokenizer.next_token() },
@ -812,7 +813,7 @@ Cola.Parser = function ($TEXT, options, is_js) {
this.S.input.context = function(){ return _this.tokenizer.context() };
this.S.token = this.next();
if(is_js){
if(this.is_js){
this.UNARY_PREFIX = Cola.UNARY_PREFIX;
this.PRECEDENCE = Cola.PRECEDENCE;
this.ASSIGNMENT = Cola.ASSIGNMENT;

View File

@ -35,21 +35,28 @@
***********************************************************************/
function $_cola_is(_object, _type){
return _object instanceof _type || _object.__proto__ == _type.prototype;
return _object instanceof _type || _object.__proto__ === _type.prototype;
}
$_cola_is.i = 0;
function $_cola_isnt(_object, _type){
return !(_object instanceof _type || _object.__proto__ == _type.prototype);
return !(_object instanceof _type || _object.__proto__ === _type.prototype);
}
$_cola_isnt.i = 1;
function $_cola_modulo(_a, _b){
return (_a % _b + +_b) % _b;
}
$_cola_modulo.i = 2;
function $_cola_isset(_object){
return !(typeof _object === "undefined" || _object === null);
}
$_cola_isset.i = 3;
function $_cola_isntset(_object){
return (typeof _object === "undefined" || _object === null);
}
$_cola_isntset.i = 4;
$_cola = $_cola_is + $_cola_isnt + $_cola_modulo + $_cola_isset + $_cola_isntset;

View File

@ -41,7 +41,8 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
if(this.language == 'js') return this;
this.language = 'js';
var tt = new Cola.TreeTransformer(null, function(node){
var $_cola_ast = Cola.parse($_cola, { is_js : true}), $_cola_hash = {}, _this,
tt = new Cola.TreeTransformer(null, function(node){
var newNode, props;
if(node instanceof Cola.AST_Binary && node.operator == '**'){
@ -61,6 +62,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
} else
if(node instanceof Cola.AST_Binary && node.operator == '%%'){
$_cola_hash[$_cola_modulo.i] = true;
props = {
args : [node.left, node.right],
start : new Cola.AST_Token({ nlb : false, type : 'name', value : '$_cola_modulo' }),
@ -76,6 +78,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
} else
if(node instanceof Cola.AST_SimpleStatement && node.body instanceof Cola.AST_Assign && node.body.operator == '?='){
$_cola_hash[$_cola_isntset.i] = true;
node.body.operator = '=';
props = {
@ -98,6 +101,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
} else
if(node instanceof Cola.AST_Assign && node.operator == '?='){
$_cola_hash[$_cola_isntset.i] = true;
node.operator = '=';
props = {
@ -121,6 +125,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
} else
if(node instanceof Cola.AST_Binary && node.operator == 'is'){
$_cola_hash[$_cola_is.i] = true;
props = {
args : [node.left, node.right],
start : new Cola.AST_Token({ nlb : false, type : 'name', value : '$_cola_is' }),
@ -136,6 +141,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
} else
if(node instanceof Cola.AST_Binary && node.operator == 'isnt'){
$_cola_hash[$_cola_isnt.i] = true;
props = {
args : [node.left, node.right],
start : new Cola.AST_Token({ nlb : false, type : 'name', value : '$_cola_isnt' }),
@ -177,5 +183,10 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
return node;
});
return this.transform(tt);
_this = this.transform(tt);
for(var i in $_cola_hash) if($_cola_hash.hasOwnProperty(i))
_this.body.unshift($_cola_ast.body[i]);
return _this;
};