diff options
-rw-r--r-- | real.make | 2 | ||||
-rw-r--r-- | src/common/io.hpp | 26 | ||||
-rw-r--r-- | src/map/script.py | 56 |
3 files changed, 58 insertions, 26 deletions
@@ -271,6 +271,8 @@ obj/%/autolist.d: $(filter-out %/autolist.d,${DEPENDS}) include ${DEPENDS} # I'm not convinced keeping the bin/ is a good idea +# TODO - for development, regenerate -gdb.py even if the binary +# doesn't need to be rebuilt. For release, the version forces rebuild. bin/%: $(MKDIR_FIRST) ${CXX} ${LDFLAGS} $^ ${LDLIBS} -o $@ 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 <istream> -#include <ostream> - -#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'] |