From 4f86fca3d70f820d07ba43b29f06ac75839acbaa Mon Sep 17 00:00:00 2001 From: David Majda Date: Fri, 20 Apr 2012 12:29:24 +0200 Subject: [PATCH] Make the code emitter a compiler pass This gives the compiler a more regular structure. --- src/compiler.js | 6 +++--- src/compiler/passes.js | 1 + src/compiler/{emitter.js => passes/generate-code.js} | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) rename src/compiler/{emitter.js => passes/generate-code.js} (99%) diff --git a/src/compiler.js b/src/compiler.js index 5c1fbc7..107929b 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -8,7 +8,8 @@ PEG.compiler = { "reportLeftRecursion", "removeProxyRules", "computeVarNames", - "computeParams" + "computeParams", + "generateCode" ], /* @@ -24,7 +25,7 @@ PEG.compiler = { that.passes[passName](ast, options); }); - var source = this.emitter(ast, options); + var source = ast.code; var result = eval(source); result._source = source; @@ -33,4 +34,3 @@ PEG.compiler = { }; // @include "compiler/passes.js" -// @include "compiler/emitter.js" diff --git a/src/compiler/passes.js b/src/compiler/passes.js index 9ca5205..7e46d30 100644 --- a/src/compiler/passes.js +++ b/src/compiler/passes.js @@ -12,3 +12,4 @@ PEG.compiler.passes = {}; // @include "passes/remove-proxy-rules.js" // @include "passes/compute-var-names.js" // @include "passes/compute-params.js" +// @include "passes/generate-code.js" diff --git a/src/compiler/emitter.js b/src/compiler/passes/generate-code.js similarity index 99% rename from src/compiler/emitter.js rename to src/compiler/passes/generate-code.js index 6752bb5..c1a7158 100644 --- a/src/compiler/emitter.js +++ b/src/compiler/passes/generate-code.js @@ -1,5 +1,5 @@ -/* Emits the generated code for the AST. */ -PEG.compiler.emitter = function(ast, options) { +/* Generates the parser code. */ +PEG.compiler.passes.generateCode = function(ast, options) { options = options || {}; if (options.cache === undefined) { options.cache = false; @@ -885,5 +885,5 @@ PEG.compiler.emitter = function(ast, options) { } }); - return emit(ast); + ast.code = emit(ast); };