diff options
author | Steve Reinhardt <steve.reinhardt@amd.com> | 2010-07-05 21:39:38 -0700 |
---|---|---|
committer | Steve Reinhardt <steve.reinhardt@amd.com> | 2010-07-05 21:39:38 -0700 |
commit | 387cbffb7a3c28ea7b9afe8082d25a179d2de683 (patch) | |
tree | 22c533943bd75e3ad608e6247e44666411ae739c | |
parent | 30ce620d1d7b04387072e2dcf87530c33eb7c608 (diff) | |
download | gem5-387cbffb7a3c28ea7b9afe8082d25a179d2de683.tar.xz |
sim: allow SimObject subclasses to define classmethods
(without requiring a leading underscore)
Also a little cleanup on type names in SimObject.py.
-rw-r--r-- | src/python/m5/SimObject.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 0e0ffaea9..e6f0e36b2 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -29,7 +29,7 @@ import math import sys -import types +from types import FunctionType try: import pydot @@ -102,15 +102,15 @@ instanceDict = {} # class are instantiated, and provides inherited instance behavior). class MetaSimObject(type): # Attributes that can be set only at initialization time - init_keywords = { 'abstract' : types.BooleanType, - 'cxx_class' : types.StringType, - 'cxx_type' : types.StringType, - 'cxx_predecls' : types.ListType, - 'swig_objdecls' : types.ListType, - 'swig_predecls' : types.ListType, - 'type' : types.StringType } + init_keywords = { 'abstract' : bool, + 'cxx_class' : str, + 'cxx_type' : str, + 'cxx_predecls' : list, + 'swig_objdecls' : list, + 'swig_predecls' : list, + 'type' : str } # Attributes that can be set any time - keywords = { 'check' : types.FunctionType } + keywords = { 'check' : FunctionType } # __new__ is called before __init__, and is where the statements # in the body of the class definition get loaded into the class's @@ -126,8 +126,9 @@ class MetaSimObject(type): cls_dict = {} value_dict = {} for key,val in dict.items(): - if key.startswith('_') or isinstance(val, (types.FunctionType, - types.TypeType)): + if key.startswith('_') or isinstance(val, (FunctionType, + classmethod, + type)): cls_dict[key] = val else: # must be a param/port setting @@ -233,7 +234,7 @@ class MetaSimObject(type): if not isinstance(val, kwtype): raise TypeError, 'keyword %s has bad type %s (expecting %s)' % \ (keyword, type(val), kwtype) - if isinstance(val, types.FunctionType): + if isinstance(val, FunctionType): val = classmethod(val) type.__setattr__(cls, keyword, val) |