Beispiel #1
0
    def put(self, key, val):
        assert (key is not None)
        assert (key is not float('NAN'))

        key = LuaValue.float2integer(key)
        if isinstance(key, int) and key >= 1:
            if not self.arr:
                self.arr = []
            arr_len = len(self.arr)
            if key <= arr_len:
                self.arr[key - 1] = val
                if key == arr_len and val is None:
                    self.arr.pop(key)
                return
            if key == arr_len + 1:
                if self.map:
                    self.map.pop(key)
                if val is not None:
                    self.arr.append(val)
                    self.map_to_arr()
                return

        if val is not None:
            if not self.map:
                self.map = {key: val}
        else:
            self.map.pop(key)
Beispiel #2
0
 def cast_to_int(exp):
     if isinstance(exp, lua_exp.IntegerExp):
         return exp.val, True
     if isinstance(exp, lua_exp.FloatExp):
         i = LuaValue.float2integer(exp.val)
         return i, i is not None
     return 0, False
Beispiel #3
0
    def get(self, key):
        key = LuaValue.float2integer(key)

        if self.arr and isinstance(key, int):
            if 1 <= key <= len(self.arr):
                return self.arr[key - 1]

        return self.map[key] if key in self.map else None
Beispiel #4
0
 def optimize_bnot(exp):
     if isinstance(exp.exp, lua_exp.IntegerExp):
         exp.exp.val = ~exp.exp.val
         return exp.exp.val
     if isinstance(exp.exp, lua_exp.FloatExp):
         i = LuaValue.float2integer(exp.exp.val)
         if i is not None:
             return lua_exp.IntegerExp(exp.exp.line, ~i)
     return exp