Skip to content

Commit

Permalink
Refactor to use Compiler constructor.
Browse files Browse the repository at this point in the history
  • Loading branch information
zaach committed Jul 18, 2010
1 parent f65e5b0 commit ce8dfb9
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 57 deletions.
38 changes: 23 additions & 15 deletions lib/harmony.js
Expand Up @@ -3,34 +3,42 @@ var protoParser = require("./harmony/parser").parser,
js = require("./js"),
nodes = require("./js/nodes"),
codegen = require("./js/codegen"),
harmonyNodes = require("./harmony/nodes");
//harmonyCodegen = require("./harmony/codegen");
harmonyNodes = require("./harmony/nodes"),
harmonyCodegen = require("./harmony/codegen");

var constructors = {},
prototypes = {};
function Compiler () {
var constructors = {},
prototypes = {};

// Define AST nodes
var def = nodes.defineNodes(prototypes, constructors);
harmonyNodes.defineNodes(prototypes, constructors, def);
// Define AST nodes
var def = nodes.defineNodes(prototypes, constructors);
harmonyNodes.defineNodes(prototypes, constructors, def);

// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);
//harmonyCodegen.extend(prototypes);
// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);
harmonyCodegen.extend(prototypes);

exports.Parser = js.baseParser(protoParser, constructors, prototypes);
var parser = exports.parser = new exports.Parser();
this.Parser = js.baseParser(protoParser, constructors, prototypes);
this.parser = new this.Parser();
}

var parse = exports.parse = function (source) {
return parser.parse(source);
Compiler.prototype = js.Compiler.prototype;

exports.Compiler = Compiler;

// Convienience API
exports.parse = function (source) {
return new Compiler().parse(source);
};

exports.toJS = function (ast) {
var s = ast.toJS(0);
//print(s);
return s;
};

exports.compile = function (source) {
var s = parse(source).toJS(0);
var s = new Compiler.parse(source).toJS(0);
return s;
};

52 changes: 32 additions & 20 deletions lib/js.js
Expand Up @@ -3,44 +3,56 @@ var protoParser = require("./js/parser").parser,
nodes = require("./js/nodes"),
codegen = require("./js/codegen");



// TODO
function Compiler () {
this.parser = new exports.Parser();
}
var constructors = {},
prototypes = {};

var constructors = {},
prototypes = {};
// Define AST nodes
nodes.defineNodes(prototypes, constructors);

// Define AST nodes
nodes.defineNodes(prototypes, constructors);
// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);

// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);
// Create a parser constructor and an instance
this.Parser = exports.baseParser(protoParser, constructors, prototypes);
this.parser = new this.Parser();
}

Compiler.prototype = {
parse: function (source) {
return new this.Parser().parse(source);
},
toJS: function (ast) {
var s = ast.toJS(0);
return s;
},
compile: function (source) {
var s = parse(source).toJS(0);
return s;
}
};

// Create a parser constructor and an instance
exports.Parser = baseParser(protoParser, constructors, prototypes);
var parser = exports.parser = new exports.Parser();
exports.Compiler = Compiler;

var parse = exports.parse = function (source) {
return parser.parse(source);
// Convienience API
exports.parse = function (source) {
return new Compiler().parse(source);
};

exports.toJS = function (ast) {
var s = ast.toJS(0);
//print(s);
return s;
};

exports.compile = function (source) {
var s = parse(source).toJS(0);
exports.compile = exports.cliCompile = function (source) {
var s = new Compiler().parse(source).toJS(0);
return s;
};

exports.baseParser = baseParser;

// Creates JavaScript parser factories
function baseParser (parser, constructors, prototypes) {
exports.baseParser = function baseParser (parser, constructors, prototypes) {
function Parser () { }

Parser.prototype = parser;
Expand Down
35 changes: 22 additions & 13 deletions lib/objj.js
Expand Up @@ -6,31 +6,40 @@ var protoParser = require("./objj/parser").parser,
cpnodes = require("./objj/cpnodes"),
cpcodegen = require("./objj/cpcodegen");

var constructors = {},
prototypes = {};

// Define AST nodes
var def = nodes.defineNodes(prototypes, constructors);
cpnodes.defineNodes(prototypes, constructors, def);
function Compiler () {
var constructors = {},
prototypes = {};

// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);
cpcodegen.extend(prototypes);
// Define AST nodes
var def = nodes.defineNodes(prototypes, constructors);
cpnodes.defineNodes(prototypes, constructors, def);

exports.Parser = js.baseParser(protoParser, constructors, prototypes);
var parser = exports.parser = new exports.Parser();
// extend nodes with JavaScript code generation methods
codegen.extend(prototypes);
cpcodegen.extend(prototypes);

var parse = exports.parse = function (source) {
return parser.parse(source);
this.Parser = js.baseParser(protoParser, constructors, prototypes);
this.parser = new this.Parser();
}

Compiler.prototype = js.Compiler.prototype;

exports.Compiler = Compiler;

// Convienience API
exports.parse = function (source) {
return new Compiler().parse(source);
};

exports.toJS = function (ast) {
var s = ast.toJS(0);
//print(s);
return s;
};

exports.compile = function (source) {
var s = parse(source).toJS(0);
var s = new Compiler().parse(source).toJS(0);
return s;
};

17 changes: 8 additions & 9 deletions tests/setup.js
@@ -1,13 +1,12 @@
var C;
if (typeof objj !== 'undefined') { //hacky
exports.parser = require("../lib/objj").parser;
exports.parse = require("../lib/objj").parse;
exports.toJS = require("../lib/objj").toJS;
C = require("../lib/objj").Compiler;
} else if (typeof harmony !== 'undefined') {
exports.parser = require("../lib/harmony").parser;
exports.parse = require("../lib/harmony").parse;
exports.toJS = require("../lib/harmony").toJS;
C = require("../lib/harmony").Compiler;
} else {
exports.parser = require("../lib/js").parser;
exports.parse = require("../lib/js").parse;
exports.toJS = require("../lib/js").toJS;
C = require("../lib/js").Compiler;
}
var compiler = new C;
exports.parser = compiler.parser;
exports.parse = function (s) {return exports.parser.parse(s);};
exports.toJS = compiler.toJS;

0 comments on commit ce8dfb9

Please sign in to comment.