UNPKG

pogo

Version:

A readable, DSL friendly programming language that compiles to JavaScript

62 lines 2.97 kB
(function() { var self = this; module.exports = function(terms) { var self = this; return terms.term({ constructor: function(target, source, gen1_options) { var self = this; var async, shadow, assignment; async = gen1_options !== void 0 && Object.prototype.hasOwnProperty.call(gen1_options, "async") && gen1_options.async !== void 0 ? gen1_options.async : false; shadow = gen1_options !== void 0 && Object.prototype.hasOwnProperty.call(gen1_options, "shadow") && gen1_options.shadow !== void 0 ? gen1_options.shadow : false; assignment = gen1_options !== void 0 && Object.prototype.hasOwnProperty.call(gen1_options, "assignment") && gen1_options.assignment !== void 0 ? gen1_options.assignment : false; self.isDefinition = true; self.target = target; self.source = source; self.isAsync = async; self.shadow = shadow; self.global = false; return self.isAssignment = assignment; }, expression: function() { var self = this; return self; }, parameter: function() { var self = this; return self; }, hashEntry: function() { var self = this; return self.cg.hashEntry(self.target.hashEntryField(), self.source); }, generate: function(scope) { var self = this; return self.code(self.target.generateTarget(scope), "=", self.source.generate(scope)); }, defineVariables: function(scope) { var self = this; var name; name = self.target.canonicalName(scope); if (name) { if (!self.isAssignment) { if (scope.isDefined(name) && !self.shadow) { return terms.errors.addTermWithMessage(self, "variable " + self.target.displayName() + " is already defined, use := to reassign it"); } else if (!self.global) { return self.target.declare(scope); } } else if (!scope.isDefined(name)) { return terms.errors.addTermWithMessage(self, "variable " + self.target.displayName() + " is not defined, use = to define it"); } } }, makeAsyncWithCallbackForResult: function(createCallbackForResult) { var self = this; var callback; if (self.isAsync) { callback = createCallbackForResult(self.target); return self.source.makeAsyncCallWithCallback(callback); } } }); }; }).call(this);