Exemplo n.º 1
0
    def eq(a, b, ls):
        if a is None:
            return b is None
        if isinstance(a, bool) or isinstance(a, str):
            return a == b
        if isinstance(a, int):
            if isinstance(b, int):
                return a == b
            elif isinstance(b, float):
                return float(a) == b
            else:
                return False
        if isinstance(a, float):
            if isinstance(b, float):
                return a == b
            elif isinstance(b, int):
                return a == float(b)
            else:
                return False
        if isinstance(a, LuaTable):
            if isinstance(b, LuaTable) and a != b and ls:
                mm = ls.get_metamethod(a, b, '__eq')
                if mm:
                    return LuaValue.to_boolean(ls.call_metamethod(a, mm, b))

        return a == b
Exemplo n.º 2
0
    def le(a, b, ls):
        if isinstance(a, str) and isinstance(b, str):
            return a <= b
        if isinstance(a, int):
            if isinstance(b, int):
                return a <= b
            elif isinstance(b, float):
                return float(a) <= b
        if isinstance(a, float):
            if isinstance(b, float):
                return a <= b
            elif isinstance(b, int):
                return a <= float(b)

        mm = ls.get_metamethod(a, b, '__le')
        if mm:
            return LuaValue.to_boolean(ls.call_metamethod(a, mm, b))
        mm = ls.get_metamethod(b, a, '__lt')
        if mm:
            return LuaValue.to_boolean(ls.call_metamethod(a, mm, b))

        raise Exception('Comparison Error')
Exemplo n.º 3
0
 def to_boolean(self, idx):
     return LuaValue.to_boolean(self.stack.get(idx))