pogo
Version:
A readable, DSL friendly programming language that compiles to JavaScript
139 lines (129 loc) • 7.11 kB
JavaScript
var cg = require('../codeGenerator');
exports.codeGenerator = function (options) {
var codegen = {};
var term = require('../terms/terms')(codegen);
codegen.term = term.term;
codegen.termPrototype = term.termPrototype;
codegen.moduleConstants = new (require('../moduleConstants')(codegen));
codegen.generatedVariable = require('../terms/generatedVariable')(codegen);
codegen.definition = require('../terms/definition')(codegen);
codegen.javascript = require('../terms/javascript')(codegen);
codegen.basicExpression = require('./basicExpression');
codegen.splatArguments = require('../terms/splatArguments')(codegen);
codegen.variable = require('../terms/variable')(codegen);
codegen.selfExpression = require('../terms/selfExpression')(codegen);
codegen.statements = require('../terms/statements')(codegen);
codegen.asyncStatements = require('../terms/asyncStatements')(codegen);
codegen.subStatements = require('../terms/subStatements')(codegen);
codegen.closure = require('../terms/closure')(codegen);
codegen.normalParameters = require('../terms/normalParameters')(codegen);
codegen.splatParameters = require('../terms/splatParameters')(codegen);
codegen.block = codegen.closure;
codegen.parameters = require('../terms/parameters')(codegen);
codegen.identifier = require('../terms/identifier')(codegen);
codegen.integer = require('../terms/integer')(codegen);
codegen.float = require('../terms/float')(codegen);
codegen.normaliseString = cg.normaliseString;
codegen.unindent = cg.unindent;
codegen.normaliseInterpolatedString = cg.normaliseInterpolatedString;
codegen.string = require('../terms/string')(codegen);
codegen.interpolatedString = require('../terms/interpolatedString')(codegen);
codegen.normaliseRegExp = cg.normaliseRegExp;
codegen.regExp = require('../terms/regExp')(codegen);
codegen.parseRegExp = cg.parseRegExp;
codegen.module = require('../terms/module')(codegen);
codegen.interpolation = cg.interpolation;
codegen.list = require('../terms/list')(codegen);
codegen.normaliseArguments = cg.normaliseArguments;
codegen.argumentList = require('../terms/argumentList')(codegen);
codegen.subExpression = require('../terms/subExpression')(codegen);
codegen.fieldReference = require('../terms/fieldReference')(codegen);
codegen.hash = require('../terms/hash')(codegen);
codegen.asyncArgument = require('../terms/asyncArgument')(codegen);
codegen.futureArgument = require('../terms/futureArgument')(codegen);
codegen.complexExpression = require('./complexExpression');
codegen.operatorExpression = require('../parser/operatorExpression')(codegen);
codegen.unaryOperatorExpression = require('../parser/unaryOperatorExpression')(codegen);
codegen.operator = require('../terms/operator')(codegen);
codegen.callback = require('../terms/callback')(codegen);
codegen.splat = require('../terms/splat')(codegen);
codegen.range = require('../terms/range')(codegen);
codegen.hashEntry = require('../terms/hashEntry')(codegen);
codegen.concatName = cg.concatName;
codegen.parseSplatParameters = cg.parseSplatParameters;
codegen.collapse = cg.collapse;
codegen.functionCall = require('../terms/functionCall')(codegen);
codegen.scope = require('../terms/scope')(codegen);
codegen.SymbolScope = require('../symbolScope').SymbolScope;
codegen.macroDirectory = require('../macroDirectory')(codegen);
codegen.boolean = require('../terms/boolean')(codegen);
codegen.increment = require('../terms/increment')(codegen);
codegen.typeof = require('../terms/typeof')(codegen);
codegen.tryExpression = require('../terms/tryExpression')(codegen);
codegen.ifExpression = require('../terms/ifExpression')(codegen);
codegen.nil = require('../terms/nil')(codegen);
codegen.continueStatement = require('../terms/continueStatement')(codegen);
codegen.breakStatement = require('../terms/breakStatement')(codegen);
codegen.throwStatement = require('../terms/throwStatement')(codegen);
codegen.returnStatement = require('../terms/returnStatement')(codegen);
codegen.methodCall = require('../terms/methodCall')(codegen);
codegen.asyncResult = require('../terms/asyncResult')(codegen);
codegen.indexer = require('../terms/indexer')(codegen);
codegen.whileExpression = require('../terms/whileExpression')(codegen);
codegen.whileStatement = codegen.whileExpression;
codegen.withExpression = require('../terms/withExpression')(codegen);
codegen.withStatement = codegen.withExpression;
codegen.forExpression = require('../terms/forExpression')(codegen);
codegen.forStatement = codegen.forExpression;
codegen.forIn = require('../terms/forIn')(codegen);
codegen.forEach = require('../terms/forEach')(codegen);
codegen.newOperator = require('../terms/newOperator')(codegen);
codegen.generator = require('../terms/generator')(codegen);
codegen.listComprehension = require('../terms/listComprehension')(codegen);
codegen.loc = loc;
codegen.asyncCallback = require('../terms/asyncCallback')(codegen);
codegen.continuationOrDefault = require('../terms/continuationOrDefault')(codegen);
codegen.continuationFunction = codegen.variable(['continuation'], {couldBeMacro: false});
codegen.continuationFunction.isContinuation = true;
codegen.onFulfilledFunction = codegen.generatedVariable(['onFulfilled'], {couldBeMacro: false, tag: 'onFulfilled'});
codegen.onFulfilledFunction.isContinuation = true;
codegen.onRejectedFunction = codegen.generatedVariable(['onRejected'], {couldBeMacro: false, tag: 'onRejected'});
codegen.callbackFunction = codegen.generatedVariable(['callback'], {couldBeMacro: false});
codegen.resolveFunction = codegen.generatedVariable(['resolve'], {couldBeMacro: false});
codegen.resolve = require('../resolve')(codegen);
codegen.newPromise = require('../terms/newPromise')(codegen);
codegen.promise = require('../terms/promise')(codegen);
codegen.createPromise = require('../terms/createPromise')(codegen);
codegen.promisify = require('../terms/promisify')(codegen);
codegen.optional = cg.optional;
codegen.postIncrement = cg.postIncrement;
codegen.oldTerm = cg.oldTerm;
codegen.semanticError = require('../terms/semanticError')(codegen);
codegen.errors = require('./errors').errors(codegen);
codegen.macros = require('./macros').macros(codegen);
codegen.listMacros = require('./listMacros')(codegen);
codegen.argumentUtils = require('../terms/argumentUtils')(codegen);
codegen.closureParameterStrategies = require('../terms/closureParameterStrategies')(codegen);
codegen.promisesModule = promisesModule(options);
return codegen;
};
function promisesModule(options) {
var moduleName = (options && options.promises) || 'none';
if (moduleName === 'none') {
return undefined;
} else {
return moduleName;
}
}
var loc = function (term, location) {
var loc = {
firstLine: location.first_line,
lastLine: location.last_line,
firstColumn: location.first_column,
lastColumn: location.last_column
};
term.location = function () {
return loc;
};
return term;
};