From 1458563f00deebbbcf3e8049dc90157fb825fae3 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sun, 1 Dec 2013 13:03:03 -0800 Subject: Add some debug printers for scripts --- src/common/io.hpp | 26 -------------------------- src/map/script.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 26 deletions(-) delete mode 100644 src/common/io.hpp create mode 100644 src/map/script.py (limited to 'src') diff --git a/src/common/io.hpp b/src/common/io.hpp deleted file mode 100644 index 27bf4e2..0000000 --- a/src/common/io.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef TMWA_COMMON_IO_HPP -#define TMWA_COMMON_IO_HPP - -#include -#include - -#include "../strings/fstring.hpp" - -namespace io -{ - inline - std::istream& getline(std::istream& in, FString& line) - { - std::string s; - if (std::getline(in, s)) - { - std::string::const_iterator begin = s.cbegin(), end = s.cend(); - if (begin != end && end[-1] == '\r') - --end; - line = FString(begin, end); - } - return in; - } -} // namespace io - -#endif //TMWA_COMMON_IO_HPP diff --git a/src/map/script.py b/src/map/script.py new file mode 100644 index 0000000..ba0198c --- /dev/null +++ b/src/map/script.py @@ -0,0 +1,56 @@ +class ByteCode: + ''' print a ByteCode + (workaround for gcc bug 58150) + ''' + __slots__ = ('_value') + name = 'ByteCode' + enabled = True + + def __init__(self, value): + self._value = value + + def to_string(self): + val = int(self._value) + try: + return 'ByteCode::' + self.types[val] + except IndexError: + return 'ByteCode(%x)' % val + + types = [ + 'NOP', 'POS', 'INT', 'PARAM', 'FUNC', 'STR', 'CONSTSTR', 'ARG', + 'VARIABLE', 'EOL', 'RETINFO', + + 'LOR', 'LAND', 'LE', 'LT', 'GE', 'GT', 'EQ', 'NE', + 'XOR', 'OR', 'AND', 'ADD', 'SUB', 'MUL', 'DIV', 'MOD', + 'NEG', 'LNOT', 'NOT', 'R_SHIFT', 'L_SHIFT', + + 'FUNC_REF', + ] +for i, n in enumerate(ByteCode.types): + setattr(ByteCode, n, i) +del i, n + +class script_data(object): + ''' print a script_data + ''' + __slots__ = ('_value') + name = 'script_data' + enabled = True + + def __init__(self, value): + self._value = value + + def children(self): + v = self._value + t = v['type'] + yield 'type', ByteCode(t).to_string() # why does this not work? + v = v['u'] + t = int(t) + if t == ByteCode.PARAM: + yield 'reg', v['reg'] + elif t == ByteCode.RETINFO: + yield 'script', v['script'] + elif t in (ByteCode.STR, ByteCode.CONSTSTR): + yield 'str', v['str'] + else: + yield 'numi', v['numi'] -- cgit v1.2.3-60-g2f50