Changeset 130:be6e2a2087fe in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/09/08 12:28:47 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Implement operators <, <=, >, >=. Rename == and != operators.

Location:
library/src/com/livinglogic/ul4
Files:
4 modified
6 moved

Legend:

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

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class Equal extends Binary 
     3public class EQ extends Binary 
    44{ 
    5     public Equal(int start, int end, AST obj1, AST obj2) 
     5    public EQ(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_EQUALS; 
     12        return Opcode.OC_EQ; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/GE.java

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class NotEqual extends Binary 
     3public class GE extends Binary 
    44{ 
    5     public NotEqual(int start, int end, AST obj1, AST obj2) 
     5    public GE(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_NOTEQUALS; 
     12        return Opcode.OC_GE; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/GT.java

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class NotEqual extends Binary 
     3public class GT extends Binary 
    44{ 
    5     public NotEqual(int start, int end, AST obj1, AST obj2) 
     5    public GT(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_NOTEQUALS; 
     12        return Opcode.OC_GT; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/LE.java

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class NotEqual extends Binary 
     3public class LE extends Binary 
    44{ 
    5     public NotEqual(int start, int end, AST obj1, AST obj2) 
     5    public LE(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_NOTEQUALS; 
     12        return Opcode.OC_LE; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/LT.java

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class NotEqual extends Binary 
     3public class LT extends Binary 
    44{ 
    5     public NotEqual(int start, int end, AST obj1, AST obj2) 
     5    public LT(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_NOTEQUALS; 
     12        return Opcode.OC_LT; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/NE.java

    r116 r130  
    11package com.livinglogic.ul4; 
    22 
    3 public class NotEqual extends Binary 
     3public class NE extends Binary 
    44{ 
    5     public NotEqual(int start, int end, AST obj1, AST obj2) 
     5    public NE(int start, int end, AST obj1, AST obj2) 
    66    { 
    77        super(start, end, obj1, obj2); 
     
    1010    public int getType() 
    1111    { 
    12         return Opcode.OC_NOTEQUALS; 
     12        return Opcode.OC_NE; 
    1313    } 
    1414} 
  • library/src/com/livinglogic/ul4/Opcode.java

    r124 r130  
    3737    public static final int OC_CONTAINS = 32; 
    3838    public static final int OC_NOTCONTAINS = 33; 
    39     public static final int OC_EQUALS = 34; 
    40     public static final int OC_NOTEQUALS = 35; 
    41     public static final int OC_ADD = 36; 
    42     public static final int OC_SUB = 37; 
    43     public static final int OC_MUL = 38; 
    44     public static final int OC_FLOORDIV = 39; 
    45     public static final int OC_TRUEDIV = 40; 
    46     public static final int OC_AND = 41; 
    47     public static final int OC_OR = 42; 
    48     public static final int OC_MOD = 43; 
    49     public static final int OC_CALLFUNC0 = 44; 
    50     public static final int OC_CALLFUNC1 = 45; 
    51     public static final int OC_CALLFUNC2 = 46; 
    52     public static final int OC_CALLFUNC3 = 47; 
    53     public static final int OC_CALLMETH0 = 48; 
    54     public static final int OC_CALLMETH1 = 49; 
    55     public static final int OC_CALLMETH2 = 50; 
    56     public static final int OC_CALLMETH3 = 51; 
    57     public static final int OC_IF = 52; 
    58     public static final int OC_ELSE = 53; 
    59     public static final int OC_ENDIF = 54; 
    60     public static final int OC_RENDER = 55; 
     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_CALLMETH0 = 52; 
     58    public static final int OC_CALLMETH1 = 53; 
     59    public static final int OC_CALLMETH2 = 54; 
     60    public static final int OC_CALLMETH3 = 55; 
     61    public static final int OC_IF = 56; 
     62    public static final int OC_ELSE = 57; 
     63    public static final int OC_ENDIF = 58; 
     64    public static final int OC_RENDER = 59; 
    6165 
    6266    public static final int CF0_NOW = 0; 
     
    188192        else if (name.equals("notcontains")) 
    189193            return OC_NOTCONTAINS; 
    190         else if (name.equals("equals")) 
    191             return OC_EQUALS; 
    192         else if (name.equals("notequals")) 
    193             return OC_NOTEQUALS; 
     194        else if (name.equals("eq")) 
     195            return OC_EQ; 
     196        else if (name.equals("ne")) 
     197            return OC_NE; 
     198        else if (name.equals("lt")) 
     199            return OC_LT; 
     200        else if (name.equals("le")) 
     201            return OC_LE; 
     202        else if (name.equals("gt")) 
     203            return OC_GT; 
     204        else if (name.equals("ge")) 
     205            return OC_GE; 
    194206        else if (name.equals("add")) 
    195207            return OC_ADD; 
     
    432444        else if (code == OC_NEG) 
    433445            return "neg"; 
     446        else if (code == OC_EQ) 
     447            return "eq"; 
     448        else if (code == OC_NE) 
     449            return "ne"; 
     450        else if (code == OC_LT) 
     451            return "lt"; 
     452        else if (code == OC_LE) 
     453            return "le"; 
     454        else if (code == OC_GT) 
     455            return "gt"; 
     456        else if (code == OC_GE) 
     457            return "ge"; 
    434458        else if (code == OC_CONTAINS) 
    435459            return "contains"; 
    436460        else if (code == OC_NOTCONTAINS) 
    437461            return "notcontains"; 
    438         else if (code == OC_EQUALS) 
    439             return "equals"; 
    440         else if (code == OC_NOTEQUALS) 
    441             return "notequals"; 
    442462        else if (code == OC_ADD) 
    443463            return "add"; 
  • library/src/com/livinglogic/ul4/Template.java

    r129 r130  
    3737    { 
    3838        // Initializes regular expressions 
    39         tokenPattern = Pattern.compile("\\(|\\)|\\[|\\]|\\{|\\}|\\.|,|==|\\!=|=|\\+=|\\-=|\\*=|/=|//=|%=|%|:|\\+|-|\\*|//|/"); 
     39        tokenPattern = Pattern.compile("\\(|\\)|\\[|\\]|\\{|\\}|\\.|,|==|\\!=|<=|<|>=|>|=|\\+=|\\-=|\\*=|/=|//=|%=|%|:|\\+|-|\\*|//|/"); 
    4040        namePattern = Pattern.compile("[a-zA-Z_][\\w]*"); 
    4141        // We don't have negatve numbers, this is handled by constant folding in the AST for unary minus 
     
    344344 
    345345    /** 
    346      * Reads a register specification from a stream. A register specification is 
    347      * either a digit or the character '-'. 
    348      * @param reader the reader from which the specification is read. 
    349      * @return The register number or -1. 
     346     * Reads a linefeed from a stream. 
     347     * @param reader the reader from which the linefeed is read. 
    350348     * @throws IOException if reading from the stream fails 
    351349     * @throws RuntimeException if the character read from the stream is not a 
     
    915913                            reg[code.r1] = Utils.neg(reg[code.r2]); 
    916914                            break; 
    917                         case Opcode.OC_EQUALS: 
    918                             reg[code.r1] = Utils.equals(reg[code.r2], reg[code.r3]) ? Boolean.TRUE : Boolean.FALSE; 
    919                             break; 
    920                         case Opcode.OC_NOTEQUALS: 
    921                             reg[code.r1] = Utils.equals(reg[code.r2], reg[code.r3]) ? Boolean.FALSE : Boolean.TRUE; 
    922                             break; 
    923                         case Opcode.OC_CONTAINS: 
    924                             reg[code.r1] = Utils.contains(reg[code.r2], reg[code.r3]) ? Boolean.TRUE : Boolean.FALSE; 
     915                        case Opcode.OC_EQ: 
     916                            reg[code.r1] = Utils.eq(reg[code.r2], reg[code.r3]) ? Boolean.TRUE : Boolean.FALSE; 
     917                            break; 
     918                        case Opcode.OC_NE: 
     919                            reg[code.r1] = Utils.eq(reg[code.r2], reg[code.r3]) ? Boolean.FALSE : Boolean.TRUE; 
     920                            break; 
     921                        case Opcode.OC_LT: 
     922                            reg[code.r1] = Utils.lt(reg[code.r2], reg[code.r3]) ? Boolean.TRUE : Boolean.FALSE; 
     923                            break; 
     924                        case Opcode.OC_LE: 
     925                            reg[code.r1] = Utils.le(reg[code.r2], reg[code.r3]) ? Boolean.TRUE : Boolean.FALSE; 
     926                            break; 
     927                        case Opcode.OC_GT: 
     928                            reg[code.r1] = Utils.le(reg[code.r2], reg[code.r3]) ? Boolean.FALSE : Boolean.TRUE; 
     929                            break; 
     930                        case Opcode.OC_GE: 
     931                            reg[code.r1] = Utils.lt(reg[code.r2], reg[code.r3]) ? Boolean.FALSE : Boolean.TRUE; 
    925932                            break; 
    926933                        case Opcode.OC_NOTCONTAINS: 
  • library/src/com/livinglogic/ul4/Utils.java

    r123 r130  
    482482    } 
    483483 
    484     public static boolean equals(Object obj1, Object obj2) 
     484    public static boolean eq(Object obj1, Object obj2) 
    485485    { 
    486486        if (null != obj1) 
     
    488488        else 
    489489            return (null == obj2); 
     490    } 
     491 
     492    public static boolean lt(Object obj1, Object obj2) 
     493    { 
     494        if (null != obj1) 
     495        { 
     496            if (null != obj2) 
     497                return ((Comparable)obj1).compareTo(obj2) < 0; 
     498        } 
     499        else if (null == obj2) 
     500            return false; 
     501        throw new RuntimeException("Can't compare object to null!"); 
     502    } 
     503 
     504    public static boolean le(Object obj1, Object obj2) 
     505    { 
     506        if (null != obj1) 
     507        { 
     508            if (null != obj2) 
     509                return ((Comparable)obj1).compareTo(obj2) <= 0; 
     510        } 
     511        else if (null == obj2) 
     512            return true; 
     513        throw new RuntimeException("Can't compare object to null!"); 
    490514    } 
    491515 
  • library/src/com/livinglogic/ul4/ul4c.py

    r125 r130  
    324324    expr_sub.spark = ['expr5 ::= expr5 - expr5'] 
    325325 
    326     def expr_equal(self, (obj1, _0, obj2)): 
     326    def expr_eq(self, (obj1, _0, obj2)): 
    327327        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
    328328            return self.makeconst(obj1.start, obj2.end, obj1.value == obj2.value) 
    329         return ul4.Equal(obj1.start, obj2.end, obj1, obj2) 
    330     expr_equal.spark = ['expr4 ::= expr4 == expr4'] 
    331  
    332     def expr_notequal(self, (obj1, _0, obj2)): 
     329        return ul4.EQ(obj1.start, obj2.end, obj1, obj2) 
     330    expr_eq.spark = ['expr4 ::= expr4 == expr4'] 
     331 
     332    def expr_ne(self, (obj1, _0, obj2)): 
    333333        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
    334334            return self.makeconst(obj1.start, obj2.end, obj1.value != obj2.value) 
    335         return ul4.NotEqual(obj1.start, obj2.end, obj1, obj2) 
    336     expr_notequal.spark = ['expr4 ::= expr4 != expr4'] 
     335        return ul4.NE(obj1.start, obj2.end, obj1, obj2) 
     336    expr_ne.spark = ['expr4 ::= expr4 != expr4'] 
     337 
     338    def expr_lt(self, (obj1, _0, obj2)): 
     339        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
     340            return self.makeconst(obj1.start, obj2.end, obj1.value < obj2.value) 
     341        return ul4.LT(obj1.start, obj2.end, obj1, obj2) 
     342    expr_lt.spark = ['expr4 ::= expr4 < expr4'] 
     343 
     344    def expr_le(self, (obj1, _0, obj2)): 
     345        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
     346            return self.makeconst(obj1.start, obj2.end, obj1.value <= obj2.value) 
     347        return ul4.LE(obj1.start, obj2.end, obj1, obj2) 
     348    expr_le.spark = ['expr4 ::= expr4 <= expr4'] 
     349 
     350    def expr_gt(self, (obj1, _0, obj2)): 
     351        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
     352            return self.makeconst(obj1.start, obj2.end, obj1.value > obj2.value) 
     353        return ul4.GT(obj1.start, obj2.end, obj1, obj2) 
     354    expr_gt.spark = ['expr4 ::= expr4 > expr4'] 
     355 
     356    def expr_ge(self, (obj1, _0, obj2)): 
     357        if isinstance(obj1, ul4.Const) and isinstance(obj2, ul4.Const): # Constant folding 
     358            return self.makeconst(obj1.start, obj2.end, obj1.value >= obj2.value) 
     359        return ul4.GE(obj1.start, obj2.end, obj1, obj2) 
     360    expr_ge.spark = ['expr4 ::= expr4 >= expr4'] 
    337361 
    338362    def expr_contains(self, (obj, _0, container)):