art
Version:
Cross-browser Vector Graphics
45 lines (37 loc) • 1.18 kB
JavaScript
var AST = require('./program');
AST.Function = function(name, args, variables, statements){
if (typeof name != 'string'){
statements = variables;
variables = args;
args = name;
name = null;
}
if (statements instanceof AST.Expression) statements = new AST.Return(statements);
statements = AST.Block(statements);
this.name = name;
this.arguments = args;
this.statements = statements;
this.variables = variables;
};
AST.Function.prototype = new AST.Expression();
AST.Function.prototype.writeTo = function(write, format){
write(this.name ? 'function ' + this.name + '(' : 'function(');
if (this.arguments){
for (var i = 0, l = this.arguments.length; i < l; i++){
if (i > 0) write(', ');
write(this.arguments[i].name);
}
}
write('){\n');
this.statements.writeTo(write, format);
write('}');
};
AST.Function.prototype.compile = function(){
var l = this.arguments.length,
args = new Array(l + 1),
body = [];
for (var i = 0; i < l; i++) args[i] = this.arguments[i].name;
this.statements.writeTo(function(str){ body.push(str); });
args[l] = body.join('');
return Function.apply(Function, args);
};