root/livinglogic.java.ul4/library/src/com/livinglogic/ul4/Opcode.java @ 211:81ee70bb3e88

Revision 211:81ee70bb3e88, 23.4 KB (checked in by Walter Doerwald <walter@…>, 10 years ago)

Added reversed function (Java part of isssue #5).

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