source: Dev/trunk/src/client/dojox/lang/functional/listcomp.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 1.9 KB
Line 
1dojo.provide("dojox.lang.functional.listcomp");
2
3// This module adds high-level functions and related constructs:
4//      - list comprehensions similar to JavaScript 1.7
5
6// Notes:
7//      - listcomp() produces functions, which after the compilation step are
8//              as fast as regular JS functions (at least theoretically).
9
10(function(){
11        var g_re = /\bfor\b|\bif\b/gm;
12
13        var listcomp = function(/*String*/ s){
14                var frag = s.split(g_re), act = s.match(g_re),
15                        head = ["var r = [];"], tail = [], i = 0, l = act.length;
16                while(i < l){
17                        var a = act[i], f = frag[++i];
18                        if(a == "for" && !/^\s*\(\s*(;|var)/.test(f)){
19                                f = f.replace(/^\s*\(/, "(var ");
20                        }
21                        head.push(a, f, "{");
22                        tail.push("}");
23                }
24                return head.join("") + "r.push(" + frag[0] + ");" + tail.join("") + "return r;";        // String
25        };
26
27        dojo.mixin(dojox.lang.functional, {
28                buildListcomp: function(/*String*/ s){
29                        // summary:
30                        //              builds a function from a text snippet, which represents a valid
31                        //              JS 1.7 list comprehension, returns a string, which represents the function.
32                        // description:
33                        //              This method returns a textual representation of a function
34                        //              built from the list comprehension text snippet (conformant to JS 1.7).
35                        //              It is meant to be evaled in the proper context, so local variable can be
36                        //              pulled from the environment.
37                        return "function(){" + listcomp(s) + "}";       // String
38                },
39                compileListcomp: function(/*String*/ s){
40                        // summary:
41                        //              builds a function from a text snippet, which represents a valid
42                        //              JS 1.7 list comprehension, returns a function object.
43                        // description:
44                        //              This method returns a function built from the list
45                        //              comprehension text snippet (conformant to JS 1.7). It is meant to be
46                        //              reused several times.
47                        return new Function([], listcomp(s));   // Function
48                },
49                listcomp: function(/*String*/ s){
50                        // summary:
51                        //              executes the list comprehension building an array.
52                        return (new Function([], listcomp(s)))();       // Array
53                }
54        });
55})();
Note: See TracBrowser for help on using the repository browser.