Sha256: bbf6b57fc5eec0fb895eced6a47f78171c41fb8a570bc5286991aa581c9b7d55

Contents?: true

Size: 1.91 KB

Versions: 5

Compression:

Stored size: 1.91 KB

Contents

dojo.provide("dojox.lang.functional.listcomp");

// This module adds high-level functions and related constructs:
//	- list comprehensions similar to JavaScript 1.7

// Notes:
//	- listcomp() produces functions, which after the compilation step are 
//		as fast as regular JS functions (at least theoretically).

(function(){
	var g_re = /\bfor\b|\bif\b/gm;

	var listcomp = function(/*String*/ s){
		var frag = s.split(g_re), act = s.match(g_re),
			head = ["var r = [];"], tail = [];
		for(var i = 0; i < act.length;){
			var a = act[i], f = frag[++i];
			if(a == "for" && !/^\s*\(\s*(;|var)/.test(f)){
				f = f.replace(/^\s*\(/, "(var ");
			}
			head.push(a, f, "{");
			tail.push("}");
		}
		return head.join("") + "r.push(" + frag[0] + ");" + tail.join("") + "return r;";	// String
	};

	dojo.mixin(dojox.lang.functional, {
		buildListcomp: function(/*String*/ s){
			// summary: builds a function from a text snippet, which represents a valid
			//	JS 1.7 list comprehension, returns a string, which represents the function.
			// description: This method returns a textual representation of a function 
			//	built from the list comprehension text snippet (conformant to JS 1.7). 
			//	It is meant to be evaled in the proper context, so local variable can be 
			//	pulled from the environment.
			return "function(){" + listcomp(s) + "}";	// String
		},
		compileListcomp: function(/*String*/ s){
			// summary: builds a function from a text snippet, which represents a valid
			//	JS 1.7 list comprehension, returns a function object.
			// description: This method returns a function built from the list 
			//	comprehension text snippet (conformant to JS 1.7). It is meant to be 
			//	reused several times.
			return new Function([], listcomp(s));	// Function
		},
		listcomp: function(/*String*/ s){
			// summary: executes the list comprehension building an array.
			return (new Function([], listcomp(s)))();	// Array
		}
	});
})();

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dojo-pkg-1.111.0 data/dojo-release-1.1.1-src/dojox/lang/functional/listcomp.js
dojo-pkg-1.120.0 data/dojo-release-1.2.0-src/dojox/lang/functional/listcomp.js
dojo-pkg-1.121.0 data/dojo-release-1.2.1-src/dojox/lang/functional/listcomp.js
dojo-pkg-1.122.0 data/dojo-release-1.2.2-src/dojox/lang/functional/listcomp.js
dojo-pkg-1.123.0 data/dojo-release-1.2.3-src/dojox/lang/functional/listcomp.js