aboutsummaryrefslogtreecommitdiff
path: root/py/objtype.c
diff options
context:
space:
mode:
authorDamien George2014-03-03 22:12:32 +0000
committerDamien George2014-03-03 22:12:32 +0000
commit2ab1797d1d6f6b7590f7a0a8146b46ffe7bcb2f2 (patch)
treea8e45a23c469ea56390535001f423892ad8d572a /py/objtype.c
parent61f9b1c6217d2371e01638354c852913e071fbea (diff)
parente74f52b76c2be9aefca689e34cd05f8f64be02f8 (diff)
Merge pull request #332 from pfalcon/namedtuple
Implement collections.namedtuple
Diffstat (limited to 'py/objtype.c')
-rw-r--r--py/objtype.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/py/objtype.c b/py/objtype.c
index 46b96c731..c814e9c75 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -454,16 +454,7 @@ mp_obj_t mp_obj_new_super(mp_obj_t type, mp_obj_t obj) {
/******************************************************************************/
// subclassing and built-ins specific to types
-bool mp_obj_is_subclass(mp_obj_t object, mp_obj_t classinfo) {
- if (!MP_OBJ_IS_TYPE(object, &mp_type_type)) {
- nlr_jump(mp_obj_new_exception_msg(&mp_type_TypeError, "issubclass() arg 1 must be a class"));
- }
-
- // TODO support a tuple of classes for second argument
- if (!MP_OBJ_IS_TYPE(classinfo, &mp_type_type)) {
- nlr_jump(mp_obj_new_exception_msg(&mp_type_TypeError, "issubclass() arg 2 must be a class"));
- }
-
+bool mp_obj_is_subclass_fast(mp_obj_t object, mp_obj_t classinfo) {
for (;;) {
if (object == classinfo) {
return true;
@@ -496,6 +487,19 @@ bool mp_obj_is_subclass(mp_obj_t object, mp_obj_t classinfo) {
}
}
+bool mp_obj_is_subclass(mp_obj_t object, mp_obj_t classinfo) {
+ if (!MP_OBJ_IS_TYPE(object, &mp_type_type)) {
+ nlr_jump(mp_obj_new_exception_msg(&mp_type_TypeError, "issubclass() arg 1 must be a class"));
+ }
+
+ // TODO support a tuple of classes for second argument
+ if (!MP_OBJ_IS_TYPE(classinfo, &mp_type_type)) {
+ nlr_jump(mp_obj_new_exception_msg(&mp_type_TypeError, "issubclass() arg 2 must be a class"));
+ }
+
+ return mp_obj_is_subclass_fast(object, classinfo);
+}
+
STATIC mp_obj_t mp_builtin_issubclass(mp_obj_t object, mp_obj_t classinfo) {
return MP_BOOL(mp_obj_is_subclass(object, classinfo));
}