art
Version:
Cross-browser Vector Graphics
46 lines (38 loc) • 1.23 kB
JavaScript
var AST = require('./program');
AST.Block = function(obj){
if (this instanceof AST.Block){
if (Object.prototype.toString.call(obj) == '[object Array]')
this.statements = Array.prototype.slice.call(obj);
else
this.statements = Array.prototype.slice.call(arguments);
return;
}
if (obj instanceof AST.Block) return obj;
var block = new AST.Block();
if (Object.prototype.toString.call(obj) == '[object Array]')
block.statements = Array.prototype.slice.call(obj);
else
block.statements = [obj];
return block;
};
AST.Block.prototype = {
writeTo: function(writer, format, curly){
var body = this.statements;
if (!body || !body.length) return;
for (var i = 0, l = body.length; i < l; i++){
var expr = body[i];
if (!(expr instanceof AST.Statement)) body[i] = expr = new AST.Literal(expr);
if (expr instanceof AST.Assignment && expr.left instanceof AST.Variable) writer('var '); // Temp hack - breaks sometimes
expr.writeTo(writer, format);
writer(';\n');
}
},
toString: function(format){
var output = [];
this.writeTo(function(str){
output.push(str);
}, format);
return output.join('');
}
};
AST.prototype = AST.Block.prototype;