Changeset 787:157b2f77f1ad in livinglogic.java.ul4

Show
Ignore:
Timestamp:
01/27/13 09:39:52 (7 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Move unpackVariable to EvaluationContext?.

Location:
src/main/java/com/livinglogic/ul4
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • src/main/java/com/livinglogic/ul4/DictComprehension.java

    r784 r787  
    6969        while (iter.hasNext()) 
    7070        { 
    71             Utils.unpackVariable(context.getVariables(), varname, iter.next()); 
     71            context.unpackVariable(varname, iter.next()); 
    7272 
    7373            if (condition == null || FunctionBool.call(condition.decoratedEvaluate(context))) 
  • src/main/java/com/livinglogic/ul4/EvaluationContext.java

    r784 r787  
    1212import java.util.Map; 
    1313import java.util.Stack; 
     14import java.util.Iterator; 
    1415 
    1516import static com.livinglogic.utils.MapUtils.makeMap; 
     
    181182    { 
    182183        variables.remove(key); 
     184    } 
     185 
     186    public void unpackVariable(Object varname, Object item) 
     187    { 
     188        if (varname instanceof String) 
     189        { 
     190            put((String)varname, item); 
     191        } 
     192        else 
     193        { 
     194            Iterator<Object> itemIter = Utils.iterator(item); 
     195            java.util.List varnames = (java.util.List)varname; 
     196            int varnameCount = varnames.size(); 
     197 
     198            for (int i = 0;;++i) 
     199            { 
     200                if (itemIter.hasNext()) 
     201                { 
     202                    if (i < varnameCount) 
     203                    { 
     204                        unpackVariable(varnames.get(i), itemIter.next()); 
     205                    } 
     206                    else 
     207                    { 
     208                        throw new UnpackingException("mismatched for loop unpacking: " + varnameCount + " varnames, >" + i + " items"); 
     209                    } 
     210                } 
     211                else 
     212                { 
     213                    if (i < varnameCount) 
     214                    { 
     215                        throw new UnpackingException("mismatched for loop unpacking: " + varnameCount + "+ varnames, " + i + " items"); 
     216                    } 
     217                    else 
     218                    { 
     219                        break; 
     220                    } 
     221                } 
     222            } 
     223        } 
    183224    } 
    184225 
  • src/main/java/com/livinglogic/ul4/For.java

    r784 r787  
    7878        while (iter.hasNext()) 
    7979        { 
    80             Utils.unpackVariable(context.getVariables(), varname, iter.next()); 
     80            context.unpackVariable(varname, iter.next()); 
    8181 
    8282            try 
  • src/main/java/com/livinglogic/ul4/GeneratorExpression.java

    r784 r787  
    103103            while (iterator.hasNext()) 
    104104            { 
    105                 Utils.unpackVariable(context.getVariables(), varname, iterator.next()); 
     105                context.unpackVariable(varname, iterator.next()); 
    106106                boolean use; 
    107107                if (condition == null) 
  • src/main/java/com/livinglogic/ul4/ListComprehension.java

    r784 r787  
    6666        while (iter.hasNext()) 
    6767        { 
    68             Utils.unpackVariable(context.getVariables(), varname, iter.next()); 
     68            context.unpackVariable(varname, iter.next()); 
    6969 
    7070            if (condition == null || FunctionBool.call(condition.decoratedEvaluate(context))) 
  • src/main/java/com/livinglogic/ul4/StoreVar.java

    r784 r787  
    6060    public Object evaluate(EvaluationContext context) throws IOException 
    6161    { 
    62         Utils.unpackVariable(context.getVariables(), varname, value.decoratedEvaluate(context)); 
     62        context.unpackVariable(varname, value.decoratedEvaluate(context)); 
    6363        return null; 
    6464    } 
  • src/main/java/com/livinglogic/ul4/Utils.java

    r786 r787  
    245245    } 
    246246 
    247     public static void unpackVariable(Map<String, Object> variables, Object varname, Object item) 
    248     { 
    249         if (varname instanceof String) 
    250         { 
    251             if ("self".equals(varname)) 
    252                 throw new RuntimeException("can't assign to self"); 
    253             variables.put((String)varname, item); 
    254         } 
    255         else 
    256         { 
    257             Iterator<Object> itemIter = Utils.iterator(item); 
    258             java.util.List varnames = (java.util.List)varname; 
    259             int varnameCount = varnames.size(); 
    260  
    261             for (int i = 0;;++i) 
    262             { 
    263                 if (itemIter.hasNext()) 
    264                 { 
    265                     if (i < varnameCount) 
    266                     { 
    267                         unpackVariable(variables, varnames.get(i), itemIter.next()); 
    268                     } 
    269                     else 
    270                     { 
    271                         throw new UnpackingException("mismatched for loop unpacking: " + varnameCount + " varnames, >" + i + " items"); 
    272                     } 
    273                 } 
    274                 else 
    275                 { 
    276                     if (i < varnameCount) 
    277                     { 
    278                         throw new UnpackingException("mismatched for loop unpacking: " + varnameCount + "+ varnames, " + i + " items"); 
    279                     } 
    280                     else 
    281                     { 
    282                         break; 
    283                     } 
    284                 } 
    285             } 
    286         } 
    287     } 
    288  
    289247    public static SimpleDateFormat isoDateFormatter = new SimpleDateFormat("yyyy-MM-dd"); 
    290248    public static SimpleDateFormat isoDateTime1Formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");