use AST_Lambda for object setters/getters
authorMihai Bazon <mihai@bazon.net>
Fri, 12 Oct 2012 07:11:01 +0000 (10:11 +0300)
committerMihai Bazon <mihai@bazon.net>
Fri, 12 Oct 2012 07:11:01 +0000 (10:11 +0300)
so that the optimization that drops the name if unused doesn't apply.
close #12

lib/parse.js

index a87e868..662e6dc 100644 (file)
@@ -880,14 +880,14 @@ function parse($TEXT, options) {
         });
     };
 
-    var function_ = function(in_statement) {
+    var function_ = function(in_statement, ctor) {
         var name = is("name") ? as_symbol(in_statement
                                           ? AST_SymbolDefun
                                           : AST_SymbolLambda) : null;
         if (in_statement && !name)
             unexpected();
         expect("(");
-        var ctor = in_statement ? AST_Defun : AST_Function;
+        if (!ctor) ctor = in_statement ? AST_Defun : AST_Function;
         return new ctor({
             name: name,
             argnames: (function(first, a){
@@ -1158,7 +1158,7 @@ function parse($TEXT, options) {
                     a.push(new AST_ObjectGetter({
                         start : start,
                         key   : name,
-                        value : function_(false),
+                        value : function_(false, AST_Lambda),
                         end   : prev()
                     }));
                     continue;
@@ -1167,7 +1167,7 @@ function parse($TEXT, options) {
                     a.push(new AST_ObjectSetter({
                         start : start,
                         key   : name,
-                        value : function_(false),
+                        value : function_(false, AST_Lambda),
                         end   : prev()
                     }));
                     continue;