Mercurial > touhou
diff pytouhou/vm/common.py @ 376:69ec72b990a4
Support more than one version of a vm.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 06 Aug 2012 23:10:09 +0200 |
parents | a142e57218a0 |
children | e15672733c93 |
line wrap: on
line diff
--- a/pytouhou/vm/common.py +++ b/pytouhou/vm/common.py @@ -17,22 +17,19 @@ class MetaRegistry(type): def __new__(mcs, name, bases, classdict): instruction_handlers = {} for item in classdict.itervalues(): - try: - instruction_ids = item._instruction_ids - except AttributeError: - pass - else: - for id_ in instruction_ids: - instruction_handlers[id_] = item + if hasattr(item, '_instruction_ids'): + for version, instruction_ids in item._instruction_ids.iteritems(): + for id_ in instruction_ids: + instruction_handlers.setdefault(version, {})[id_] = item classdict['_handlers'] = instruction_handlers return type.__new__(mcs, name, bases, classdict) -def instruction(instruction_id): +def instruction(instruction_id, version=6): def _decorator(func): if not hasattr(func, '_instruction_ids'): - func._instruction_ids = set() - func._instruction_ids.add(instruction_id) + func._instruction_ids = {} + func._instruction_ids.setdefault(version, set()).add(instruction_id) return func return _decorator