Progress
- Use inline `isset` expression instead function. status: done - Use inline `is`. status: done - `some is NaN` to `isNaN(some)`. status: done - operator `?` instead `isset`. status: done - rename runtime prefix `$_cola` to `_ColaRuntime$$`. status: done - dotal names of refs: done
This commit is contained in:
parent
a9010b529b
commit
c3df8f1d3f
106
README.md
106
README.md
|
|
@ -360,10 +360,33 @@ As you see, you can use keyword `when`, it's like `case`, but if the condition i
|
||||||
Future plans
|
Future plans
|
||||||
===
|
===
|
||||||
- Use inline `isset` expression instead function. status: done
|
- Use inline `isset` expression instead function. status: done
|
||||||
- Use inline `is`.
|
- Use inline `is`. status: done
|
||||||
- `some is NaN` to `isNaN(some)` status: done
|
- `some is NaN` to `isNaN(some)`. status: done
|
||||||
- operator `?` instead `isset`, fix the operator with function call
|
- operator `?` instead `isset`. status: done
|
||||||
|
- rename runtime prefix `$_cola` to `_ColaRuntime$$`. status: done
|
||||||
|
- dotal names of refs: done
|
||||||
|
|
||||||
|
String String::replaceAll(a, b){
|
||||||
|
String res = this;
|
||||||
|
while(res.indexOf(a) != -1) res = res.replace(a, b);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// or
|
||||||
|
|
||||||
|
Object data = someData;
|
||||||
|
int data.getFriendsCount() => this.friends.length;
|
||||||
|
|
||||||
- operator `?.`
|
- operator `?.`
|
||||||
|
- Negate array accessor ( getter )
|
||||||
|
|
||||||
|
arr[-1]; // last element
|
||||||
|
|
||||||
|
only for static negate index, for other cases you can use `%` unary prefix:
|
||||||
|
|
||||||
|
int index = -10;
|
||||||
|
arr[%index] = 34; // arr[index %% arr.length];
|
||||||
|
|
||||||
- operator `?` to sign an argument as not-required
|
- operator `?` to sign an argument as not-required
|
||||||
|
|
||||||
int sqr(int x) => x ** 2;
|
int sqr(int x) => x ** 2;
|
||||||
|
|
@ -374,22 +397,16 @@ Future plans
|
||||||
int sqrt(int x?) => x ** 2;
|
int sqrt(int x?) => x ** 2;
|
||||||
sqr(); // NaN
|
sqr(); // NaN
|
||||||
|
|
||||||
- Negate array accessor ( getter )
|
|
||||||
|
|
||||||
arr[-1]; // last element
|
|
||||||
|
|
||||||
only for static negate index, for other cases you can use `%` unary prefix:
|
|
||||||
|
|
||||||
int index = -10;
|
|
||||||
arr[%index] = 34; // arr[index %% arr.length];
|
|
||||||
|
|
||||||
- static typing
|
- static typing
|
||||||
- rename runtime prefix `$_cola` to `_crt$$`
|
- `@use` expressions
|
||||||
- `@use klosure` wrapped code will be execute on `DOMContentLoaded`, `main` functions will triggered firstly:
|
|
||||||
|
@use strict closure
|
||||||
|
|
||||||
|
- `@use await closure` wrapped code will be execute on `DOMContentLoaded`, `main` functions will triggered firstly:
|
||||||
|
|
||||||
// cola
|
// cola
|
||||||
|
|
||||||
@use klosure
|
@use await closure
|
||||||
|
|
||||||
main(){
|
main(){
|
||||||
alert('loaded!');
|
alert('loaded!');
|
||||||
|
|
@ -407,35 +424,6 @@ Future plans
|
||||||
document.title = "Page";
|
document.title = "Page";
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
- inline using of `@use`
|
|
||||||
|
|
||||||
@use meteor
|
|
||||||
@use strict
|
|
||||||
|
|
||||||
@use closure
|
|
||||||
|
|
||||||
// or you can...
|
|
||||||
|
|
||||||
@use meteor strict closure
|
|
||||||
|
|
||||||
|
|
||||||
- dotal names of refs
|
|
||||||
|
|
||||||
String String::replaceAll(a, b){
|
|
||||||
String res = this;
|
|
||||||
while(res.indexOf(a) != -1) res = res.replace(a, b);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// or
|
|
||||||
|
|
||||||
Object data = someData;
|
|
||||||
int data.getFriendsCount() => this.friends.length;
|
|
||||||
|
|
||||||
// or
|
|
||||||
|
|
||||||
Cola.AST_Node node = new Cola.AST_Node;
|
|
||||||
|
|
||||||
- interface
|
- interface
|
||||||
|
|
||||||
interface UserProfile {
|
interface UserProfile {
|
||||||
|
|
@ -448,11 +436,11 @@ Future plans
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
|
|
||||||
private int a = 123;
|
int a = 123;
|
||||||
protected var o = {};
|
|
||||||
|
|
||||||
readonly String about = "class";
|
readonly String about = "class";
|
||||||
|
|
||||||
|
$("button").click(() => console.log("Button Clicked!"));
|
||||||
|
|
||||||
A(a){
|
A(a){
|
||||||
about = "some else";
|
about = "some else";
|
||||||
}
|
}
|
||||||
|
|
@ -511,12 +499,6 @@ Future plans
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- destructed function arguments
|
|
||||||
|
|
||||||
test({String name, String login, String photoUrl}){
|
|
||||||
console.log(name, login, photoUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
- ES6 `for`
|
- ES6 `for`
|
||||||
|
|
||||||
for(name of names){
|
for(name of names){
|
||||||
|
|
@ -531,24 +513,6 @@ Future plans
|
||||||
|
|
||||||
String code = fs.readFileSync(dirname(filePath) + "/main.cola", "utf8");
|
String code = fs.readFileSync(dirname(filePath) + "/main.cola", "utf8");
|
||||||
|
|
||||||
- set parameters to calling function
|
|
||||||
|
|
||||||
$(".btn").on("click", *(){
|
|
||||||
this; // parent context
|
|
||||||
});
|
|
||||||
|
|
||||||
- namespaces, name of namespace must be cupitalized
|
|
||||||
|
|
||||||
@use Cola {
|
|
||||||
|
|
||||||
class AST_Node {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Cola.AST_Node node = new Cola.AST_Node();
|
|
||||||
|
|
||||||
|
|
||||||
- write documentation of tokenizer/parser methods
|
- write documentation of tokenizer/parser methods
|
||||||
- more informative exceptions
|
- more informative exceptions
|
||||||
|
|
|
||||||
10
lib/ast.js
10
lib/ast.js
|
|
@ -719,6 +719,16 @@ Cola.AST_Proto = Cola.DEFNODE("Proto", null, {
|
||||||
}
|
}
|
||||||
}, Cola.AST_PropAccess);
|
}, Cola.AST_PropAccess);
|
||||||
|
|
||||||
|
Cola.AST_CondAccess = Cola.DEFNODE("CondAccess", null, {
|
||||||
|
$iscola: true,
|
||||||
|
$documentation: "Conditional accessor",
|
||||||
|
_walk: function(visitor) {
|
||||||
|
return visitor._visit(this, function(){
|
||||||
|
this.expression._walk(visitor);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, Cola.AST_PropAccess);
|
||||||
|
|
||||||
Cola.AST_Cascade = Cola.DEFNODE("Cascade", "expression subexpressions", {
|
Cola.AST_Cascade = Cola.DEFNODE("Cascade", "expression subexpressions", {
|
||||||
$iscola: true,
|
$iscola: true,
|
||||||
$documentation: "Base class for properties access expressions, i.e. `a..foo..bar`",
|
$documentation: "Base class for properties access expressions, i.e. `a..foo..bar`",
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1704,16 +1704,8 @@ Cola.Compressor.MathFuncs = {
|
||||||
} else
|
} else
|
||||||
|
|
||||||
if (!compressor.option("is_js") && self.expression instanceof Cola.AST_SymbolRef && Cola.Compressor.StdFuncs[self.expression.name] && self.args[0] instanceof Cola.AST_Constant) {
|
if (!compressor.option("is_js") && self.expression instanceof Cola.AST_SymbolRef && Cola.Compressor.StdFuncs[self.expression.name] && self.args[0] instanceof Cola.AST_Constant) {
|
||||||
if (self.expression.name == "$_cola_isset" || self.expression.name == "$_cola_isntset")
|
if (self.expression.name == "_ColaRuntime$$modulo" && self.args[1] instanceof Cola.AST_Constant)
|
||||||
return make_node(Cola.AST_Boolean, self, { value : Cola[self.expression.name](self.args[0].value) }).transform(compressor);
|
return make_node(Cola.AST_Number, self, { value : Cola._ColaRuntime$$modulo(self.args[0].value, self.args[1].value) }).transform(compressor);
|
||||||
|
|
||||||
if ((self.expression.name == "$_cola_is" || self.expression.name == "$_cola_isnt") &&
|
|
||||||
self.args[1] instanceof Cola.AST_SymbolRef &&
|
|
||||||
(self.args[1].value == "Number" || self.args[1].value == "Boolean" || self.args[1].value == "String"))
|
|
||||||
return make_node(Cola.AST_Boolean, self, { value : Cola[self.expression.name](self.args[0].value, eval(self.args[1].value)) }).transform(compressor);
|
|
||||||
|
|
||||||
if (self.expression.name == "$_cola_modulo" && self.args[1] instanceof Cola.AST_Constant)
|
|
||||||
return make_node(Cola.AST_Number, self, { value : Cola.$_cola_modulo(self.args[0].value, self.args[1].value) }).transform(compressor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (compressor.option("unsafe")) {
|
if (compressor.option("unsafe")) {
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,7 @@ main();</textarea>
|
||||||
mainbinding = document.getElementById("main_binding"),
|
mainbinding = document.getElementById("main_binding"),
|
||||||
compressed = document.getElementById("compressed"),
|
compressed = document.getElementById("compressed"),
|
||||||
source;
|
source;
|
||||||
|
//localStorage.clear();
|
||||||
if(!localStorage.source) localStorage.source = source = sourceArea.value;
|
if(!localStorage.source) localStorage.source = source = sourceArea.value;
|
||||||
else sourceArea.value = source = localStorage.source;
|
else sourceArea.value = source = localStorage.source;
|
||||||
isjs.checked = localStorage.isjs == "t";
|
isjs.checked = localStorage.isjs == "t";
|
||||||
|
|
@ -315,7 +315,7 @@ main();</textarea>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compile();
|
|
||||||
changeClass();
|
changeClass();
|
||||||
|
compile();
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
86
lib/parse.js
86
lib/parse.js
|
|
@ -49,7 +49,7 @@
|
||||||
!this.Cola && (this.Cola = {});
|
!this.Cola && (this.Cola = {});
|
||||||
|
|
||||||
Cola.KEYWORDS = 'break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with';
|
Cola.KEYWORDS = 'break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with';
|
||||||
Cola.cKEYWORDS = Cola.KEYWORDS.replace(' void', '') + ' when clone isset is isnt class singleton injector';
|
Cola.cKEYWORDS = Cola.KEYWORDS.replace(' void', '') + ' when clone is isnt class singleton injector';
|
||||||
|
|
||||||
Cola.KEYWORDS_ATOM = 'false null true';
|
Cola.KEYWORDS_ATOM = 'false null true';
|
||||||
Cola.cKEYWORDS_ATOM = Cola.KEYWORDS_ATOM + ' on yes off no';
|
Cola.cKEYWORDS_ATOM = Cola.KEYWORDS_ATOM + ' on yes off no';
|
||||||
|
|
@ -126,7 +126,6 @@ Cola.OPERATORS = [ // d - different left and right types of vars, s - same
|
||||||
"||", // binary - s
|
"||", // binary - s
|
||||||
// ColaScript
|
// ColaScript
|
||||||
"clone",
|
"clone",
|
||||||
"isset",
|
|
||||||
"is",
|
"is",
|
||||||
"isnt",
|
"isnt",
|
||||||
"**",
|
"**",
|
||||||
|
|
@ -136,7 +135,7 @@ Cola.OPERATORS = [ // d - different left and right types of vars, s - same
|
||||||
];
|
];
|
||||||
Cola.cOPERATORS = Cola.makePredicate(Cola.OPERATORS);
|
Cola.cOPERATORS = Cola.makePredicate(Cola.OPERATORS);
|
||||||
|
|
||||||
Cola.OPERATORS = Cola.OPERATORS.slice(0, Cola.OPERATORS.length - 7);
|
Cola.OPERATORS = Cola.OPERATORS.slice(0, Cola.OPERATORS.length - 6);
|
||||||
Cola.OPERATORS.push('void');
|
Cola.OPERATORS.push('void');
|
||||||
|
|
||||||
Cola.OPERATORS = Cola.makePredicate(Cola.OPERATORS);
|
Cola.OPERATORS = Cola.makePredicate(Cola.OPERATORS);
|
||||||
|
|
@ -145,10 +144,10 @@ Cola.COMPARISON = Cola.makePredicate("< > <= >= == === != !==");
|
||||||
|
|
||||||
Cola.WHITESPACE_CHARS = Cola.makePredicate(Cola.characters(" \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000"));
|
Cola.WHITESPACE_CHARS = Cola.makePredicate(Cola.characters(" \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000"));
|
||||||
|
|
||||||
Cola.cPUNC_BEFORE_EXPRESSION = Cola.makePredicate(Cola.characters("[{(,.;:").concat(["::"]));
|
Cola.cPUNC_BEFORE_EXPRESSION = Cola.makePredicate(Cola.characters("[{(,.;:").concat(["::", "?."]));
|
||||||
Cola.PUNC_BEFORE_EXPRESSION = Cola.makePredicate(Cola.characters("[{(,.;:"));
|
Cola.PUNC_BEFORE_EXPRESSION = Cola.makePredicate(Cola.characters("[{(,.;:"));
|
||||||
|
|
||||||
Cola.PUNC_CHARS = Cola.makePredicate(Cola.characters("[]{}(),;:"));
|
Cola.PUNC_CHARS = Cola.makePredicate(Cola.characters("[]{}(),;:?"));
|
||||||
|
|
||||||
Cola.REGEXP_MODIFIERS = Cola.makePredicate(Cola.characters("gmsiy"));
|
Cola.REGEXP_MODIFIERS = Cola.makePredicate(Cola.characters("gmsiy"));
|
||||||
|
|
||||||
|
|
@ -313,8 +312,11 @@ Cola.Tokenizer.prototype.dumpS = function () {
|
||||||
this.dumps[++this.dumpi] = Cola.clone(this.S);
|
this.dumps[++this.dumpi] = Cola.clone(this.S);
|
||||||
};
|
};
|
||||||
|
|
||||||
Cola.Tokenizer.prototype.restoreS = function () {
|
Cola.Tokenizer.prototype.restoreS = function (onlyDown) {
|
||||||
if(this.dumpi == -1) return;
|
if(this.dumpi == -1) return;
|
||||||
|
|
||||||
|
if(onlyDown) return this.dumpi--;
|
||||||
|
|
||||||
this.S = this.dumps[this.dumpi];
|
this.S = this.dumps[this.dumpi];
|
||||||
delete this.dumps[this.dumpi--];
|
delete this.dumps[this.dumpi--];
|
||||||
};
|
};
|
||||||
|
|
@ -359,7 +361,7 @@ Cola.Tokenizer.prototype.token = function (type, value, is_comment) {
|
||||||
this.S.regex_allowed = ((type == "operator" && !this.UNARY_POSTFIX(value)) ||
|
this.S.regex_allowed = ((type == "operator" && !this.UNARY_POSTFIX(value)) ||
|
||||||
(type == "keyword" && this.KEYWORDS_BEFORE_EXPRESSION(value)) ||
|
(type == "keyword" && this.KEYWORDS_BEFORE_EXPRESSION(value)) ||
|
||||||
(type == "punc" && this.PUNC_BEFORE_EXPRESSION(value)));
|
(type == "punc" && this.PUNC_BEFORE_EXPRESSION(value)));
|
||||||
this.prev_was_dot = (type == "punc" && value == ".") || (!this.is_js && type == "punc" && value == "::");
|
this.prev_was_dot = (type == "punc" && value == ".") || (!this.is_js && type == "punc" && (value == "::" || value == "?."));
|
||||||
var ret = {
|
var ret = {
|
||||||
type : type,
|
type : type,
|
||||||
value : value,
|
value : value,
|
||||||
|
|
@ -708,6 +710,7 @@ Cola.Tokenizer.prototype.next_token = function (force_regexp) {
|
||||||
if (Cola.PUNC_CHARS(ch)){
|
if (Cola.PUNC_CHARS(ch)){
|
||||||
|
|
||||||
if (!this.is_js && ch == ":" && this.peek(1) == ":") return this.next(), this.next(), this.token("punc", "::");
|
if (!this.is_js && ch == ":" && this.peek(1) == ":") return this.next(), this.next(), this.token("punc", "::");
|
||||||
|
if (!this.is_js && ch == "?" && this.peek(1) == ".") return this.next(), this.next(), this.token("punc", "?.");
|
||||||
|
|
||||||
if (!this.is_js && this.S.string.at[this.S.string.level].inside && (this.S.string.at[this.S.string.level].inside_at || this.S.string.at[this.S.string.level].inside_braces)) {
|
if (!this.is_js && this.S.string.at[this.S.string.level].inside && (this.S.string.at[this.S.string.level].inside_at || this.S.string.at[this.S.string.level].inside_braces)) {
|
||||||
if (ch == '{') this.S.string.at[this.S.string.level].balance++;
|
if (ch == '{') this.S.string.at[this.S.string.level].balance++;
|
||||||
|
|
@ -755,7 +758,6 @@ Cola.UNARY_PREFIX = Cola.makePredicate([
|
||||||
]);
|
]);
|
||||||
Cola.cUNARY_PREFIX = Cola.makePredicate([
|
Cola.cUNARY_PREFIX = Cola.makePredicate([
|
||||||
"clone",
|
"clone",
|
||||||
"isset",
|
|
||||||
"typeof",
|
"typeof",
|
||||||
"delete",
|
"delete",
|
||||||
"--",
|
"--",
|
||||||
|
|
@ -767,7 +769,7 @@ Cola.cUNARY_PREFIX = Cola.makePredicate([
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Cola.UNARY_POSTFIX = Cola.makePredicate([ "--", "++" ]);
|
Cola.UNARY_POSTFIX = Cola.makePredicate([ "--", "++" ]);
|
||||||
Cola.cUNARY_POSTFIX = Cola.UNARY_POSTFIX;
|
Cola.cUNARY_POSTFIX = Cola.makePredicate([ "--", "++", "?" ]);
|
||||||
|
|
||||||
Cola.ASSIGNMENT = Cola.makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
|
Cola.ASSIGNMENT = Cola.makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
|
||||||
Cola.cASSIGNMENT = Cola.makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=", "?=" ]);
|
Cola.cASSIGNMENT = Cola.makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=", "?=" ]);
|
||||||
|
|
@ -895,9 +897,12 @@ Cola.Parser.prototype.dumpS = function () {
|
||||||
this.tokenizer.dumpS();
|
this.tokenizer.dumpS();
|
||||||
};
|
};
|
||||||
|
|
||||||
Cola.Parser.prototype.restoreS = function () {
|
Cola.Parser.prototype.restoreS = function (onlyDown) {
|
||||||
if(this.dumpi == -1) return;
|
if(this.dumpi == -1) return;
|
||||||
this.tokenizer.restoreS();
|
|
||||||
|
this.tokenizer.restoreS(onlyDown);
|
||||||
|
if(onlyDown) return this.dumpi--;
|
||||||
|
|
||||||
this.S = this.dumps[this.dumpi];
|
this.S = this.dumps[this.dumpi];
|
||||||
delete this.dumps[this.dumpi--];
|
delete this.dumps[this.dumpi--];
|
||||||
};
|
};
|
||||||
|
|
@ -1022,7 +1027,14 @@ Cola.Parser.prototype.statement = Cola.Parser.embed_tokens(function() {
|
||||||
case "name":
|
case "name":
|
||||||
if(!this.is_js && this.next_is("name")){
|
if(!this.is_js && this.next_is("name")){
|
||||||
type = this.S.token.value, this.next();
|
type = this.S.token.value, this.next();
|
||||||
if(this.next_is("punc", "(")) return this.function_(Cola.AST_Defun, type);
|
|
||||||
|
var isfun = false;
|
||||||
|
this.dumpS();
|
||||||
|
this.subscripts(this.as_symbol(Cola.AST_SymbolDefun), false);
|
||||||
|
isfun = this.is("punc", "(");
|
||||||
|
this.restoreS();
|
||||||
|
|
||||||
|
if(isfun) return this.function_(Cola.AST_Defun, type);
|
||||||
return tmp = this.var_(false, type), this.semicolon(), tmp;
|
return tmp = this.var_(false, type), this.semicolon(), tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1030,7 +1042,7 @@ Cola.Parser.prototype.statement = Cola.Parser.embed_tokens(function() {
|
||||||
var _this = this, balance = 1, isfun = false;
|
var _this = this, balance = 1, isfun = false;
|
||||||
this.dumpS();
|
this.dumpS();
|
||||||
|
|
||||||
this.next();
|
this.subscripts(this.as_symbol(Cola.AST_SymbolDefun), false);
|
||||||
if(this.is('punc', '(')){
|
if(this.is('punc', '(')){
|
||||||
this.next();
|
this.next();
|
||||||
this.next_until(function(){
|
this.next_until(function(){
|
||||||
|
|
@ -1331,6 +1343,7 @@ Cola.Parser.prototype.function_ = function(ctor, type) {
|
||||||
|
|
||||||
var in_statement = ctor === Cola.AST_Defun, _this = this, splatedexist = false;
|
var in_statement = ctor === Cola.AST_Defun, _this = this, splatedexist = false;
|
||||||
var name = this.is("name") ? this.as_symbol(in_statement ? Cola.AST_SymbolDefun : Cola.AST_SymbolLambda) : null;
|
var name = this.is("name") ? this.as_symbol(in_statement ? Cola.AST_SymbolDefun : Cola.AST_SymbolLambda) : null;
|
||||||
|
if (name != null) name = this.subscripts(name, false);
|
||||||
if (in_statement && !name)
|
if (in_statement && !name)
|
||||||
this.unexpected();
|
this.unexpected();
|
||||||
this.expect("(");
|
this.expect("(");
|
||||||
|
|
@ -1482,6 +1495,10 @@ Cola.Parser.prototype.vardefs = function (no_in, in_const, type) {
|
||||||
start : this.S.token,
|
start : this.S.token,
|
||||||
type : type,
|
type : type,
|
||||||
name : (function(_this){
|
name : (function(_this){
|
||||||
|
if(!_this.is_js) return _this.subscripts(_this.as_symbol(in_const ? Cola.AST_SymbolConst : Cola.AST_SymbolVar), false);
|
||||||
|
//_this.dumpS();
|
||||||
|
//console.log(_this.subscripts(_this.as_symbol(in_const ? Cola.AST_SymbolConst : Cola.AST_SymbolVar), true));
|
||||||
|
//_this.restoreS();
|
||||||
//was_template = !_this.is_js && ( _this.is("punc","[") || _this.is("punc","{") );
|
//was_template = !_this.is_js && ( _this.is("punc","[") || _this.is("punc","{") );
|
||||||
//if (!_this.is_js && _this.is("punc","[")) return _this.array_(true, true);
|
//if (!_this.is_js && _this.is("punc","[")) return _this.array_(true, true);
|
||||||
//if (!_this.is_js && _this.is("punc","{")) return _this.object_(true, true);
|
//if (!_this.is_js && _this.is("punc","{")) return _this.object_(true, true);
|
||||||
|
|
@ -1745,10 +1762,11 @@ Cola.Parser.prototype.expr_list = function (closing, allow_trailing_comma, allow
|
||||||
a.push(new Cola.AST_Hole({ start: this.S.token, end: this.S.token }));
|
a.push(new Cola.AST_Hole({ start: this.S.token, end: this.S.token }));
|
||||||
} else
|
} else
|
||||||
if(this.is("name") && allow_named_args){
|
if(this.is("name") && allow_named_args){
|
||||||
name = Cola.$_cola_clone(this.S.token);
|
name = this.S.token.clone();
|
||||||
this.dumpS();
|
this.dumpS();
|
||||||
this.next();
|
this.next();
|
||||||
if(this.is("punc",":")){
|
if(this.is("punc",":")){
|
||||||
|
this.restoreS(true);
|
||||||
this.next();
|
this.next();
|
||||||
a.push(new Cola.AST_Namedarg({
|
a.push(new Cola.AST_Namedarg({
|
||||||
name : name.value,
|
name : name.value,
|
||||||
|
|
@ -1847,7 +1865,7 @@ Cola.Parser.prototype.array_ = Cola.Parser.embed_tokens(function(is_template, is
|
||||||
}
|
}
|
||||||
if (!(val instanceof Cola.AST_SymbolRef ||
|
if (!(val instanceof Cola.AST_SymbolRef ||
|
||||||
val instanceof Cola.AST_ObjectTemplate || val instanceof Cola.AST_ArrayTemplate ||
|
val instanceof Cola.AST_ObjectTemplate || val instanceof Cola.AST_ArrayTemplate ||
|
||||||
!is_var && ( val instanceof Cola.AST_Dot || val instanceof Cola.AST_Sub ) ||
|
!is_var && ( val instanceof Cola.AST_PropAccess ) ||
|
||||||
val instanceof Cola.AST_Object && val.template == true ||
|
val instanceof Cola.AST_Object && val.template == true ||
|
||||||
val instanceof Cola.AST_Array && val.template == true)) {
|
val instanceof Cola.AST_Array && val.template == true)) {
|
||||||
|
|
||||||
|
|
@ -1926,7 +1944,7 @@ Cola.Parser.prototype.object_ = Cola.Parser.embed_tokens(function(is_template, i
|
||||||
}
|
}
|
||||||
if (!(val instanceof Cola.AST_SymbolRef ||
|
if (!(val instanceof Cola.AST_SymbolRef ||
|
||||||
val instanceof Cola.AST_ObjectTemplate || val instanceof Cola.AST_ArrayTemplate ||
|
val instanceof Cola.AST_ObjectTemplate || val instanceof Cola.AST_ArrayTemplate ||
|
||||||
!is_var && ( val instanceof Cola.AST_Dot || val instanceof Cola.AST_Sub ) ||
|
!is_var && ( val instanceof Cola.AST_PropAccess ) ||
|
||||||
val instanceof Cola.AST_Object && val.template == true ||
|
val instanceof Cola.AST_Object && val.template == true ||
|
||||||
val instanceof Cola.AST_Array && val.template == true)) {
|
val instanceof Cola.AST_Array && val.template == true)) {
|
||||||
|
|
||||||
|
|
@ -2018,6 +2036,15 @@ Cola.Parser.prototype.subscripts = function(expr, allow_calls) {
|
||||||
end : this.prev()
|
end : this.prev()
|
||||||
}), allow_calls);
|
}), allow_calls);
|
||||||
}
|
}
|
||||||
|
if (this.is("punc", "?.") && !this.is_js) {
|
||||||
|
this.next();
|
||||||
|
return this.subscripts(new Cola.AST_CondAccess({
|
||||||
|
start : start,
|
||||||
|
expression : expr,
|
||||||
|
property : this.as_name(),
|
||||||
|
end : this.prev()
|
||||||
|
}), allow_calls);
|
||||||
|
}
|
||||||
if (this.is("punc", "[")) {
|
if (this.is("punc", "[")) {
|
||||||
this.next();
|
this.next();
|
||||||
|
|
||||||
|
|
@ -2025,10 +2052,10 @@ Cola.Parser.prototype.subscripts = function(expr, allow_calls) {
|
||||||
if(this.is_js) prop = this.expression(true);
|
if(this.is_js) prop = this.expression(true);
|
||||||
else if(this.is("punc","]")) prop = new Cola.AST_Noop();
|
else if(this.is("punc","]")) prop = new Cola.AST_Noop();
|
||||||
else {
|
else {
|
||||||
if(this.is("punc","..") || this.is("punc","...")) prop = new Cola.AST_Number({ value : 0 });
|
if((this.is("punc","..") || this.is("punc","...")) && !this.is_js) prop = new Cola.AST_Number({ value : 0 });
|
||||||
else prop = this.expression(true, false, true);
|
else prop = this.expression(true, false, true);
|
||||||
this.dumpS();
|
//this.dumpS();
|
||||||
if(this.is("punc","..") || this.is("punc","...")){
|
if((this.is("punc","..") || this.is("punc","...")) && !this.is_js){
|
||||||
triple = this.is("punc","...");
|
triple = this.is("punc","...");
|
||||||
this.next();
|
this.next();
|
||||||
prop = new Cola.AST_ArrayRange({
|
prop = new Cola.AST_ArrayRange({
|
||||||
|
|
@ -2038,7 +2065,7 @@ Cola.Parser.prototype.subscripts = function(expr, allow_calls) {
|
||||||
start : prop.start,
|
start : prop.start,
|
||||||
end : this.prev()
|
end : this.prev()
|
||||||
});
|
});
|
||||||
} else this.restoreS();
|
} //else this.restoreS();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.expect("]");
|
this.expect("]");
|
||||||
|
|
@ -2073,6 +2100,11 @@ Cola.Parser.prototype.maybe_unary = function(allow_calls) {
|
||||||
}
|
}
|
||||||
var val = this.expr_atom(allow_calls);
|
var val = this.expr_atom(allow_calls);
|
||||||
while (this.is("operator") && this.UNARY_POSTFIX(this.S.token.value) && !this.S.token.nlb) {
|
while (this.is("operator") && this.UNARY_POSTFIX(this.S.token.value) && !this.S.token.nlb) {
|
||||||
|
if(!this.is_js && this.is("operator", "?") &&
|
||||||
|
!(this.next_is("punc", ";") || this.next_is("punc", ",") || this.next_is("punc", ":") ||
|
||||||
|
this.next_is("punc", ")") || this.next_is("punc", "]") || this.next_is("punc", "}") ||
|
||||||
|
this.next_is("operator", "?") || this.next_is("operator") && this.PRECEDENCE[this.peek().value])) break;
|
||||||
|
|
||||||
val = this.make_unary(Cola.AST_UnaryPostfix, this.S.token.value, val);
|
val = this.make_unary(Cola.AST_UnaryPostfix, this.S.token.value, val);
|
||||||
val.start = start;
|
val.start = start;
|
||||||
val.end = this.S.token;
|
val.end = this.S.token;
|
||||||
|
|
@ -2139,6 +2171,15 @@ Cola.Parser.prototype.maybe_conditional = function(no_in) {
|
||||||
var expr = this.expr_ops(no_in);
|
var expr = this.expr_ops(no_in);
|
||||||
if (this.is("operator", "?")) {
|
if (this.is("operator", "?")) {
|
||||||
this.next();
|
this.next();
|
||||||
|
|
||||||
|
/*if(!this.is_js && (this.is("punc", ";") || this.is("punc", ",") || this.is("punc", ":") ||
|
||||||
|
this.is("punc", ")") || this.is("punc", "]") || this.is("punc", "}") ||
|
||||||
|
this.is("operator", "?") || this.PRECEDENCE[this.S.token.value]))
|
||||||
|
return new Cola.AST_UnaryPostfix({
|
||||||
|
operator : "?",
|
||||||
|
expression : expr
|
||||||
|
});*/
|
||||||
|
|
||||||
var yes = this.expression(false);
|
var yes = this.expression(false);
|
||||||
|
|
||||||
return new Cola.AST_Conditional({
|
return new Cola.AST_Conditional({
|
||||||
|
|
@ -2186,6 +2227,7 @@ Cola.Parser.prototype.cascade = function(expr, start) {
|
||||||
while (this.next()) {
|
while (this.next()) {
|
||||||
if (this.is("name") || this.is("punc","[")) {
|
if (this.is("name") || this.is("punc","[")) {
|
||||||
last = this.expression(false, false, true);
|
last = this.expression(false, false, true);
|
||||||
|
|
||||||
if (this.is("punc", ":")) {
|
if (this.is("punc", ":")) {
|
||||||
last = this.cascade(last, last.start);
|
last = this.cascade(last, last.start);
|
||||||
this.next();
|
this.next();
|
||||||
|
|
@ -2194,10 +2236,8 @@ Cola.Parser.prototype.cascade = function(expr, start) {
|
||||||
if (!( last instanceof Cola.AST_SymbolRef
|
if (!( last instanceof Cola.AST_SymbolRef
|
||||||
|| last instanceof Cola.AST_Binary
|
|| last instanceof Cola.AST_Binary
|
||||||
|| last instanceof Cola.AST_Call
|
|| last instanceof Cola.AST_Call
|
||||||
|| last instanceof Cola.AST_Sub
|
|| last instanceof Cola.AST_PropAccess
|
||||||
|| last instanceof Cola.AST_Dot
|
|
||||||
|| last instanceof Cola.AST_Array
|
|| last instanceof Cola.AST_Array
|
||||||
|| last instanceof Cola.AST_Cascade
|
|
||||||
)) this.unexpected();
|
)) this.unexpected();
|
||||||
}
|
}
|
||||||
if (!this.is("punc", "..")) break;
|
if (!this.is("punc", "..")) break;
|
||||||
|
|
|
||||||
81
lib/std.js
81
lib/std.js
|
|
@ -36,48 +36,40 @@
|
||||||
|
|
||||||
!this.Cola && (this.Cola = {});
|
!this.Cola && (this.Cola = {});
|
||||||
|
|
||||||
Cola.$_cola_is = function $_cola_is(_object, _type){
|
Cola._ColaRuntime$$is = function _ColaRuntime$$is(_object, _type){
|
||||||
return _object === _type || _type.prototype && (_object instanceof _type || _object.__proto__ === _type.prototype);
|
return _object === _type || _type.prototype && (_object instanceof _type || _object.__proto__ === _type.prototype);
|
||||||
}
|
}
|
||||||
Cola.$_cola_is.i = 0;
|
Cola._ColaRuntime$$is.i = 0;
|
||||||
|
|
||||||
Cola.$_cola_isnt = function $_cola_isnt(_object, _type){
|
Cola._ColaRuntime$$isnt = function _ColaRuntime$$isnt(_object, _type){
|
||||||
return !(_object === _type || _type.prototype && (_object instanceof _type || _object.__proto__ === _type.prototype));
|
return !(_object === _type || _type.prototype && (_object instanceof _type || _object.__proto__ === _type.prototype));
|
||||||
}
|
}
|
||||||
Cola.$_cola_isnt.i = 1;
|
Cola._ColaRuntime$$isnt.i = 1;
|
||||||
|
|
||||||
Cola.$_cola_modulo = function $_cola_modulo(_a, _b){
|
Cola._ColaRuntime$$modulo = function _ColaRuntime$$modulo(_a, _b){
|
||||||
return (_a % _b + +_b) % _b;
|
return (_a % _b + +_b) % _b;
|
||||||
}
|
}
|
||||||
Cola.$_cola_modulo.i = 2;
|
Cola._ColaRuntime$$modulo.i = 2;
|
||||||
|
|
||||||
Cola.$_cola_isset = function $_cola_isset(_object){
|
Cola._ColaRuntime$$isset = function _ColaRuntime$$isset(_object){
|
||||||
return !(typeof _object === "undefined" || _object === null);
|
return !(typeof _object === "undefined" || _object === null);
|
||||||
}
|
}
|
||||||
Cola.$_cola_isset.i = 3;
|
Cola._ColaRuntime$$isset.i = 3;
|
||||||
|
|
||||||
Cola.$_cola_isntset = function $_cola_isntset(_object){
|
Cola._ColaRuntime$$isntset = function _ColaRuntime$$isntset(_object){
|
||||||
return (typeof _object === "undefined" || _object === null);
|
return (typeof _object === "undefined" || _object === null);
|
||||||
}
|
}
|
||||||
Cola.$_cola_isntset.i = 4;
|
Cola._ColaRuntime$$isntset.i = 4;
|
||||||
|
|
||||||
Cola.$_cola_clone = function $_cola_clone(_item){
|
Cola._ColaRuntime$$clone = function _ColaRuntime$$clone(_item){
|
||||||
if (_item === undefined || _item === null) return _item;
|
if (_item === undefined || _item === null) return _item;
|
||||||
if (_item.__clone__ instanceof Function) return _item.__clone__();
|
if (_item.__clone__ instanceof Function) return _item.__clone__();
|
||||||
|
|
||||||
var result, types = [ Number, String, Boolean ];
|
if(_item instanceof Number) return Number(_item);
|
||||||
for (var i in types)
|
if(_item instanceof String) return String(_item);
|
||||||
if(types.hasOwnProperty(i) && _item instanceof types[i])
|
if(_item instanceof Boolean) return Boolean(_item);
|
||||||
return types[i]( _item );
|
|
||||||
|
|
||||||
if (_item.__proto__ === Array.prototype) {
|
var result;
|
||||||
result = [];
|
|
||||||
_item.forEach(function(child, index, array) {
|
|
||||||
result[index] = $_cola_clone( child );
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(_item instanceof Object)) return _item;
|
if (!(_item instanceof Object)) return _item;
|
||||||
|
|
||||||
|
|
@ -87,61 +79,56 @@ Cola.$_cola_clone = function $_cola_clone(_item){
|
||||||
if (_item instanceof Date) return new Date(_item);
|
if (_item instanceof Date) return new Date(_item);
|
||||||
if (_item instanceof Function) return _item;
|
if (_item instanceof Function) return _item;
|
||||||
|
|
||||||
result = {};
|
result = new (Object.getPrototypeOf(_item).constructor);
|
||||||
for (var i in _item) result[i] = $_cola_clone( _item[i] );
|
for (var i in _item) result[i] = _ColaRuntime$$clone( _item[i] );
|
||||||
result.__proto__ = _item.__proto__;
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _item;
|
return _item;
|
||||||
}
|
}
|
||||||
Cola.$_cola_clone.i = 5;
|
Cola._ColaRuntime$$clone.i = 5;
|
||||||
|
|
||||||
Cola.$_cola_array_last = function $_cola_array_last(_array){
|
Cola._ColaRuntime$$array_last = function _ColaRuntime$$array_last(_array){
|
||||||
return _array[_array.length - 1];
|
return _array[_array.length - 1];
|
||||||
}
|
}
|
||||||
Cola.$_cola_array_last.i = 6;
|
Cola._ColaRuntime$$array_last.i = 6;
|
||||||
|
|
||||||
Cola.$_cola_array_range = function $_cola_array_range(_from, _to){
|
Cola._ColaRuntime$$array_range = function _ColaRuntime$$array_range(_from, _to){
|
||||||
var range = [];
|
var range = [];
|
||||||
if(_from <= _to) for(var i = _from; i <= _to; i++) range.push(i);
|
if(_from <= _to) for(var i = _from; i <= _to; i++) range.push(i);
|
||||||
else for(var i = _from; i >= _to; i--) range.push(i);
|
else for(var i = _from; i >= _to; i--) range.push(i);
|
||||||
return range;
|
return range;
|
||||||
}
|
}
|
||||||
Cola.$_cola_array_range.i = 7;
|
Cola._ColaRuntime$$array_range.i = 7;
|
||||||
|
|
||||||
Cola.$_cola_array_asplice = function $_cola_array_asplice(_array, _from, _to, _a){
|
Cola._ColaRuntime$$array_asplice = function _ColaRuntime$$array_asplice(_array, _from, _to, _a){
|
||||||
_to = _to - _from + 1;
|
_to = _to - _from + 1;
|
||||||
return [].splice.apply(_array, [_from, _to].concat(_a)), _a;
|
return [].splice.apply(_array, [_from, _to].concat(_a)), _a;
|
||||||
}
|
}
|
||||||
Cola.$_cola_array_asplice.i = 8;
|
Cola._ColaRuntime$$array_asplice.i = 8;
|
||||||
|
|
||||||
Cola.$_cola_func_named_args = function $_cola_func_named_args(_args){
|
Cola._ColaRuntime$$func_named_args = function _ColaRuntime$$func_named_args(_args){
|
||||||
this.$ = _args;
|
this.$ = _args;
|
||||||
}
|
}
|
||||||
Cola.$_cola_func_named_args.i = 9;
|
Cola._ColaRuntime$$func_named_args.i = 9;
|
||||||
|
|
||||||
Cola.$_cola_func_set_named_args = function $_cola_func_set_named_args(_args){
|
Cola._ColaRuntime$$func_set_named_args = function _ColaRuntime$$func_set_named_args(_args){
|
||||||
if(_args[_args.length - 1] instanceof $_cola_func_named_args){
|
if(_args[_args.length - 1] instanceof _ColaRuntime$$func_named_args){
|
||||||
var nargs = _args[_args.length - 1].$;
|
var nargs = _args[_args.length - 1].$;
|
||||||
for(var i in nargs) if(nargs.hasOwnProperty(i))
|
for(var i in nargs) if(nargs.hasOwnProperty(i))
|
||||||
_args[i] = nargs[i];
|
_args[i] = nargs[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Cola.$_cola_func_set_named_args.i = 10;
|
Cola._ColaRuntime$$func_set_named_args.i = 10;
|
||||||
Cola.$_cola_arguments_def = { i : 11 };
|
Cola._ColaRuntime$$arguments_def = { i : 11 };
|
||||||
|
|
||||||
Cola.$_cola =
|
Cola.$_cola =
|
||||||
Cola.$_cola_is + Cola.$_cola_isnt + Cola.$_cola_modulo + Cola.$_cola_isset +
|
Cola._ColaRuntime$$is + Cola._ColaRuntime$$isnt + Cola._ColaRuntime$$modulo + Cola._ColaRuntime$$isset +
|
||||||
Cola.$_cola_isntset + Cola.$_cola_clone + Cola.$_cola_array_last + Cola.$_cola_array_range +
|
Cola._ColaRuntime$$isntset + Cola._ColaRuntime$$clone + Cola._ColaRuntime$$array_last + Cola._ColaRuntime$$array_range +
|
||||||
Cola.$_cola_array_asplice + Cola.$_cola_func_named_args + Cola.$_cola_func_set_named_args +
|
Cola._ColaRuntime$$array_asplice + Cola._ColaRuntime$$func_named_args + Cola._ColaRuntime$$func_set_named_args +
|
||||||
"var arguments;";
|
"var arguments;";
|
||||||
|
|
||||||
Cola.Compressor.StdFuncs = {
|
Cola.Compressor.StdFuncs = {
|
||||||
$_cola_is : true,
|
_ColaRuntime$$modulo : true
|
||||||
$_cola_isnt : true,
|
|
||||||
$_cola_modulo : true,
|
|
||||||
$_cola_isset : true,
|
|
||||||
$_cola_isntset : true
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
372
lib/translate.js
372
lib/translate.js
|
|
@ -46,6 +46,97 @@ Cola.Constructions.setPos = function(node, ext){
|
||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
({{left}} === {{right}} || {{right}}.prototype && ({{left}} instanceof {{right}} || typeof {{left}} === typeof {{right}}()))
|
||||||
|
|
||||||
|
*/
|
||||||
|
Cola.Constructions.Is = function(left, right, ext){
|
||||||
|
return this.setPos(new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Binary({
|
||||||
|
left : left,
|
||||||
|
operator : "===",
|
||||||
|
right : right
|
||||||
|
}),
|
||||||
|
operator : "||",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Dot({
|
||||||
|
expression : right,
|
||||||
|
property : "prototype"
|
||||||
|
}),
|
||||||
|
operator : "&&",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Binary({
|
||||||
|
left : left,
|
||||||
|
operator : "instanceof",
|
||||||
|
right : right
|
||||||
|
}),
|
||||||
|
operator : "||",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_UnaryPrefix({
|
||||||
|
operator : "typeof",
|
||||||
|
expression : left
|
||||||
|
}),
|
||||||
|
operator : "===",
|
||||||
|
right : new Cola.AST_UnaryPrefix({
|
||||||
|
operator : "typeof",
|
||||||
|
expression : new Cola.AST_Call({
|
||||||
|
expression : right,
|
||||||
|
args : []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}), ext);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
!({{left}} === {{right}} || {{right}}.prototype && ({{left}} instanceof {{right}} || typeof {{left}} === typeof {{right}}()))
|
||||||
|
|
||||||
|
*/
|
||||||
|
Cola.Constructions.Isnt = function(left, right, ext){
|
||||||
|
return this.setPos(new Cola.AST_UnaryPrefix({
|
||||||
|
operator : "!",
|
||||||
|
expression : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Binary({
|
||||||
|
left : left,
|
||||||
|
operator : "===",
|
||||||
|
right : right
|
||||||
|
}),
|
||||||
|
operator : "||",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Dot({
|
||||||
|
expression : right,
|
||||||
|
property : "prototype"
|
||||||
|
}),
|
||||||
|
operator : "&&",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_Binary({
|
||||||
|
left : left,
|
||||||
|
operator : "instanceof",
|
||||||
|
right : right
|
||||||
|
}),
|
||||||
|
operator : "||",
|
||||||
|
right : new Cola.AST_Binary({
|
||||||
|
left : new Cola.AST_UnaryPrefix({
|
||||||
|
operator : "typeof",
|
||||||
|
expression : left
|
||||||
|
}),
|
||||||
|
operator : "===",
|
||||||
|
right : new Cola.AST_UnaryPrefix({
|
||||||
|
operator : "typeof",
|
||||||
|
expression : new Cola.AST_Call({
|
||||||
|
expression : right,
|
||||||
|
args : []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}), ext);
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
!(typeof {{node}} === "undefined" || {{node}} === null)
|
!(typeof {{node}} === "undefined" || {{node}} === null)
|
||||||
|
|
||||||
|
|
@ -100,7 +191,7 @@ Cola.Constructions.IsntSet = function(node, ext){
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.SplatedConditional = function(name, uid, pos, after, length){
|
Cola.Constructions.SplatedConditional = function(name, uid, pos, after, length){
|
||||||
if(Cola.$_cola_is(name, String)) name = new Cola.AST_SymbolRef({ name : name });
|
if(Cola._ColaRuntime$$is(name, String)) name = new Cola.AST_SymbolRef({ name : name });
|
||||||
return new Cola.AST_Conditional({
|
return new Cola.AST_Conditional({
|
||||||
condition : new Cola.AST_Binary({
|
condition : new Cola.AST_Binary({
|
||||||
operator : "<=",
|
operator : "<=",
|
||||||
|
|
@ -155,7 +246,7 @@ Cola.Constructions.SplatedConditional = function(name, uid, pos, after, length){
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.ValueWithOffset = function(name, uid, cond, pos, after){
|
Cola.Constructions.ValueWithOffset = function(name, uid, cond, pos, after){
|
||||||
if(Cola.$_cola_is(name, String)) name = new Cola.AST_SymbolRef({ name : name });
|
if(Cola._ColaRuntime$$is(name, String)) name = new Cola.AST_SymbolRef({ name : name });
|
||||||
return new Cola.AST_Sub({
|
return new Cola.AST_Sub({
|
||||||
expression : name,
|
expression : name,
|
||||||
property : cond
|
property : cond
|
||||||
|
|
@ -189,11 +280,11 @@ Cola.Constructions.ValueWithKey = function(cond, name, key){
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{{name}} = {{length}} <= arguments.length ? [].slice.call(arguments, {{pos}}, $_cola_i = arguments.length - {{after}}) : ($_cola_i = {{pos}}, [])
|
{{name}} = {{length}} <= arguments.length ? [].slice.call(arguments, {{pos}}, _ColaRuntime$$i = arguments.length - {{after}}) : (_ColaRuntime$$i = {{pos}}, [])
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.SplatedVarDef = function(name, pos, after, length){
|
Cola.Constructions.SplatedVarDef = function(name, pos, after, length){
|
||||||
if(Cola.$_cola_is(name, String)) name = { name : name };
|
if(Cola._ColaRuntime$$is(name, String)) name = { name : name };
|
||||||
return new Cola.AST_VarDef({
|
return new Cola.AST_VarDef({
|
||||||
type : "Array",
|
type : "Array",
|
||||||
name : new Cola.AST_SymbolVar(name), // name
|
name : new Cola.AST_SymbolVar(name), // name
|
||||||
|
|
@ -206,11 +297,11 @@ Cola.Constructions.SplatedVarDef = function(name, pos, after, length){
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
{{name}} = arguments[$_cola_i + {{aftersplated}}]
|
{{name}} = arguments[_ColaRuntime$$i + {{aftersplated}}]
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.PosedVarDef = function(name, type, pos, aftersplated){
|
Cola.Constructions.PosedVarDef = function(name, type, pos, aftersplated){
|
||||||
if(Cola.$_cola_is(name, String)) name = { name : name };
|
if(Cola._ColaRuntime$$is(name, String)) name = { name : name };
|
||||||
return new Cola.AST_VarDef({
|
return new Cola.AST_VarDef({
|
||||||
type : type,
|
type : type,
|
||||||
name : new Cola.AST_SymbolVar(name),
|
name : new Cola.AST_SymbolVar(name),
|
||||||
|
|
@ -223,11 +314,11 @@ Cola.Constructions.PosedVarDef = function(name, type, pos, aftersplated){
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
{{name}} = arguments[$_cola_i + {{aftersplated}}] !== undefined ? arguments[$_cola_i + {{aftersplated}}] : {{defval}}
|
{{name}} = arguments[_ColaRuntime$$i + {{aftersplated}}] !== undefined ? arguments[_ColaRuntime$$i + {{aftersplated}}] : {{defval}}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.PosedWithDefsVarDef = function(name, type, defval, pos, aftersplated){
|
Cola.Constructions.PosedWithDefsVarDef = function(name, type, defval, pos, aftersplated){
|
||||||
if(Cola.$_cola_is(name, String)) name = { name : name };
|
if(Cola._ColaRuntime$$is(name, String)) name = { name : name };
|
||||||
return new Cola.AST_VarDef({
|
return new Cola.AST_VarDef({
|
||||||
type : type,
|
type : type,
|
||||||
name : new Cola.AST_SymbolVar(name),
|
name : new Cola.AST_SymbolVar(name),
|
||||||
|
|
@ -248,7 +339,7 @@ Cola.Constructions.PosedWithDefsVarDef = function(name, type, defval, pos, after
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Cola.Constructions.NamedVarDef = function(name, type, defval, key){
|
Cola.Constructions.NamedVarDef = function(name, type, defval, key){
|
||||||
if(Cola.$_cola_is(name, String)) name = { name : name };
|
if(Cola._ColaRuntime$$is(name, String)) name = { name : name };
|
||||||
return new Cola.AST_VarDef({
|
return new Cola.AST_VarDef({
|
||||||
type : type,
|
type : type,
|
||||||
name : new Cola.AST_SymbolVar(name),
|
name : new Cola.AST_SymbolVar(name),
|
||||||
|
|
@ -270,6 +361,14 @@ Cola.Constructions.NamedVarDef = function(name, type, defval, key){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Cola.CondAccessContains = function(node){
|
||||||
|
if(!(node instanceof Cola.AST_Call || node instanceof Cola.AST_PropAccess)) return false;
|
||||||
|
var expr = node;
|
||||||
|
while(expr.expression instanceof Cola.AST_Call || expr.expression instanceof Cola.AST_PropAccess){
|
||||||
|
expr = expr.expression;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
if(this.language == 'js') return this;
|
if(this.language == 'js') return this;
|
||||||
|
|
@ -283,8 +382,8 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
path : ""
|
path : ""
|
||||||
});
|
});
|
||||||
|
|
||||||
var $_cola_ast = Cola.parse(Cola.$_cola, { is_js : true }),
|
var _ColaRuntime$$ast = Cola.parse(Cola.$_cola, { is_js : true }),
|
||||||
$_cola_hash = {},
|
_ColaRuntime$$hash = {},
|
||||||
|
|
||||||
_this,
|
_this,
|
||||||
|
|
||||||
|
|
@ -353,21 +452,33 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_modulo(5, 2)
|
_ColaRuntime$$modulo(5, 2)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Binary && node.operator == '%%'){
|
if(node instanceof Cola.AST_Binary && node.operator == '%%'){
|
||||||
$_cola_hash[Cola.$_cola_modulo.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$modulo.i] = true;
|
||||||
props = {
|
props = {
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [node.left, node.right],
|
args : [node.left, node.right],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_modulo' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$modulo' })
|
||||||
};
|
};
|
||||||
|
|
||||||
node = new Cola.AST_Call(props);
|
node = new Cola.AST_Call(props);
|
||||||
} else
|
} else
|
||||||
|
|
||||||
|
/*
|
||||||
|
a.b?.c();
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
typeof a.b === "undefined" && a.b === null ? undefined : a.b.c();
|
||||||
|
|
||||||
|
*/
|
||||||
|
if(node instanceof ){
|
||||||
|
|
||||||
|
} else
|
||||||
|
|
||||||
/*
|
/*
|
||||||
a ?= b;
|
a ?= b;
|
||||||
|
|
||||||
|
|
@ -494,19 +605,11 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_is(123, Number)
|
123 === Number || Number.prototype && (123 instanceof Number || typeof 123 === typeof Number()))
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Binary && node.operator == 'is'){
|
if(node instanceof Cola.AST_Binary && node.operator == 'is'){
|
||||||
$_cola_hash[Cola.$_cola_is.i] = true;
|
node = Cola.Constructions.Is(node.left, node.right, node);
|
||||||
props = {
|
|
||||||
start : node.start,
|
|
||||||
end : node.end,
|
|
||||||
args : [node.left, node.right],
|
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_is' })
|
|
||||||
};
|
|
||||||
|
|
||||||
node = new Cola.AST_Call(props);
|
|
||||||
} else
|
} else
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -514,30 +617,22 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_isnt(true, String);
|
!(true === String || String.prototype && (true instanceof String || typeof true === typeof String())))
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Binary && node.operator == 'isnt'){
|
if(node instanceof Cola.AST_Binary && node.operator == 'isnt'){
|
||||||
$_cola_hash[Cola.$_cola_isnt.i] = true;
|
node = Cola.Constructions.Isnt(node.left, node.right, node);
|
||||||
props = {
|
|
||||||
start : node.start,
|
|
||||||
end : node.end,
|
|
||||||
args : [node.left, node.right],
|
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_isnt' })
|
|
||||||
};
|
|
||||||
|
|
||||||
node = new Cola.AST_Call(props);
|
|
||||||
} else
|
} else
|
||||||
|
|
||||||
/*
|
/*
|
||||||
isset a
|
a?
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_isset(a)
|
_ColaRuntime$$isset(a)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_UnaryPrefix && node.operator == 'isset'){
|
if(node instanceof Cola.AST_UnaryPostfix && node.operator == '?'){
|
||||||
node = Cola.Constructions.IsSet(node.expression, node);
|
node = Cola.Constructions.IsSet(node.expression, node);
|
||||||
} else
|
} else
|
||||||
|
|
||||||
|
|
@ -546,16 +641,16 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
a = $_cola_clone(b)
|
a = _ColaRuntime$$clone(b)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_UnaryPrefix && node.operator == 'clone'){
|
if(node instanceof Cola.AST_UnaryPrefix && node.operator == 'clone'){
|
||||||
$_cola_hash[Cola.$_cola_clone.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$clone.i] = true;
|
||||||
props = {
|
props = {
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [node.expression],
|
args : [node.expression],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_clone' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$clone' })
|
||||||
};
|
};
|
||||||
|
|
||||||
node = new Cola.AST_Call(props);
|
node = new Cola.AST_Call(props);
|
||||||
|
|
@ -611,16 +706,16 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
func($_cola_array_last(arr))
|
func(_ColaRuntime$$array_last(arr))
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Sub && node.property instanceof Cola.AST_Noop){
|
if(node instanceof Cola.AST_Sub && node.property instanceof Cola.AST_Noop){
|
||||||
$_cola_hash[Cola.$_cola_array_last.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$array_last.i] = true;
|
||||||
props = {
|
props = {
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [node.expression],
|
args : [node.expression],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_array_last' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$array_last' })
|
||||||
};
|
};
|
||||||
|
|
||||||
node = new Cola.AST_Call(props);
|
node = new Cola.AST_Call(props);
|
||||||
|
|
@ -631,16 +726,16 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_array_asplice(arr, 0, 1, 123)
|
_ColaRuntime$$array_asplice(arr, 0, 1, 123)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Assign && node.operator == '=' && node.left instanceof Cola.AST_Sub && node.left.property instanceof Cola.AST_ArrayRange){
|
if(node instanceof Cola.AST_Assign && node.operator == '=' && node.left instanceof Cola.AST_Sub && node.left.property instanceof Cola.AST_ArrayRange){
|
||||||
$_cola_hash[Cola.$_cola_array_asplice.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$array_asplice.i] = true;
|
||||||
props = {
|
props = {
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [node.left.expression, node.left.property.from, node.left.property.to, node.right],
|
args : [node.left.expression, node.left.property.from, node.left.property.to, node.right],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_array_asplice' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$array_asplice' })
|
||||||
};
|
};
|
||||||
|
|
||||||
if(node.left.property.to instanceof Cola.AST_Noop) props.args[2] = new Cola.AST_Number({ value : '9e9' });
|
if(node.left.property.to instanceof Cola.AST_Noop) props.args[2] = new Cola.AST_Number({ value : '9e9' });
|
||||||
|
|
@ -689,16 +784,16 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
$_cola_array_range(0, 3)
|
_ColaRuntime$$array_range(0, 3)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_ArrayRange){
|
if(node instanceof Cola.AST_ArrayRange){
|
||||||
$_cola_hash[Cola.$_cola_array_range.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$array_range.i] = true;
|
||||||
props = {
|
props = {
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [node.from, node.to],
|
args : [node.from, node.to],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_array_range' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$array_range' })
|
||||||
};
|
};
|
||||||
|
|
||||||
if(node.triple) props.args[1] = new Cola.AST_Binary({
|
if(node.triple) props.args[1] = new Cola.AST_Binary({
|
||||||
|
|
@ -710,12 +805,85 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
node = new Cola.AST_Call(props);
|
node = new Cola.AST_Call(props);
|
||||||
} else
|
} else
|
||||||
|
|
||||||
|
/*
|
||||||
|
int obj.num = 0
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
obj.num = 0
|
||||||
|
|
||||||
|
*/
|
||||||
|
if(node instanceof Cola.AST_Var){
|
||||||
|
var defCache = []; newNode = [];
|
||||||
|
node.definitions.forEach(function(def, i){
|
||||||
|
if(!(def.name instanceof Cola.AST_SymbolVar)){
|
||||||
|
|
||||||
|
if(defCache.length != 0){
|
||||||
|
newNode.push(node.clone());
|
||||||
|
newNode[newNode.length - 1].definitions = defCache;
|
||||||
|
defCache = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
newNode.push(new Cola.AST_Assign({
|
||||||
|
start : def.start,
|
||||||
|
end : def.end,
|
||||||
|
operator : '=',
|
||||||
|
left : def.name,
|
||||||
|
right : def.value
|
||||||
|
}));
|
||||||
|
|
||||||
|
newNode[newNode.length - 1] = new Cola.AST_SimpleStatement({
|
||||||
|
body : newNode[newNode.length - 1]
|
||||||
|
});
|
||||||
|
|
||||||
|
} else defCache.push(def);
|
||||||
|
});
|
||||||
|
|
||||||
|
if(defCache.length != 0){
|
||||||
|
newNode.push(node.clone());
|
||||||
|
newNode[newNode.length - 1].definitions = defCache;
|
||||||
|
defCache = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
node = newNode;
|
||||||
|
} else
|
||||||
|
|
||||||
|
/*
|
||||||
|
int Math.rand(){} or Math.rand(){}
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
Math.rand = function(){}
|
||||||
|
*/
|
||||||
|
if(node instanceof Cola.AST_Defun && !(node.name instanceof Cola.AST_SymbolDefun)){
|
||||||
|
var texpr = node.name;
|
||||||
|
while(!(texpr.expression instanceof Cola.AST_SymbolDefun)) texpr = texpr.expression;
|
||||||
|
texpr.expression = new Cola.AST_SymbolRef(texpr.expression);
|
||||||
|
node = new Cola.AST_Assign({
|
||||||
|
start : node.start,
|
||||||
|
end : node.end,
|
||||||
|
operator : '=',
|
||||||
|
left : node.name,
|
||||||
|
right : (function(node){
|
||||||
|
node.name = new Cola.AST_SymbolLambda({
|
||||||
|
start : node.name.start,
|
||||||
|
end : node.name.end,
|
||||||
|
name : node.name.property
|
||||||
|
});
|
||||||
|
return new Cola.AST_Function(node);
|
||||||
|
})(node)
|
||||||
|
});
|
||||||
|
node = new Cola.AST_SimpleStatement({
|
||||||
|
body : node
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
|
||||||
/*
|
/*
|
||||||
func(a, b, name : name, c)
|
func(a, b, name : name, c)
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
func(a, b, c, new $_cola_func_named_args({ name : name }))
|
func(a, b, c, new _ColaRuntime$$func_named_args({ name : name }))
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Call){
|
if(node instanceof Cola.AST_Call){
|
||||||
|
|
@ -725,7 +893,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
node.args.forEach(function(val, i){
|
node.args.forEach(function(val, i){
|
||||||
if(!(val instanceof Cola.AST_Namedarg)) return;
|
if(!(val instanceof Cola.AST_Namedarg)) return;
|
||||||
|
|
||||||
$_cola_hash[Cola.$_cola_func_named_args.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$func_named_args.i] = true;
|
||||||
delQueue.push(i);
|
delQueue.push(i);
|
||||||
|
|
||||||
props.properties.push(new Cola.AST_ObjectKeyVal({
|
props.properties.push(new Cola.AST_ObjectKeyVal({
|
||||||
|
|
@ -745,7 +913,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
start : node.start,
|
start : node.start,
|
||||||
end : node.end,
|
end : node.end,
|
||||||
args : [new Cola.AST_Object(props)],
|
args : [new Cola.AST_Object(props)],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_func_named_args' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$func_named_args' })
|
||||||
};
|
};
|
||||||
|
|
||||||
node.args.push(new Cola.AST_New(props));
|
node.args.push(new Cola.AST_New(props));
|
||||||
|
|
@ -760,9 +928,9 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
to
|
to
|
||||||
|
|
||||||
function func(s){
|
function func(s){
|
||||||
$_cola_func_set_named_args(arguments);
|
_ColaRuntime$$func_set_named_args(arguments);
|
||||||
var $_cola_i, list = 3 <= arguments.length ? [].slice.call(arguments, 1, $_cola_i = arguments.length - 1) : ($_cola_i = 2, []),
|
var _ColaRuntime$$i, list = 3 <= arguments.length ? [].slice.call(arguments, 1, _ColaRuntime$$i = arguments.length - 1) : (_ColaRuntime$$i = 2, []),
|
||||||
b = arguments[$_cola_i+0] !== undefined ? arguments[$_cola_i+0] : false,
|
b = arguments[_ColaRuntime$$i+0] !== undefined ? arguments[_ColaRuntime$$i+0] : false,
|
||||||
n = arguments.n,
|
n = arguments.n,
|
||||||
h = arguments.h !== undefined ? arguments.h : 123;
|
h = arguments.h !== undefined ? arguments.h : 123;
|
||||||
}
|
}
|
||||||
|
|
@ -807,7 +975,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
aftersplated = 0;
|
aftersplated = 0;
|
||||||
props.definitions.push(new Cola.AST_VarDef({
|
props.definitions.push(new Cola.AST_VarDef({
|
||||||
type : "int",
|
type : "int",
|
||||||
name : new Cola.AST_SymbolVar({ name : '$_cola_i' }),
|
name : new Cola.AST_SymbolVar({ name : '_ColaRuntime$$i' }),
|
||||||
value : null
|
value : null
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
@ -834,12 +1002,12 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
if(delQueue.length != 0 || named.length != 0) node.body.unshift(new Cola.AST_Var(props));
|
if(delQueue.length != 0 || named.length != 0) node.body.unshift(new Cola.AST_Var(props));
|
||||||
|
|
||||||
if(named.length != 0){
|
if(named.length != 0){
|
||||||
$_cola_hash[Cola.$_cola_func_named_args.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$func_named_args.i] = true;
|
||||||
$_cola_hash[Cola.$_cola_func_set_named_args.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$func_set_named_args.i] = true;
|
||||||
node.body.unshift(new Cola.AST_SimpleStatement({
|
node.body.unshift(new Cola.AST_SimpleStatement({
|
||||||
body : new Cola.AST_Call({
|
body : new Cola.AST_Call({
|
||||||
args : [new Cola.AST_SymbolRef({ name : 'arguments' })],
|
args : [new Cola.AST_SymbolRef({ name : 'arguments' })],
|
||||||
expression : new Cola.AST_SymbolRef({ name : '$_cola_func_set_named_args' })
|
expression : new Cola.AST_SymbolRef({ name : '_ColaRuntime$$func_set_named_args' })
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
@ -857,24 +1025,24 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
(function($_cola_expr, arguments){
|
(function(_ColaRuntime$$expr, arguments){
|
||||||
$_cola_expr[0] = yes;
|
_ColaRuntime$$expr[0] = yes;
|
||||||
$_cola_expr.foo = bar;
|
_ColaRuntime$$expr.foo = bar;
|
||||||
$_cola_expr.baz();
|
_ColaRuntime$$expr.baz();
|
||||||
|
|
||||||
(function($_cola_expr, arguments){
|
(function(_ColaRuntime$$expr, arguments){
|
||||||
$_cola_expr.subfoo = no;
|
_ColaRuntime$$expr.subfoo = no;
|
||||||
$_cola_expr.subaz();
|
_ColaRuntime$$expr.subaz();
|
||||||
|
|
||||||
return $_cola_expr;
|
return _ColaRuntime$$expr;
|
||||||
}).call(this, $_cola_expr.sub, arguments);
|
}).call(this, _ColaRuntime$$expr.sub, arguments);
|
||||||
|
|
||||||
return $_cola_expr;
|
return _ColaRuntime$$expr;
|
||||||
}).call(this, obj, arguments);
|
}).call(this, obj, arguments);
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Cascade){
|
if(node instanceof Cola.AST_Cascade){
|
||||||
$_cola_hash[Cola.$_cola_arguments_def.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$arguments_def.i] = true;
|
||||||
|
|
||||||
props = {
|
props = {
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
|
|
@ -883,7 +1051,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
argtype : "positional",
|
argtype : "positional",
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
defval : new Cola.AST_Noop(),
|
defval : new Cola.AST_Noop(),
|
||||||
name : new Cola.AST_SymbolFunarg({ name : "$_cola_expr", start : node.expression.start, end : node.expression.end })
|
name : new Cola.AST_SymbolFunarg({ name : "_ColaRuntime$$expr", start : node.expression.start, end : node.expression.end })
|
||||||
}), new Cola.AST_ArgDef({
|
}), new Cola.AST_ArgDef({
|
||||||
argtype : "positional",
|
argtype : "positional",
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
|
|
@ -896,8 +1064,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
node.subexpressions.forEach(function(expr){
|
node.subexpressions.forEach(function(expr){
|
||||||
Expr = expr, Parent = false;
|
Expr = expr, Parent = false;
|
||||||
while(true)
|
while(true)
|
||||||
if( expr instanceof Cola.AST_Call || expr instanceof Cola.AST_Dot ||
|
if( expr instanceof Cola.AST_Call || expr instanceof Cola.AST_PropAccess){
|
||||||
expr instanceof Cola.AST_Sub || expr instanceof Cola.AST_Cascade){
|
|
||||||
Parent = expr;
|
Parent = expr;
|
||||||
expr = expr.expression;
|
expr = expr.expression;
|
||||||
} else
|
} else
|
||||||
|
|
@ -911,13 +1078,13 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
if(expr instanceof Cola.AST_Array || expr instanceof Cola.AST_ArrayRange) Expr = new Cola.AST_Sub({
|
if(expr instanceof Cola.AST_Array || expr instanceof Cola.AST_ArrayRange) Expr = new Cola.AST_Sub({
|
||||||
start : Expr.start,
|
start : Expr.start,
|
||||||
end : Expr.end,
|
end : Expr.end,
|
||||||
expression : new Cola.AST_SymbolRef({ name : "$_cola_expr" }),
|
expression : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" }),
|
||||||
property : expr instanceof Cola.AST_ArrayRange ? expr : ( expr.elements.length == 0 ? new Cola.AST_Noop() : expr.elements[0] )
|
property : expr instanceof Cola.AST_ArrayRange ? expr : ( expr.elements.length == 0 ? new Cola.AST_Noop() : expr.elements[0] )
|
||||||
}); else
|
}); else
|
||||||
if(expr instanceof Cola.AST_SymbolRef) Expr = new Cola.AST_Dot({
|
if(expr instanceof Cola.AST_SymbolRef) Expr = new Cola.AST_Dot({
|
||||||
start : Expr.start,
|
start : Expr.start,
|
||||||
end : Expr.end,
|
end : Expr.end,
|
||||||
expression : new Cola.AST_SymbolRef({ name : "$_cola_expr" }),
|
expression : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" }),
|
||||||
property : Expr.name
|
property : Expr.name
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -925,19 +1092,18 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
expr = new Cola.AST_Sub({
|
expr = new Cola.AST_Sub({
|
||||||
start : expr.start,
|
start : expr.start,
|
||||||
end : expr.end,
|
end : expr.end,
|
||||||
expression : new Cola.AST_SymbolRef({ name : "$_cola_expr" }),
|
expression : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" }),
|
||||||
property : expr instanceof Cola.AST_ArrayRange ? expr : ( expr.elements.length == 0 ? new Cola.AST_Noop() : expr.elements[0] )
|
property : expr instanceof Cola.AST_ArrayRange ? expr : ( expr.elements.length == 0 ? new Cola.AST_Noop() : expr.elements[0] )
|
||||||
});
|
});
|
||||||
else
|
else
|
||||||
expr = new Cola.AST_Dot({
|
expr = new Cola.AST_Dot({
|
||||||
start : expr.start,
|
start : expr.start,
|
||||||
end : expr.end,
|
end : expr.end,
|
||||||
expression : new Cola.AST_SymbolRef({ name : "$_cola_expr" }),
|
expression : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" }),
|
||||||
property : expr.name
|
property : expr.name
|
||||||
});
|
});
|
||||||
|
|
||||||
if( Parent instanceof Cola.AST_Call || Parent instanceof Cola.AST_Dot ||
|
if( Parent instanceof Cola.AST_Call || Parent instanceof Cola.AST_PropAccess) Parent.expression = expr;
|
||||||
Parent instanceof Cola.AST_Sub || Parent instanceof Cola.AST_Cascade) Parent.expression = expr;
|
|
||||||
else
|
else
|
||||||
if(Parent instanceof Cola.AST_Binary) Parent.left = expr;
|
if(Parent instanceof Cola.AST_Binary) Parent.left = expr;
|
||||||
}
|
}
|
||||||
|
|
@ -950,7 +1116,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
});
|
});
|
||||||
|
|
||||||
props.body.push(new Cola.AST_Return({
|
props.body.push(new Cola.AST_Return({
|
||||||
value : new Cola.AST_SymbolRef({ name : "$_cola_expr" })
|
value : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" })
|
||||||
}));
|
}));
|
||||||
|
|
||||||
props = {
|
props = {
|
||||||
|
|
@ -972,8 +1138,8 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
var c = obj[0], b = obj[1][0], b2 = obj[1][1], $_cola_i = obj.length - 1, a = obj[$_cola_i++].key;
|
var c = obj[0], b = obj[1][0], b2 = obj[1][1], _ColaRuntime$$i = obj.length - 1, a = obj[_ColaRuntime$$i++].key;
|
||||||
var $_cola_tmp = { key : "val" }, d = $_cola_tmp["key"];
|
var _ColaRuntime$$tmp = { key : "val" }, d = _ColaRuntime$$tmp["key"];
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/*if(node instanceof Cola.AST_Var){
|
/*if(node instanceof Cola.AST_Var){
|
||||||
|
|
@ -986,7 +1152,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
var Symbol = def.value instanceof Cola.AST_SymbolRef
|
var Symbol = def.value instanceof Cola.AST_SymbolRef
|
||||||
? def.value
|
? def.value
|
||||||
: new Cola.AST_SymbolRef({ name : "$_cola_tmp" });
|
: new Cola.AST_SymbolRef({ name : "_ColaRuntime$$tmp" });
|
||||||
if(!(def.value instanceof Cola.AST_SymbolRef)) defs.push(new Cola.AST_VarDef({
|
if(!(def.value instanceof Cola.AST_SymbolRef)) defs.push(new Cola.AST_VarDef({
|
||||||
type : node.type,
|
type : node.type,
|
||||||
name : new Cola.AST_SymbolVar(Symbol),
|
name : new Cola.AST_SymbolVar(Symbol),
|
||||||
|
|
@ -1148,7 +1314,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
var Symbol = node.right instanceof Cola.AST_SymbolRef
|
var Symbol = node.right instanceof Cola.AST_SymbolRef
|
||||||
? node.right
|
? node.right
|
||||||
: new Cola.AST_SymbolRef({ name : "$_cola_tmp" });
|
: new Cola.AST_SymbolRef({ name : "_ColaRuntime$$tmp" });
|
||||||
if(!(node.right instanceof Cola.AST_SymbolRef)) defs.push(new Cola.AST_VarDef({
|
if(!(node.right instanceof Cola.AST_SymbolRef)) defs.push(new Cola.AST_VarDef({
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
name : new Cola.AST_SymbolVar(Symbol),
|
name : new Cola.AST_SymbolVar(Symbol),
|
||||||
|
|
@ -1170,7 +1336,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
el.value = Cola.Constructions.SplatedConditional(symbol, uid, j, _.length - j - 1, _.length);
|
el.value = Cola.Constructions.SplatedConditional(symbol, uid, j, _.length - j - 1, _.length);
|
||||||
defs.push(el);
|
defs.push(el);
|
||||||
} else
|
} else
|
||||||
if((el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_Sub || el instanceof Cola.AST_Dot) && el.splated){
|
if((el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_PropAccess) && el.splated){
|
||||||
skiped = true;
|
skiped = true;
|
||||||
defs.push(new Cola.AST_VarDef({
|
defs.push(new Cola.AST_VarDef({
|
||||||
type : "int",
|
type : "int",
|
||||||
|
|
@ -1188,7 +1354,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
el.value = Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++);
|
el.value = Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++);
|
||||||
defs.push(el);
|
defs.push(el);
|
||||||
} else
|
} else
|
||||||
if(el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_Sub || el instanceof Cola.AST_Dot) defs.push(new Cola.AST_Assign({
|
if(el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_PropAccess) defs.push(new Cola.AST_Assign({
|
||||||
operator : node.operator,
|
operator : node.operator,
|
||||||
left : el,
|
left : el,
|
||||||
right : Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++)
|
right : Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++)
|
||||||
|
|
@ -1221,7 +1387,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
name : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolVar({ name : el.key }) : new Cola.AST_SymbolVar(el.value),
|
name : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolVar({ name : el.key }) : new Cola.AST_SymbolVar(el.value),
|
||||||
value : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
value : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
||||||
})); else
|
})); else
|
||||||
if(el.value instanceof Cola.AST_SymbolRef || el.value instanceof Cola.AST_Sub || el.value instanceof Cola.AST_Dot || el.value instanceof Cola.AST_Noop && el.start.type == "name") defs.push(new Cola.AST_Assign({
|
if(el.value instanceof Cola.AST_SymbolRef || el.value instanceof Cola.AST_PropAccess || el.value instanceof Cola.AST_Noop && el.start.type == "name") defs.push(new Cola.AST_Assign({
|
||||||
operator : node.operator,
|
operator : node.operator,
|
||||||
left : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolRef({ name : el.key }) : el.value,
|
left : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolRef({ name : el.key }) : el.value,
|
||||||
right : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
right : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
||||||
|
|
@ -1270,28 +1436,28 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
func((function($_cola_expr, arguments){
|
func((function(_ColaRuntime$$expr, arguments){
|
||||||
aname = $_cola_expr.a;
|
aname = _ColaRuntime$$expr.a;
|
||||||
bname = $_cola_expr.b;
|
bname = _ColaRuntime$$expr.b;
|
||||||
|
|
||||||
return $_cola_expr;
|
return _ColaRuntime$$expr;
|
||||||
}).call(this, obj, arguments))
|
}).call(this, obj, arguments))
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Assign && (node.left instanceof Cola.AST_ArrayTemplate || node.left instanceof Cola.AST_ObjectTemplate ||
|
if(node instanceof Cola.AST_Assign && (node.left instanceof Cola.AST_ArrayTemplate || node.left instanceof Cola.AST_ObjectTemplate ||
|
||||||
(node.left instanceof Cola.AST_Array || node.left instanceof Cola.AST_Object) && node.left.template)){
|
(node.left instanceof Cola.AST_Array || node.left instanceof Cola.AST_Object) && node.left.template)){
|
||||||
if(node.left.vardef) Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype, node.start);
|
if(node.left.vardef) Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype, node.start);
|
||||||
$_cola_hash[Cola.$_cola_arguments_def.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$arguments_def.i] = true;
|
||||||
|
|
||||||
var defs = [];
|
var defs = [];
|
||||||
|
|
||||||
var Symbol = new Cola.AST_SymbolRef({ name : "$_cola_expr" });
|
var Symbol = new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" });
|
||||||
|
|
||||||
(function _rec(def, symbol, uid){
|
(function _rec(def, symbol, uid){
|
||||||
var skiped = false, k = 0, is_arrayt = def instanceof Cola.AST_Array || def instanceof Cola.AST_ArrayTemplate, _ = is_arrayt ? def.elements : def.properties;
|
var skiped = false, k = 0, is_arrayt = def instanceof Cola.AST_Array || def instanceof Cola.AST_ArrayTemplate, _ = is_arrayt ? def.elements : def.properties;
|
||||||
_.forEach( is_arrayt
|
_.forEach( is_arrayt
|
||||||
? function(el, j){
|
? function(el, j){
|
||||||
if((el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_Sub || el instanceof Cola.AST_Dot) && el.splated){
|
if((el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_PropAccess && el.splated){
|
||||||
skiped = true;
|
skiped = true;
|
||||||
defs.push(new Cola.AST_VarDef({
|
defs.push(new Cola.AST_VarDef({
|
||||||
type : "int",
|
type : "int",
|
||||||
|
|
@ -1305,7 +1471,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
right : Cola.Constructions.SplatedConditional(symbol, uid, j, _.length - j - 1, _.length)
|
right : Cola.Constructions.SplatedConditional(symbol, uid, j, _.length - j - 1, _.length)
|
||||||
}));
|
}));
|
||||||
} else
|
} else
|
||||||
if(el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_Sub || el instanceof Cola.AST_Dot) defs.push(new Cola.AST_Assign({
|
if(el instanceof Cola.AST_SymbolRef || el instanceof Cola.AST_PropAccess) defs.push(new Cola.AST_Assign({
|
||||||
operator : node.operator,
|
operator : node.operator,
|
||||||
left : el,
|
left : el,
|
||||||
right : Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++)
|
right : Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++)
|
||||||
|
|
@ -1331,7 +1497,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
_rec(el, Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++), uid + "_");
|
_rec(el, Cola.Constructions.ValueWithOffset(symbol, uid, !skiped, j, k++), uid + "_");
|
||||||
}
|
}
|
||||||
: function(el, j){
|
: function(el, j){
|
||||||
if(el.value instanceof Cola.AST_SymbolRef || el.value instanceof Cola.AST_Sub || el.value instanceof Cola.AST_Dot || el.value instanceof Cola.AST_Noop && el.start.type == "name") defs.push(new Cola.AST_Assign({
|
if(el.value instanceof Cola.AST_SymbolRef || el.value instanceof Cola.AST_PropAccess || el.value instanceof Cola.AST_Noop && el.start.type == "name") defs.push(new Cola.AST_Assign({
|
||||||
operator : node.operator,
|
operator : node.operator,
|
||||||
left : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolRef({ name : el.key }) : el.value,
|
left : el.value instanceof Cola.AST_Noop ? new Cola.AST_SymbolRef({ name : el.key }) : el.value,
|
||||||
right : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
right : Cola.Constructions.ValueWithKey(el.start.type == "name" || el.start.type == "keyword", symbol, el.key)
|
||||||
|
|
@ -1348,7 +1514,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
argtype : "positional",
|
argtype : "positional",
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
defval : new Cola.AST_Noop(),
|
defval : new Cola.AST_Noop(),
|
||||||
name : new Cola.AST_SymbolFunarg({ name : "$_cola_expr", start : node.right.start, end : node.right.end })
|
name : new Cola.AST_SymbolFunarg({ name : "_ColaRuntime$$expr", start : node.right.start, end : node.right.end })
|
||||||
}), new Cola.AST_ArgDef({
|
}), new Cola.AST_ArgDef({
|
||||||
argtype : "positional",
|
argtype : "positional",
|
||||||
type : "dynamic",
|
type : "dynamic",
|
||||||
|
|
@ -1388,7 +1554,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
if(i == defs.length - 1) _(false);
|
if(i == defs.length - 1) _(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
props.body.push(new Cola.AST_Return({ value : new Cola.AST_SymbolRef({ name : "$_cola_expr" }) }));
|
props.body.push(new Cola.AST_Return({ value : new Cola.AST_SymbolRef({ name : "_ColaRuntime$$expr" }) }));
|
||||||
|
|
||||||
props = {
|
props = {
|
||||||
expression : new Cola.AST_Function(props),
|
expression : new Cola.AST_Function(props),
|
||||||
|
|
@ -1414,7 +1580,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_If && node.inline && !(parent instanceof Cola.AST_If && parent.inline)){
|
if(node instanceof Cola.AST_If && node.inline && !(parent instanceof Cola.AST_If && parent.inline)){
|
||||||
$_cola_hash[Cola.$_cola_arguments_def.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$arguments_def.i] = true;
|
||||||
|
|
||||||
var s = node;
|
var s = node;
|
||||||
|
|
||||||
|
|
@ -1466,7 +1632,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if(node instanceof Cola.AST_Switch && !(parent instanceof Cola.AST_Block)){
|
if(node instanceof Cola.AST_Switch && !(parent instanceof Cola.AST_Block)){
|
||||||
$_cola_hash[Cola.$_cola_arguments_def.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$arguments_def.i] = true;
|
||||||
|
|
||||||
node.body.forEach(function(branch){
|
node.body.forEach(function(branch){
|
||||||
if(!branch.body.length) return;
|
if(!branch.body.length) return;
|
||||||
|
|
@ -1706,7 +1872,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
});
|
});
|
||||||
|
|
||||||
if (node.args[1]){
|
if (node.args[1]){
|
||||||
$_cola_hash[Cola.$_cola_arguments_def.i] = true;
|
_ColaRuntime$$hash[Cola._ColaRuntime$$arguments_def.i] = true;
|
||||||
|
|
||||||
props = new Cola.AST_Dot({
|
props = new Cola.AST_Dot({
|
||||||
expression : props,
|
expression : props,
|
||||||
|
|
@ -1739,8 +1905,8 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){
|
||||||
_this.body = required.concat(_this.body);
|
_this.body = required.concat(_this.body);
|
||||||
|
|
||||||
if(options.std){
|
if(options.std){
|
||||||
for(var i in $_cola_hash) if($_cola_hash.hasOwnProperty(i))
|
for(var i in _ColaRuntime$$hash) if(_ColaRuntime$$hash.hasOwnProperty(i))
|
||||||
_this.body.unshift($_cola_ast.body[i]);
|
_this.body.unshift(_ColaRuntime$$ast.body[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _this;
|
return _this;
|
||||||
|
|
|
||||||
|
|
@ -372,6 +372,7 @@ Cola.Dictionary.prototype = {
|
||||||
Cola.clone = function (item) {
|
Cola.clone = function (item) {
|
||||||
if (item === undefined || item === null) return item;
|
if (item === undefined || item === null) return item;
|
||||||
if (item.__clone__ instanceof Function) return item.__clone__();
|
if (item.__clone__ instanceof Function) return item.__clone__();
|
||||||
|
if (item.clone instanceof Function) return item.clone();
|
||||||
|
|
||||||
var result, types = [ Number, String, Boolean ];
|
var result, types = [ Number, String, Boolean ];
|
||||||
for (var i in types)
|
for (var i in types)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user