Changeset 97:fce9bfb7003e in livinglogic.java.ul4

Show
Ignore:
Timestamp:
06/12/08 15:36:53 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Move some of the exception classes to Java.

Location:
library/src/com/livinglogic/ull
Files:
5 added
3 modified

Legend:

Unmodified
Added
Removed
  • library/src/com/livinglogic/ull/Registers.java

    r92 r97  
    1414    public int alloc() 
    1515    { 
    16         return ((Integer)remove(0)).intValue(); 
     16        try 
     17        { 
     18            return ((Integer)remove(0)).intValue(); 
     19        } 
     20        catch (ArrayIndexOutOfBoundsException ex) 
     21        { 
     22            throw new OutOfRegistersException(); 
     23        } 
    1724    } 
    1825 
  • library/src/com/livinglogic/ull/Template.java

    r92 r97  
    636636                        break; 
    637637                    case Opcode.OC_CALLFUNC0: 
    638                         throw new RuntimeException("No function '" + code.arg + "' defined!"); 
     638                        throw new UnknownFunctionException(code.arg); 
    639639                    case Opcode.OC_CALLFUNC1: 
    640640                        if (code.arg.equals("xmlescape")) 
     
    716716                        else 
    717717                        { 
    718                             throw new RuntimeException("No function '" + code.arg + "' defined!"); 
     718                            throw new UnknownFunctionException(code.arg); 
    719719                        } 
    720720                        break; 
     
    726726                        else 
    727727                        { 
    728                             throw new RuntimeException("No function '" + code.arg + "' defined!"); 
     728                            throw new UnknownFunctionException(code.arg); 
    729729                        } 
    730730                        break; 
     
    736736                        else 
    737737                        { 
    738                             throw new RuntimeException("No function '" + code.arg + "' defined!"); 
     738                            throw new UnknownFunctionException(code.arg); 
    739739                        } 
    740740                        break; 
     
    770770                        else 
    771771                        { 
    772                             throw new RuntimeException("No method '" + code.arg + "' defined!"); 
     772                            throw new UnknownMethodException(code.arg); 
    773773                        } 
    774774                        break; 
     
    808808                        else 
    809809                        { 
    810                             throw new RuntimeException("No method '" + code.arg + "' defined!"); 
     810                            throw new UnknownMethodException(code.arg); 
    811811                        } 
    812812                        break; 
    813813                    case Opcode.OC_CALLMETH2: 
    814                         throw new RuntimeException("No method '" + code.arg + "' defined!"); 
     814                            throw new UnknownMethodException(code.arg); 
    815815                    case Opcode.OC_CALLMETH3: 
    816                         throw new RuntimeException("No method '" + code.arg + "' defined!"); 
     816                            throw new UnknownMethodException(code.arg); 
    817817                    case Opcode.OC_RENDER: 
    818818                        subTemplateIterator = ((Template)templates.get(code.arg)).render(reg[code.r1], templates); 
  • library/src/com/livinglogic/ull/ullc.py

    r95 r97  
    7171    def __str__(self): 
    7272        return self.format("Lexical error near %s" % self.token) 
    73  
    74  
    75 class UnterminatedStringError(Error): 
    76     """ 
    77     Exception that is raised when a string constant is not terminated. 
    78     """ 
    79     def __str__(self): 
    80         return self.format("Unterminated string") 
    81  
    82  
    83 class BlockError(Error): 
    84     """ 
    85     Exception that is raised when an illegal block structure is detected (e.g. 
    86     an ``endif`` without a previous ``if``). 
    87     """ 
    88  
    89     def __init__(self, message): 
    90         Error.__init__(self) 
    91         self.message = message 
    92  
    93     def __str__(self): 
    94         return self.format(self.message) 
    95  
    96  
    97 class UnknownFunctionError(Error): 
    98     """ 
    99     Exception that is raised the function to be executed by the ``callfunc0``, 
    100     ``callfunc1`` or ``callfunc2`` opcodes is unknown to the renderer. 
    101     """ 
    102  
    103     def __init__(self, funcname): 
    104         Error.__init__(self) 
    105         self.funcname = funcname 
    106  
    107     def __str__(self): 
    108         return self.format("function %r unknown" % self.funcname) 
    109  
    110  
    111 class UnknownMethodError(Error): 
    112     """ 
    113     Exception that is raised the method to be executed by the ``callmeth0``, 
    114     ``callmeth1``, ``callmeth2``  or ``callmeth3`` opcodes is unknown to the 
    115     renderer. 
    116     """ 
    117  
    118     def __init__(self, methname): 
    119         Error.__init__(self) 
    120         self.methname = methname 
    121  
    122     def __str__(self): 
    123         return self.format("method %r unknown" % self.methname) 
    124  
    125  
    126 class UnknownOpcodeError(Error): 
    127     """ 
    128     Exception that is raised when an unknown opcode is encountered. 
    129     """ 
    130  
    131     def __init__(self, opcode): 
    132         Error.__init__(self) 
    133         self.opcode = opcode 
    134  
    135     def __str__(self): 
    136         return self.format("opcode %r unknown" % self.opcode) 
    137  
    138  
    139 class OutOfRegistersError(Error): 
    140     """ 
    141     Exception that is raised when there are no more free registers 
    142     (can't happen) 
    143     """ 
    144  
    145     def __str__(self): 
    146         return self.format("out of registers") 
    14773 
    14874 
     
    199125            elif location.type == "elif": 
    200126                if not stack or stack[-1][0] != "if": 
    201                     raise BlockError("elif doesn't match any if") 
     127                    raise BlockException("elif doesn't match any if") 
    202128                elif stack[-1][2]: 
    203                     raise BlockError("else already seen in elif") 
     129                    raise BlockException("else already seen in elif") 
    204130                template.opcode(Opcode.OC_ELSE, location) 
    205131                r = parseexpr(template, location) 
     
    208134            elif location.type == "else": 
    209135                if not stack or stack[-1][0] != "if": 
    210                     raise BlockError("else doesn't match any if") 
     136                    raise BlockException("else doesn't match any if") 
    211137                elif stack[-1][2]: 
    212                     raise BlockError("duplicate else") 
     138                    raise BlockException("duplicate else") 
    213139                template.opcode(Opcode.OC_ELSE, location) 
    214140                stack[-1] = ("if", stack[-1][1], True) 
    215141            elif location.type == "end": 
    216142                if not stack: 
    217                     raise BlockError("not in any block") 
     143                    raise BlockException("not in any block") 
    218144                code = location.code 
    219145                if code: 
    220146                    if code == "if": 
    221147                        if stack[-1][0] != "if": 
    222                             raise BlockError("endif doesn't match any if") 
     148                            raise BlockException("endif doesn't match any if") 
    223149                    elif code == "for": 
    224150                        if stack[-1][0] != "for": 
    225                             raise BlockError("endfor doesn't match any for") 
     151                            raise BlockException("endfor doesn't match any for") 
    226152                    else: 
    227                         raise BlockError("illegal end value %r" % code) 
     153                        raise BlockException("illegal end value %r" % code) 
    228154                last = stack.pop() 
    229155                if last[0] == "if": 
     
    245171            raise Error(exc).decorate(location) 
    246172    if stack: 
    247         raise BlockError("unclosed blocks") 
     173        raise BlockException("unclosed blocks") 
    248174    return opcodes 
    249175 
    250176 
    251 ### 
    252 ### Tokens and nodes for the AST 
    253 ### 
    254  
    255177from com.livinglogic.ull import Token, Const, None as None_, True as True_, False as False_, Int, Float, Str, Name, GetSlice, Not, Neg, StoreVar, AddVar, SubVar, MulVar, FloorDivVar, TrueDivVar, ModVar, DelVar, GetItem, GetSlice1, GetSlice2, Equal, NotEqual, Contains, NotContains, Add, Sub, Mul, FloorDiv, TrueDiv, Or, And, Mod, GetSlice12, GetAttr, Render, For, For1, For2, CallFunc, CallMeth 
    256  
     178from com.livinglogic.ull import UnterminatedStringException, BlockException, OutOfRegistersException 
    257179 
    258180### 
     
    271193            spark.GenericScanner.tokenize(self, location.code) 
    272194            if self.mode != "default": 
    273                 raise UnterminatedStringError() 
     195                raise UnterminatedStringException() 
    274196        except Error, exc: 
    275197            exc.decorate(location)