root/livinglogic.java.ul4/library/src/com/livinglogic/ul4/Opcode.java @ 202:6f3968e7da58

Revision 202:6f3968e7da58, 23.3 KB (checked in by Walter Doerwald <walter@…>, 10 years ago)

Add support for the render method to Template.

Line 
1package com.livinglogic.ul4;
2
3public class Opcode
4{
5    public static final int OC_TEXT = 0;
6    public static final int OC_LOADNONE = 1;
7    public static final int OC_LOADFALSE = 2;
8    public static final int OC_LOADTRUE = 3;
9    public static final int OC_LOADINT = 4;
10    public static final int OC_LOADFLOAT = 5;
11    public static final int OC_LOADSTR = 6;
12    public static final int OC_LOADDATE = 7;
13    public static final int OC_LOADCOLOR = 8;
14    public static final int OC_BUILDLIST = 9;
15    public static final int OC_BUILDDICT = 10;
16    public static final int OC_ADDLIST = 11;
17    public static final int OC_ADDDICT = 12;
18    public static final int OC_UPDATEDICT = 13;
19    public static final int OC_LOADVAR = 14;
20    public static final int OC_STOREVAR = 15;
21    public static final int OC_ADDVAR = 16;
22    public static final int OC_SUBVAR = 17;
23    public static final int OC_MULVAR = 18;
24    public static final int OC_TRUEDIVVAR = 19;
25    public static final int OC_FLOORDIVVAR = 20;
26    public static final int OC_MODVAR = 21;
27    public static final int OC_DELVAR = 22;
28    public static final int OC_GETATTR = 23;
29    public static final int OC_GETITEM = 24;
30    public static final int OC_GETSLICE12 = 25;
31    public static final int OC_GETSLICE1 = 26;
32    public static final int OC_GETSLICE2 = 27;
33    public static final int OC_PRINT = 28;
34    public static final int OC_PRINTX = 29;
35    public static final int OC_NOT = 30;
36    public static final int OC_NEG = 31;
37    public static final int OC_CONTAINS = 32;
38    public static final int OC_NOTCONTAINS = 33;
39    public static final int OC_EQ = 34;
40    public static final int OC_NE = 35;
41    public static final int OC_LT = 36;
42    public static final int OC_LE = 37;
43    public static final int OC_GT = 38;
44    public static final int OC_GE = 39;
45    public static final int OC_ADD = 40;
46    public static final int OC_SUB = 41;
47    public static final int OC_MUL = 42;
48    public static final int OC_FLOORDIV = 43;
49    public static final int OC_TRUEDIV = 44;
50    public static final int OC_AND = 45;
51    public static final int OC_OR = 46;
52    public static final int OC_MOD = 47;
53    public static final int OC_CALLFUNC0 = 48;
54    public static final int OC_CALLFUNC1 = 49;
55    public static final int OC_CALLFUNC2 = 50;
56    public static final int OC_CALLFUNC3 = 51;
57    public static final int OC_CALLFUNC4 = 52;
58    public static final int OC_CALLMETH0 = 53;
59    public static final int OC_CALLMETH1 = 54;
60    public static final int OC_CALLMETH2 = 55;
61    public static final int OC_CALLMETH3 = 56;
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;
71
72    public static final int CF0_NOW = 0;
73    public static final int CF0_VARS = 1;
74
75    public static final int CF1_XMLESCAPE = 0;
76    public static final int CF1_STR = 1;
77    public static final int CF1_REPR = 2;
78    public static final int CF1_INT = 3;
79    public static final int CF1_BOOL = 4;
80    public static final int CF1_LEN = 5;
81    public static final int CF1_ENUMERATE = 6;
82    public static final int CF1_ISNONE = 7;
83    public static final int CF1_ISSTR = 8;
84    public static final int CF1_ISINT = 9;
85    public static final int CF1_ISFLOAT = 10;
86    public static final int CF1_ISBOOL = 11;
87    public static final int CF1_ISDATE = 12;
88    public static final int CF1_ISLIST = 13;
89    public static final int CF1_ISDICT = 14;
90    public static final int CF1_ISTEMPLATE = 15;
91    public static final int CF1_CHR = 16;
92    public static final int CF1_ORD = 17;
93    public static final int CF1_HEX = 18;
94    public static final int CF1_OCT = 19;
95    public static final int CF1_BIN = 20;
96    public static final int CF1_SORTED = 21;
97    public static final int CF1_RANGE = 22;
98    public static final int CF1_TYPE = 23;
99    public static final int CF1_CSV = 24;
100    public static final int CF1_GET = 25;
101    public static final int CF1_JSON = 26;
102
103    public static final int CF2_RANGE = 0;
104    public static final int CF2_GET = 1;
105    public static final int CF2_ZIP = 2;
106    public static final int CF2_INT = 3;
107
108    public static final int CF3_RANGE = 0;
109    public static final int CF3_ZIP = 1;
110    public static final int CF3_RGB = 2;
111    public static final int CF3_HLS = 3;
112    public static final int CF3_HSV = 4;
113
114    public static final int CF4_RGB = 0;
115    public static final int CF4_HLS = 1;
116    public static final int CF4_HSV = 2;
117
118    public static final int CM0_SPLIT = 0;
119    public static final int CM0_STRIP = 1;
120    public static final int CM0_LSTRIP = 2;
121    public static final int CM0_RSTRIP = 3;
122    public static final int CM0_LOWER = 4;
123    public static final int CM0_UPPER = 5;
124    public static final int CM0_CAPITALIZE = 6;
125    public static final int CM0_ITEMS = 7;
126    public static final int CM0_ISOFORMAT = 8;
127    public static final int CM0_HLS = 9;
128    public static final int CM0_HLSA = 10;
129    public static final int CM0_HSV = 11;
130    public static final int CM0_HSVA = 12;
131    public static final int CM0_LUM = 13;
132
133    public static final int CM1_SPLIT = 0;
134    public static final int CM1_RSPLIT = 1;
135    public static final int CM1_STRIP = 2;
136    public static final int CM1_LSTRIP = 3;
137    public static final int CM1_RSTRIP = 4;
138    public static final int CM1_STARTSWITH = 5;
139    public static final int CM1_ENDSWITH = 6;
140    public static final int CM1_FIND = 7;
141    public static final int CM1_RFIND = 8;
142    public static final int CM1_FORMAT = 9;
143    public static final int CM1_GET = 10;
144    public static final int CM1_WITHLUM = 11;
145    public static final int CM1_WITHA = 12;
146
147    public static final int CM2_SPLIT = 0;
148    public static final int CM2_RSPLIT = 1;
149    public static final int CM2_FIND = 2;
150    public static final int CM2_REPLACE = 3;
151    public static final int CM2_GET = 4;
152
153    public static final int CM3_FIND = 0;
154
155    public static final int CMKW_RENDER = 0;
156
157    public int name;
158    public int r1;
159    public int r2;
160    public int r3;
161    public int r4;
162    public int r5;
163    public String arg;
164    public int argcode;
165    public Location location;
166    public int jump;
167
168    public static int name2code(String name)
169    {
170        if (name == null)
171            return OC_TEXT;
172        else if (name.equals("loadnone"))
173            return OC_LOADNONE;
174        else if (name.equals("loadfalse"))
175            return OC_LOADFALSE;
176        else if (name.equals("loadtrue"))
177            return OC_LOADTRUE;
178        else if (name.equals("loadint"))
179            return OC_LOADINT;
180        else if (name.equals("loadfloat"))
181            return OC_LOADFLOAT;
182        else if (name.equals("loadstr"))
183            return OC_LOADSTR;
184        else if (name.equals("loaddate"))
185            return OC_LOADDATE;
186        else if (name.equals("buildlist"))
187            return OC_BUILDLIST;
188        else if (name.equals("builddict"))
189            return OC_BUILDDICT;
190        else if (name.equals("addlist"))
191            return OC_ADDLIST;
192        else if (name.equals("adddict"))
193            return OC_ADDDICT;
194        else if (name.equals("updatedict"))
195            return OC_UPDATEDICT;
196        else if (name.equals("loadvar"))
197            return OC_LOADVAR;
198        else if (name.equals("storevar"))
199            return OC_STOREVAR;
200        else if (name.equals("addvar"))
201            return OC_ADDVAR;
202        else if (name.equals("subvar"))
203            return OC_SUBVAR;
204        else if (name.equals("mulvar"))
205            return OC_MULVAR;
206        else if (name.equals("truedivvar"))
207            return OC_TRUEDIVVAR;
208        else if (name.equals("floordivvar"))
209            return OC_FLOORDIVVAR;
210        else if (name.equals("modvar"))
211            return OC_MODVAR;
212        else if (name.equals("delvar"))
213            return OC_DELVAR;
214        else if (name.equals("getattr"))
215            return OC_GETATTR;
216        else if (name.equals("getitem"))
217            return OC_GETITEM;
218        else if (name.equals("getslice12"))
219            return OC_GETSLICE12;
220        else if (name.equals("getslice1"))
221            return OC_GETSLICE1;
222        else if (name.equals("getslice2"))
223            return OC_GETSLICE2;
224        else if (name.equals("print"))
225            return OC_PRINT;
226        else if (name.equals("printx"))
227            return OC_PRINTX;
228        else if (name.equals("not"))
229            return OC_NOT;
230        else if (name.equals("neg"))
231            return OC_NEG;
232        else if (name.equals("contains"))
233            return OC_CONTAINS;
234        else if (name.equals("notcontains"))
235            return OC_NOTCONTAINS;
236        else if (name.equals("eq"))
237            return OC_EQ;
238        else if (name.equals("ne"))
239            return OC_NE;
240        else if (name.equals("lt"))
241            return OC_LT;
242        else if (name.equals("le"))
243            return OC_LE;
244        else if (name.equals("gt"))
245            return OC_GT;
246        else if (name.equals("ge"))
247            return OC_GE;
248        else if (name.equals("add"))
249            return OC_ADD;
250        else if (name.equals("sub"))
251            return OC_SUB;
252        else if (name.equals("mul"))
253            return OC_MUL;
254        else if (name.equals("floordiv"))
255            return OC_FLOORDIV;
256        else if (name.equals("truediv"))
257            return OC_TRUEDIV;
258        else if (name.equals("and"))
259            return OC_AND;
260        else if (name.equals("or"))
261            return OC_OR;
262        else if (name.equals("mod"))
263            return OC_MOD;
264        else if (name.equals("callfunc0"))
265            return OC_CALLFUNC0;
266        else if (name.equals("callfunc1"))
267            return OC_CALLFUNC1;
268        else if (name.equals("callfunc2"))
269            return OC_CALLFUNC2;
270        else if (name.equals("callfunc3"))
271            return OC_CALLFUNC3;
272        else if (name.equals("callfunc4"))
273            return OC_CALLFUNC4;
274        else if (name.equals("callmeth0"))
275            return OC_CALLMETH0;
276        else if (name.equals("callmeth1"))
277            return OC_CALLMETH1;
278        else if (name.equals("callmeth2"))
279            return OC_CALLMETH2;
280        else if (name.equals("callmeth3"))
281            return OC_CALLMETH3;
282        else if (name.equals("callmethkw"))
283            return OC_CALLMETHKW;
284        else if (name.equals("if"))
285            return OC_IF;
286        else if (name.equals("else"))
287            return OC_ELSE;
288        else if (name.equals("endif"))
289            return OC_ENDIF;
290        else if (name.equals("for"))
291            return OC_FOR;
292        else if (name.equals("endfor"))
293            return OC_ENDFOR;
294        else if (name.equals("break"))
295            return OC_BREAK;
296        else if (name.equals("continue"))
297            return OC_CONTINUE;
298        else if (name.equals("render"))
299            return OC_RENDER;
300        else
301            throw new IllegalArgumentException("Opcode name " + name + " unknown!");
302    }
303
304    public static int callfunc0name2code(String name)
305    {
306        if (name.equals("now"))
307            return CF0_NOW;
308        else if (name.equals("vars"))
309            return CF0_VARS;
310        else
311            throw new UnknownFunctionException(name);
312    }
313
314    public static int callfunc1name2code(String name)
315    {
316        if (name.equals("xmlescape"))
317            return CF1_XMLESCAPE;
318        else if (name.equals("str"))
319            return CF1_STR;
320        else if (name.equals("repr"))
321            return CF1_REPR;
322        else if (name.equals("int"))
323            return CF1_INT;
324        else if (name.equals("bool"))
325            return CF1_BOOL;
326        else if (name.equals("len"))
327            return CF1_LEN;
328        else if (name.equals("enumerate"))
329            return CF1_ENUMERATE;
330        else if (name.equals("isnone"))
331            return CF1_ISNONE;
332        else if (name.equals("isstr"))
333            return CF1_ISSTR;
334        else if (name.equals("isint"))
335            return CF1_ISINT;
336        else if (name.equals("isfloat"))
337            return CF1_ISFLOAT;
338        else if (name.equals("isbool"))
339            return CF1_ISBOOL;
340        else if (name.equals("isdate"))
341            return CF1_ISDATE;
342        else if (name.equals("islist"))
343            return CF1_ISLIST;
344        else if (name.equals("isdict"))
345            return CF1_ISDICT;
346        else if (name.equals("istemplate"))
347            return CF1_ISTEMPLATE;
348        else if (name.equals("chr"))
349            return CF1_CHR;
350        else if (name.equals("ord"))
351            return CF1_ORD;
352        else if (name.equals("hex"))
353            return CF1_HEX;
354        else if (name.equals("oct"))
355            return CF1_OCT;
356        else if (name.equals("bin"))
357            return CF1_BIN;
358        else if (name.equals("sorted"))
359            return CF1_SORTED;
360        else if (name.equals("range"))
361            return CF1_RANGE;
362        else if (name.equals("type"))
363            return CF1_TYPE;
364        else if (name.equals("csv"))
365            return CF1_CSV;
366        else if (name.equals("get"))
367            return CF1_GET;
368        else if (name.equals("json"))
369            return CF1_JSON;
370        else
371            throw new UnknownFunctionException(name);
372    }
373
374    public static int callfunc2name2code(String name)
375    {
376        if (name.equals("range"))
377            return CF2_RANGE;
378        else if (name.equals("get"))
379            return CF2_GET;
380        else if (name.equals("zip"))
381            return CF2_ZIP;
382        else if (name.equals("int"))
383            return CF2_INT;
384        else
385            throw new UnknownFunctionException(name);
386    }
387
388    public static int callfunc3name2code(String name)
389    {
390        if (name.equals("range"))
391            return CF3_RANGE;
392        if (name.equals("zip"))
393            return CF3_ZIP;
394        else if (name.equals("rgb"))
395            return CF3_RGB;
396        else if (name.equals("hls"))
397            return CF3_HLS;
398        else if (name.equals("hsv"))
399            return CF3_HSV;
400        else
401            throw new UnknownFunctionException(name);
402    }
403
404    public static int callfunc4name2code(String name)
405    {
406        if (name.equals("rgb"))
407            return CF4_RGB;
408        else if (name.equals("hls"))
409            return CF4_HLS;
410        else if (name.equals("hsv"))
411            return CF4_HSV;
412        else
413            throw new UnknownFunctionException(name);
414    }
415
416    public static int callmeth0name2code(String name)
417    {
418        if (name.equals("split"))
419            return CM0_SPLIT;
420        else if (name.equals("rsplit"))
421            return CM0_SPLIT;
422        else if (name.equals("strip"))
423            return CM0_STRIP;
424        else if (name.equals("lstrip"))
425            return CM0_LSTRIP;
426        else if (name.equals("rstrip"))
427            return CM0_RSTRIP;
428        else if (name.equals("upper"))
429            return CM0_UPPER;
430        else if (name.equals("lower"))
431            return CM0_LOWER;
432        else if (name.equals("capitalize"))
433            return CM0_CAPITALIZE;
434        else if (name.equals("items"))
435            return CM0_ITEMS;
436        else if (name.equals("isoformat"))
437            return CM0_ISOFORMAT;
438        else if (name.equals("hls"))
439            return CM0_HLS;
440        else if (name.equals("hlsa"))
441            return CM0_HLSA;
442        else if (name.equals("hsv"))
443            return CM0_HSV;
444        else if (name.equals("hsva"))
445            return CM0_HSVA;
446        else if (name.equals("lum"))
447            return CM0_LUM;
448        else
449            throw new UnknownMethodException(name);
450    }
451
452    public static int callmeth1name2code(String name)
453    {
454        if (name.equals("split"))
455            return CM1_SPLIT;
456        else if (name.equals("rsplit"))
457            return CM1_RSPLIT;
458        else if (name.equals("strip"))
459            return CM1_STRIP;
460        else if (name.equals("lstrip"))
461            return CM1_LSTRIP;
462        else if (name.equals("rstrip"))
463            return CM1_RSTRIP;
464        else if (name.equals("startswith"))
465            return CM1_STARTSWITH;
466        else if (name.equals("endswith"))
467            return CM1_ENDSWITH;
468        else if (name.equals("find"))
469            return CM1_FIND;
470        else if (name.equals("rfind"))
471            return CM1_RFIND;
472        else if (name.equals("format"))
473            return CM1_FORMAT;
474        else if (name.equals("get"))
475            return CM1_GET;
476        else if (name.equals("withlum"))
477            return CM1_WITHLUM;
478        else if (name.equals("witha"))
479            return CM1_WITHA;
480        else
481            throw new UnknownMethodException(name);
482    }
483
484    public static int callmeth2name2code(String name)
485    {
486        if (name.equals("replace"))
487            return CM2_REPLACE;
488        else if (name.equals("get"))
489            return CM2_GET;
490        else
491            throw new UnknownMethodException(name);
492    }
493
494    public static int callmeth3name2code(String name)
495    {
496        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);
505    }
506
507    public static String code2name(int code)
508    {
509        if (code == OC_TEXT)
510            return null;
511        else if (code == OC_LOADNONE)
512            return "loadnone";
513        else if (code == OC_LOADFALSE)
514            return "loadfalse";
515        else if (code == OC_LOADTRUE)
516            return "loadtrue";
517        else if (code == OC_LOADINT)
518            return "loadint";
519        else if (code == OC_LOADFLOAT)
520            return "loadfloat";
521        else if (code == OC_LOADSTR)
522            return "loadstr";
523        else if (code == OC_LOADDATE)
524            return "loaddate";
525        else if (code == OC_BUILDLIST)
526            return "buildlist";
527        else if (code == OC_BUILDDICT)
528            return "builddict";
529        else if (code == OC_ADDLIST)
530            return "addlist";
531        else if (code == OC_ADDDICT)
532            return "adddict";
533        else if (code == OC_UPDATEDICT)
534            return "updatedict";
535        else if (code == OC_LOADVAR)
536            return "loadvar";
537        else if (code == OC_STOREVAR)
538            return "storevar";
539        else if (code == OC_ADDVAR)
540            return "addvar";
541        else if (code == OC_SUBVAR)
542            return "subvar";
543        else if (code == OC_MULVAR)
544            return "mulvar";
545        else if (code == OC_TRUEDIVVAR)
546            return "truedivvar";
547        else if (code == OC_FLOORDIVVAR)
548            return "floordivvar";
549        else if (code == OC_MODVAR)
550            return "modvar";
551        else if (code == OC_DELVAR)
552            return "delvar";
553        else if (code == OC_GETATTR)
554            return "getattr";
555        else if (code == OC_GETITEM)
556            return "getitem";
557        else if (code == OC_GETSLICE12)
558            return "getslice12";
559        else if (code == OC_GETSLICE1)
560            return "getslice1";
561        else if (code == OC_GETSLICE2)
562            return "getslice2";
563        else if (code == OC_PRINT)
564            return "print";
565        else if (code == OC_PRINTX)
566            return "printx";
567        else if (code == OC_NOT)
568            return "not";
569        else if (code == OC_NEG)
570            return "neg";
571        else if (code == OC_EQ)
572            return "eq";
573        else if (code == OC_NE)
574            return "ne";
575        else if (code == OC_LT)
576            return "lt";
577        else if (code == OC_LE)
578            return "le";
579        else if (code == OC_GT)
580            return "gt";
581        else if (code == OC_GE)
582            return "ge";
583        else if (code == OC_CONTAINS)
584            return "contains";
585        else if (code == OC_NOTCONTAINS)
586            return "notcontains";
587        else if (code == OC_ADD)
588            return "add";
589        else if (code == OC_SUB)
590            return "sub";
591        else if (code == OC_MUL)
592            return "mul";
593        else if (code == OC_FLOORDIV)
594            return "floordiv";
595        else if (code == OC_TRUEDIV)
596            return "truediv";
597        else if (code == OC_AND)
598            return "and";
599        else if (code == OC_OR)
600            return "or";
601        else if (code == OC_MOD)
602            return "mod";
603        else if (code == OC_CALLFUNC0)
604            return "callfunc0";
605        else if (code == OC_CALLFUNC1)
606            return "callfunc1";
607        else if (code == OC_CALLFUNC2)
608            return "callfunc2";
609        else if (code == OC_CALLFUNC3)
610            return "callfunc3";
611        else if (code == OC_CALLFUNC4)
612            return "callfunc4";
613        else if (code == OC_CALLMETH0)
614            return "callmeth0";
615        else if (code == OC_CALLMETH1)
616            return "callmeth1";
617        else if (code == OC_CALLMETH2)
618            return "callmeth2";
619        else if (code == OC_CALLMETH3)
620            return "callmeth3";
621        else if (code == OC_CALLMETHKW)
622            return "callmethkw";
623        else if (code == OC_IF)
624            return "if";
625        else if (code == OC_ELSE)
626            return "else";
627        else if (code == OC_ENDIF)
628            return "endif";
629        else if (code == OC_FOR)
630            return "for";
631        else if (code == OC_ENDFOR)
632            return "endfor";
633        else if (code == OC_BREAK)
634            return "break";
635        else if (code == OC_CONTINUE)
636            return "continue";
637        else if (code == OC_RENDER)
638            return "render";
639        else
640            throw new IllegalArgumentException("Opcode code " + code + " unknown!");
641    }
642
643    public Opcode(String name, int r1, int r2, int r3, int r4, int r5, String arg, Location location)
644    {
645        this(name2code(name), r1, r2, r3, r4, r5, arg, location);
646    }
647
648    public Opcode(int name, int r1, int r2, int r3, int r4, int r5, String arg, Location location)
649    {
650        this.name = name;
651        this.r1 = r1;
652        this.r2 = r2;
653        this.r3 = r3;
654        this.r4 = r4;
655        this.r5 = r5;
656        this.arg = arg;
657        switch (name)
658        {
659            case OC_CALLFUNC0:
660                this.argcode = callfunc0name2code(arg);
661                break;
662            case OC_CALLFUNC1:
663                this.argcode = callfunc1name2code(arg);
664                break;
665            case OC_CALLFUNC2:
666                this.argcode = callfunc2name2code(arg);
667                break;
668            case OC_CALLFUNC3:
669                this.argcode = callfunc3name2code(arg);
670                break;
671            case OC_CALLFUNC4:
672                this.argcode = callfunc4name2code(arg);
673                break;
674            case OC_CALLMETH0:
675                this.argcode = callmeth0name2code(arg);
676                break;
677            case OC_CALLMETH1:
678                this.argcode = callmeth1name2code(arg);
679                break;
680            case OC_CALLMETH2:
681                this.argcode = callmeth2name2code(arg);
682                break;
683            case OC_CALLMETH3:
684                this.argcode = callmeth3name2code(arg);
685                break;
686            case OC_CALLMETHKW:
687                this.argcode = callmethkwname2code(arg);
688                break;
689        }
690        this.location = location;
691        this.jump = -1;
692    }
693
694    public String toString()
695    {
696        switch (name)
697        {
698            case OC_TEXT:
699                return "print " + Utils.repr(location.getCode());
700            case OC_LOADNONE:
701                return "r" + r1 + " = None";
702            case OC_LOADFALSE:
703                return "r" + r1 + " = False";
704            case OC_LOADTRUE:
705                return "r" + r1 + " = True";
706            case OC_LOADINT:
707                return "r" + r1 + " = " + arg;
708            case OC_LOADFLOAT:
709                return "r" + r1 + " = " + arg;
710            case OC_LOADSTR:
711                return "r" + r1 + " = " + Utils.repr(arg);
712            case OC_LOADDATE:
713                return "r" + r1 + " = " + Utils.repr(arg);
714            case OC_LOADCOLOR:
715                return "r" + r1 + " = " + Color.fromdump(arg).repr();
716            case OC_BUILDLIST:
717                return "r" + r1 + " = []";
718            case OC_BUILDDICT:
719                return "r" + r1 + " = {}";
720            case OC_ADDLIST:
721                return "r" + r1 + ".append(r" + r2 + ")";
722            case OC_ADDDICT:
723                return "r" + r1 + "[r" + r2 + "] = r" + r3;
724            case OC_UPDATEDICT:
725                return "r" + r1 + ".update(r" + r2 + ")";
726            case OC_LOADVAR:
727                return "r" + r1 + " = vars[" + Utils.repr(arg) + "]";
728            case OC_STOREVAR:
729                return "vars[" + Utils.repr(arg) + "] = r" + r1;
730            case OC_ADDVAR:
731                return "vars[" + Utils.repr(arg) + "] += r" + r1;
732            case OC_SUBVAR:
733                return "vars[" + Utils.repr(arg) + "] -= r" + r1;
734            case OC_MULVAR:
735                return "vars[" + Utils.repr(arg) + "] *= r" + r1;
736            case OC_TRUEDIVVAR:
737                return "vars[" + Utils.repr(arg) + "] /= r" + r1;
738            case OC_FLOORDIVVAR:
739                return "vars[" + Utils.repr(arg) + "] //= r" + r1;
740            case OC_MODVAR:
741                return "vars[" + Utils.repr(arg) + "] %= r" + r1;
742            case OC_DELVAR:
743                return "del vars[" + Utils.repr(arg) + "]";
744            case OC_GETATTR:
745                return "r" + r1 + " = getattr(r" + r2 + ", " + Utils.repr(arg) + ")";
746            case OC_GETITEM:
747                return "r" + r1 + " = r" + r2 + "[r" + r3 + "]";
748            case OC_GETSLICE12:
749                return "r" + r1 + " = r" + r2 + "[r" + r3 + ":r" + r4 + "]";
750            case OC_GETSLICE1:
751                return "r" + r1 + " = r" + r2 + "[r" + r3 + ":]";
752            case OC_GETSLICE2:
753                return "r" + r1 + " = r" + r2 + "[:r" + r4 + "]";
754            case OC_PRINT:
755                return "print r" + r1;
756            case OC_PRINTX:
757                return "print xmlescape(r" + r1 + ")";
758            case OC_NOT:
759                return "r" + r1 + " = not r" + r2;
760            case OC_NEG:
761                return "r" + r1 + " = -r" + r2;
762            case OC_EQ:
763                return "r" + r1 + " = r" + r2 + " == r" + r3;
764            case OC_NE:
765                return "r" + r1 + " = r" + r2 + " != r" + r3;
766            case OC_LT:
767                return "r" + r1 + " = r" + r2 + " < r" + r3;
768            case OC_LE:
769                return "r" + r1 + " = r" + r2 + " <= r" + r3;
770            case OC_GT:
771                return "r" + r1 + " = r" + r2 + " > r" + r3;
772            case OC_GE:
773                return "r" + r1 + " = r" + r2 + " >= r" + r3;
774            case OC_CONTAINS:
775                return "r" + r1 + " = r" + r2 + " in r" + r3;
776            case OC_NOTCONTAINS:
777                return "r" + r1 + " = r" + r2 + " not in r" + r3;
778            case OC_ADD:
779                return "r" + r1 + " = r" + r2 + " + r" + r3;
780            case OC_SUB:
781                return "r" + r1 + " = r" + r2 + " - r" + r3;
782            case OC_MUL:
783                return "r" + r1 + " = r" + r2 + " == r" + r3;
784            case OC_FLOORDIV:
785                return "r" + r1 + " = r" + r2 + " // r" + r3;
786            case OC_TRUEDIV:
787                return "r" + r1 + " = r" + r2 + " / r" + r3;
788            case OC_AND:
789                return "r" + r1 + " = r" + r2 + " and r" + r3;
790            case OC_OR:
791                return "r" + r1 + " = r" + r2 + " or r" + r3;
792            case OC_MOD:
793                return "r" + r1 + " = r" + r2 + " % r" + r3;
794            case OC_CALLFUNC0:
795                return "r" + r1 + " = " + arg + "()";
796            case OC_CALLFUNC1:
797                return "r" + r1 + " = " + arg + "(r" + r2 + ")";
798            case OC_CALLFUNC2:
799                return "r" + r1 + " = " + arg + "(r" + r2 + ", r" + r3 + ")";
800            case OC_CALLFUNC3:
801                return "r" + r1 + " = " + arg + "(r" + r2 + ", r" + r3 + ", r" + r4 + ")";
802            case OC_CALLFUNC4:
803                return "r" + r1 + " = " + arg + "(r" + r2 + ", r" + r3 + ", r" + r4 + ", r" + r5 + ")";
804            case OC_CALLMETH0:
805                return "r" + r1 + " = r" + r2 + "." + arg + "()";
806            case OC_CALLMETH1:
807                return "r" + r1 + " = r" + r2 + "." + arg + "(r" + r3 + ")";
808            case OC_CALLMETH2:
809                return "r" + r1 + " = r" + r2 + "." + arg + "(r" + r3 + ", r" + r4 + ")";
810            case OC_CALLMETH3:
811                return "r" + r1 + " = r" + r2 + "." + arg + "(r" + r3 + ", r" + r4 + ", r" + r5 + ")";
812            case OC_IF:
813                return "if r" + r1;
814            case OC_ELSE:
815                return "else";
816            case OC_ENDIF:
817                return "endif";
818            case OC_FOR:
819                return "for r" + r1 + " in r" + r2;
820            case OC_ENDFOR:
821                return "endfor";
822            case OC_BREAK:
823                return "break";
824            case OC_CONTINUE:
825                return "continue";
826            case OC_RENDER:
827                return "render " + arg + "(r" + r1 + ")";
828            default:
829                throw new IllegalArgumentException("Opcode code " + name + " unknown!");
830        }
831    }
832}
Note: See TracBrowser for help on using the browser.