Changeset 152:b32be2fcdbc4 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/17/08 19:58:35 (11 years ago)
Author:
Alexander Lamm <alexander.lamm@…>
Branch:
default
Message:

Implemented get methods and functions and corrected jump calculation for breaks and continues in for-blocks.

Location:
library/src/com/livinglogic/ul4
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • library/src/com/livinglogic/ul4/Main.java

    r144 r152  
    11package com.livinglogic.ul4; 
    22 
    3 import java.util.Date; 
    43import java.util.HashMap; 
    5 import java.util.Iterator; 
     4import java.util.Map; 
     5 
    66 
    77public class Main 
    88{ 
    9     public static long time() 
    10     { 
    11         return new Date().getTime(); 
    12     } 
    13  
    149    public static void main(String[] args) 
    1510    { 
    16         Template tmpl = Compiler.compile("<?for o in [None, True, False, 42, 4.2, 'fo\\'\"\\r\\n', now(), [0, 1, None], {1: 'eins', 2: 'zwei', 3: 'drei'}]?><?print csvescape(o)?>\n<?end for?>"); 
    17         long start = new Date().getTime(); 
    18         String output = tmpl.renders(); 
    19         System.out.println("rendered " + (time()-start)); 
     11        Template tmpl = Compiler.compile("<?print get('y')?>"); 
     12        long start = System.currentTimeMillis(); 
     13        Map map = new HashMap(); 
     14        map.put("x", "42"); 
     15        String output = tmpl.renders(map); 
     16        System.out.println("rendered " + (System.currentTimeMillis()-start)); 
    2017        System.out.println(output); 
    2118    } 
  • library/src/com/livinglogic/ul4/Opcode.java

    r144 r152  
    9090    public static final int CF1_RANGE = 21; 
    9191    public static final int CF1_CSVESCAPE = 22; 
     92    public static final int CF1_GET = 23; 
    9293 
    9394    public static final int CF2_RANGE = 0; 
     95    public static final int CF2_GET = 1; 
    9496 
    9597    public static final int CF3_RANGE = 0; 
     
    113115    public static final int CM1_FIND = 7; 
    114116    public static final int CM1_FORMAT = 8; 
     117    public static final int CM1_GET = 9; 
    115118 
    116119    public static final int CM2_REPLACE = 0; 
     120    public static final int CM2_GET = 1; 
    117121 
    118122    public int name; 
     
    309313        else if (name.equals("range")) 
    310314            return CF1_RANGE; 
    311         if (name.equals("csvescape")) 
     315        else if (name.equals("csvescape")) 
    312316            return CF1_CSVESCAPE; 
     317        else if (name.equals("get")) 
     318            return CF1_GET; 
    313319        else 
    314320            throw new UnknownFunctionException(name); 
     
    319325        if (name.equals("range")) 
    320326            return CF2_RANGE; 
     327        else if (name.equals("get")) 
     328            return CF2_GET; 
    321329        else 
    322330            throw new UnknownFunctionException(name); 
     
    375383        else if (name.equals("format")) 
    376384            return CM1_FORMAT; 
     385        else if (name.equals("get")) 
     386            return CM1_GET; 
    377387        else 
    378388            throw new UnknownMethodException(name); 
     
    383393        if (name.equals("replace")) 
    384394            return CM2_REPLACE; 
     395        else if (name.equals("get")) 
     396            return CM2_GET; 
    385397        else 
    386398            throw new UnknownMethodException(name); 
  • library/src/com/livinglogic/ul4/Template.java

    r148 r152  
    638638        if (!annotated) 
    639639        { 
    640             LinkedList stack = new LinkedList(); 
    641640            for (int i = 0; i < opcodes.size(); ++i) 
    642641            { 
     
    732731                    int j; 
    733732                    int jump; 
    734                     for (j = 0; i < breaks.size(); ++i) 
     733                    for (j = 0; j < breaks.size(); ++j) 
    735734                    { 
    736                         jump = ((Integer)breaks.get(i)).intValue(); 
     735                        jump = ((Integer)breaks.get(j)).intValue(); 
    737736                        ((Opcode)opcodes.get(jump)).jump = i; 
    738737                    } 
    739                     for (j = 0; i < continues.size(); ++i) 
     738                    for (j = 0; j < continues.size(); ++j) 
    740739                    { 
    741                         jump = ((Integer)continues.get(i)).intValue(); 
     740                        jump = ((Integer)continues.get(j)).intValue(); 
    742741                        ((Opcode)opcodes.get(jump)).jump = i; 
    743742                    } 
     
    11701169                                    reg[code.r1] = Utils.range(reg[code.r2]); 
    11711170                                    break; 
     1171                                case Opcode.CF1_GET: 
     1172                                    reg[code.r1] = variables.get(reg[code.r2]); 
     1173                                    break; 
    11721174                            } 
    11731175                            break; 
     
    11781180                                    reg[code.r1] = Utils.range(reg[code.r2], reg[code.r3]); 
    11791181                                    break; 
     1182                                case Opcode.CF2_GET: 
     1183                                    reg[code.r1] = variables.containsKey(reg[code.r2]) ? variables.get(reg[code.r2]) : reg[code.r3]; 
     1184                                    break; 
    11801185                            } 
    11811186                            break; 
     
    12471252                                    reg[code.r1] = Utils.format(reg[code.r2], reg[code.r3], defaultLocale); 
    12481253                                    break; 
     1254                                case Opcode.CM1_GET: 
     1255                                    reg[code.r1] = ((Map)reg[code.r2]).get(reg[code.r3]); 
     1256                                    break; 
    12491257                            } 
    12501258                            break; 
     
    12541262                                case Opcode.CM2_REPLACE: 
    12551263                                    reg[code.r1] = Utils.replace(reg[code.r2], reg[code.r3], reg[code.r4]); 
     1264                                    break; 
     1265                                case Opcode.CM2_GET: 
     1266                                    reg[code.r1] = ((Map)reg[code.r2]).containsKey(reg[code.r3]) ? ((Map)reg[code.r2]).get(reg[code.r3]) : reg[code.r4]; 
    12561267                                    break; 
    12571268                            }