Array arr[] operator added.
This commit is contained in:
parent
514d9e5f01
commit
b2bffc40cd
|
|
@ -184,10 +184,11 @@ ColaScript is a language that compiles in JavaScript. This language is similar t
|
|||
|
||||
|
||||
### Arrays
|
||||
- pushing
|
||||
- pushing and getting last, status: done
|
||||
|
||||
var arr = [3, 5, 6, 7];
|
||||
arr[] = 4; // [3, 5, 6, 7, 4]
|
||||
console.log(arr[]); // 4
|
||||
|
||||
- part assigment
|
||||
|
||||
|
|
|
|||
|
|
@ -24,12 +24,10 @@ main(){
|
|||
Array x, y;
|
||||
x = [123];
|
||||
y = clone x;
|
||||
y.push(321);
|
||||
console.log('original:',x,'cloned:',y);
|
||||
y[] = 321;
|
||||
console.log('original:',x,'cloned:',y, y[]);
|
||||
|
||||
y.forEach((val){
|
||||
console.log(val);
|
||||
});
|
||||
y.forEach((val) => console.log(val));
|
||||
|
||||
console.log("a is {{isset a ? 'set' : 'undefiend'}}, b is {{b?? ? 'set' : 'undefined'}}");
|
||||
|
||||
|
|
|
|||
|
|
@ -90,12 +90,10 @@
|
|||
Array x, y;
|
||||
x = [123];
|
||||
y = clone x;
|
||||
y.push(321);
|
||||
console.log('original:',x,'cloned:',y);
|
||||
y[] = 321;
|
||||
console.log('original:',x,'cloned:',y, y[]);
|
||||
|
||||
y.forEach((val){
|
||||
console.log(val);
|
||||
});
|
||||
y.forEach((val) => console.log(val));
|
||||
|
||||
console.log("a is {{isset a ? 'set' : 'undefiend'}}, b is {{b?? ? 'set' : 'undefined'}}");
|
||||
|
||||
|
|
@ -166,6 +164,8 @@ main();</textarea>
|
|||
} catch(e){
|
||||
translationArea.value = '';
|
||||
resultArea.value = '';
|
||||
|
||||
throw e;
|
||||
}
|
||||
|
||||
document.querySelector('#lenstat').innerHTML = sourceArea.value.length+" : "+translationArea.value.length+" : "+resultArea.value.length;
|
||||
|
|
|
|||
13
lib/parse.js
13
lib/parse.js
|
|
@ -705,10 +705,15 @@ Cola.Tokenizer.prototype.next_token = function (force_regexp) {
|
|||
|
||||
return this.token("punc", this.next());
|
||||
}
|
||||
if (!this.is_js && ch + this.peek(1) == '=>') return this.next(), this.next(), this.token("punc", "=>");
|
||||
if (!this.is_js && ch == '@') return this.read_at();
|
||||
|
||||
if (!this.is_js) {
|
||||
if (ch == 'r' && (this.peek(1) == '"' || this.peek(1) == "'" || this.peek(1) == '`')) return this.next(), this.read_string(true);
|
||||
if (ch + this.peek(1) == '=>') return this.next(), this.next(), this.token("punc", "=>");
|
||||
if (ch + this.peek(1) == '..') return this.next(), this.next(), this.token("punc", "..");
|
||||
if (ch == '@') return this.read_at();
|
||||
}
|
||||
|
||||
if (Cola.OPERATOR_CHARS(ch)) return this.read_operator();
|
||||
if (!this.is_js && ch == 'r' && (this.peek(1) == '"' || this.peek(1) == "'" || this.peek(1) == '`')) return this.next(), this.read_string(true);
|
||||
if (code == 92 || Cola.is_identifier_start(code)) return this.read_word();
|
||||
this.parse_error("Unexpected character '" + ch + "'");
|
||||
};
|
||||
|
|
@ -1680,7 +1685,7 @@ Cola.Parser.prototype.subscripts = function(expr, allow_calls) {
|
|||
}
|
||||
if (this.is("punc", "[")) {
|
||||
this.next();
|
||||
var prop = this.expression(true);
|
||||
var prop = !this.is_js && this.is("punc", "]") ? new Cola.AST_Noop() : this.expression(true);
|
||||
this.expect("]");
|
||||
return this.subscripts(new Cola.AST_Sub({
|
||||
start : start,
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ function $_cola_isntset(_object){
|
|||
}
|
||||
$_cola_isntset.i = 4;
|
||||
|
||||
function $_cola_clone(_item) {
|
||||
function $_cola_clone(_item){
|
||||
if (_item === undefined || _item === null) return _item;
|
||||
if (_item.__clone__ instanceof Function) return _item.__clone__();
|
||||
|
||||
|
|
@ -96,4 +96,9 @@ function $_cola_clone(_item) {
|
|||
}
|
||||
$_cola_clone.i = 5;
|
||||
|
||||
$_cola = $_cola_is + $_cola_isnt + $_cola_modulo + $_cola_isset + $_cola_isntset + $_cola_clone;
|
||||
function $_cola_array_last(_array){
|
||||
return _array[_array.length - 1];
|
||||
}
|
||||
$_cola_array_last.i = 6;
|
||||
|
||||
$_cola = $_cola_is + $_cola_isnt + $_cola_modulo + $_cola_isset + $_cola_isntset + $_cola_clone + $_cola_array_last;
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
|
|||
|
||||
var $_cola_ast = Cola.parse($_cola, { is_js : true}), $_cola_hash = {}, _this,
|
||||
tt = new Cola.TreeTransformer(null, function(node){
|
||||
var newNode, props;
|
||||
var newNode, props, parent = this.parent();
|
||||
|
||||
if(node instanceof Cola.AST_Binary && node.operator == '**'){
|
||||
props = {
|
||||
|
|
@ -207,6 +207,41 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(){
|
|||
node = new Cola.AST_Call(props);
|
||||
} else
|
||||
|
||||
if(node instanceof Cola.AST_Assign && node.operator == "=" &&
|
||||
node.left instanceof Cola.AST_Sub && node.left.property instanceof Cola.AST_Noop){
|
||||
|
||||
props = {
|
||||
property : "push",
|
||||
start : node.left.start,
|
||||
end : new Cola.AST_Token({ nlb : false, type : 'name', value : 'push' }),
|
||||
expression : node.left.expression
|
||||
};
|
||||
props = {
|
||||
args : [node.right],
|
||||
start : props.start,
|
||||
end : new Cola.AST_Token({ nlb : false, type : 'punc', value : ')' }),
|
||||
expression : new Cola.AST_Dot(props)
|
||||
};
|
||||
|
||||
node = new Cola.AST_Call(props);
|
||||
} else
|
||||
|
||||
if(node instanceof Cola.AST_Sub && node.property instanceof Cola.AST_Noop && !(parent instanceof Cola.AST_Assign) && parent.operator != "=" && node != parent.left){
|
||||
$_cola_hash[$_cola_array_last.i] = true;
|
||||
props = {
|
||||
args : [node.expression],
|
||||
start : new Cola.AST_Token({ nlb : false, type : 'name', value : '$_cola_array_last' }),
|
||||
end : new Cola.AST_Token({ nlb : false, type : 'punc', value : ')' })
|
||||
};
|
||||
props.expression = new Cola.AST_SymbolRef({
|
||||
name : '$_cola_array_last',
|
||||
start : props.start,
|
||||
end : props.start
|
||||
});
|
||||
|
||||
node = new Cola.AST_Call(props);
|
||||
} else
|
||||
|
||||
if(node instanceof Cola.AST_StringTemplate){
|
||||
newNode = new Cola.AST_Binary({
|
||||
operator : '+',
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user