Changeset 202:6f3968e7da58 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
02/15/09 19:40:10 (10 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add support for the render method to Template.

Location:
library/src/com/livinglogic/ul4
Files:
1 added
4 modified

Legend:

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

    r200 r202  
    99    public static void main(String[] args) 
    1010    { 
    11         Long c = new Long(42); 
    12         Template tmpl = Compiler.compile("<?print int('42', 16)?>"); 
    13         System.out.println(tmpl); 
     11        Template tmpl1 = Compiler.compile("<?print 2*x?>"); 
     12        Template tmpl2 = Compiler.compile("<?print 2*t.render(x=42)?>"); 
    1413        long start = System.currentTimeMillis(); 
    1514        Map vars = new HashMap(); 
    16         vars.put("c", c); 
    17         String output = tmpl.renders(vars); 
     15        vars.put("t", tmpl1); 
     16        String output = tmpl2.renders(vars); 
    1817        System.out.println("rendered " + (System.currentTimeMillis()-start)); 
    1918        System.out.println(output); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r200 r202  
    6060    public static final int OC_CALLMETH2 = 55; 
    6161    public static final int OC_CALLMETH3 = 56; 
    62     public static final int OC_IF = 57; 
    63     public static final int OC_ELSE = 58; 
    64     public static final int OC_ENDIF = 59; 
    65     public static final int OC_FOR = 60; 
    66     public static final int OC_ENDFOR = 61; 
    67     public static final int OC_BREAK = 62; 
    68     public static final int OC_CONTINUE = 63; 
    69     public static final int OC_RENDER = 64; 
     62    public static final int OC_CALLMETHKW = 57; 
     63    public static final int OC_IF = 58; 
     64    public static final int OC_ELSE = 59; 
     65    public static final int OC_ENDIF = 60; 
     66    public static final int OC_FOR = 61; 
     67    public static final int OC_ENDFOR = 62; 
     68    public static final int OC_BREAK = 63; 
     69    public static final int OC_CONTINUE = 64; 
     70    public static final int OC_RENDER = 65; 
    7071 
    7172    public static final int CF0_NOW = 0; 
     
    151152 
    152153    public static final int CM3_FIND = 0; 
     154 
     155    public static final int CMKW_RENDER = 0; 
    153156 
    154157    public int name; 
     
    277280        else if (name.equals("callmeth3")) 
    278281            return OC_CALLMETH3; 
     282        else if (name.equals("callmethkw")) 
     283            return OC_CALLMETHKW; 
    279284        else if (name.equals("if")) 
    280285            return OC_IF; 
     
    490495    { 
    491496        throw new UnknownMethodException(name); 
     497    } 
     498 
     499    public static int callmethkwname2code(String name) 
     500    { 
     501        if (name.equals("render")) 
     502            return CMKW_RENDER; 
     503        else 
     504            throw new UnknownMethodException(name); 
    492505    } 
    493506 
     
    606619        else if (code == OC_CALLMETH3) 
    607620            return "callmeth3"; 
     621        else if (code == OC_CALLMETHKW) 
     622            return "callmethkw"; 
    608623        else if (code == OC_IF) 
    609624            return "if"; 
     
    668683            case OC_CALLMETH3: 
    669684                this.argcode = callmeth3name2code(arg); 
     685                break; 
     686            case OC_CALLMETHKW: 
     687                this.argcode = callmethkwname2code(arg); 
    670688                break; 
    671689        } 
  • library/src/com/livinglogic/ul4/Template.java

    r200 r202  
    13391339                        case Opcode.OC_CALLMETH3: 
    13401340                            throw new UnknownMethodException(code.arg); 
     1341                        case Opcode.OC_CALLMETHKW: 
     1342                            switch (code.argcode) 
     1343                            { 
     1344                                case Opcode.CMKW_RENDER: 
     1345                                    reg[code.r1] = ((Template)reg[code.r2]).renders((Map)reg[code.r3]); 
     1346                                    break; 
     1347                                default: 
     1348                                    throw new UnknownMethodException(code.arg); 
     1349                            } 
     1350                            break; 
    13411351                        case Opcode.OC_RENDER: 
    13421352                            subTemplateIterator = ((Template)reg[code.r1]).render((Map)reg[code.r2]); 
     
    21422152                    } 
    21432153                    break; 
     2154                case Opcode.OC_CALLMETHKW: 
     2155                    switch (opcode.argcode) 
     2156                    { 
     2157                        case Opcode.CMKW_RENDER: 
     2158                            code(buffer, indent, "reg" + opcode.r1 + " = ''.join(reg" + opcode.r2 + "(**dict((key.encode(\"utf-8\"), value) for (key, value) in reg" + opcode.r3 + ".iteritems())))"); 
     2159                            break; 
     2160                    } 
     2161                    break; 
    21442162                case Opcode.OC_IF: 
    21452163                    code(buffer, indent, "if reg" + opcode.r1 + ":"); 
  • library/src/com/livinglogic/ul4/ul4c.py

    r180 r202  
    287287    expr_callmeth3.spark = ['expr9 ::= expr9 . name ( expr0 , expr0 , expr0 )'] 
    288288 
     289    def methkw_startname(self, (expr, _0, methname, _1, argname, _2, argvalue)): 
     290        call = ul4.CallMethKeywords(expr.start, argvalue.end, methname, expr) 
     291        call.append(argname.value, argvalue) 
     292        return call 
     293    methkw_startname.spark = ['callmethkw ::= expr9 . name ( name = expr0'] 
     294 
     295    def methkw_startdict(self, (expr, _0, methname, _1, _2, argvalue)): 
     296        call = ul4.CallMethKeywords(expr.start, argvalue.end, methname, expr) 
     297        call.append(argvalue) 
     298        return call 
     299    methkw_startdict.spark = ['callmethkw ::= expr9 . name ( ** expr0'] 
     300 
     301    def methkw_buildname(self, (call, _0, argname, _1, argvalue)): 
     302        call.args.append(argname.value, argvalue) 
     303        call.end = argvalue.end 
     304        return call 
     305    methkw_buildname.spark = ['callmethkw ::= callmethkw , name = expr0'] 
     306 
     307    def methkw_builddict(self, (call, _0, _1, argvalue)): 
     308        call.args.append(argvalue) 
     309        call.end = argvalue.end 
     310        return call 
     311    methkw_builddict.spark = ['callmethkw ::= callmethkw , ** expr0'] 
     312 
     313    def methkw_finish(self, (call, _0)): 
     314        call.end = _0.end 
     315        return call 
     316    methkw_finish.spark = ['expr9 ::= callmethkw )'] 
     317 
    289318    def expr_getitem(self, (expr, _0, key, _1)): 
    290319        if isinstance(expr, ul4.LoadConst) and isinstance(key, ul4.LoadConst): # Constant folding