@@ -140,8 +140,28 @@ export function setattr (obj, name, value) {
140140 obj [ name ] = value ; // Will not work in combination with static retrieval of aliased attributes, too expensive
141141} ;
142142
143- export function getattr ( obj , name ) {
144- return name in obj ? obj [ name ] : obj [ 'py_' + name ] ;
143+ export var getattr = function ( obj , name , failsafe ) {
144+ if ( obj [ name ] !== undefined ) {
145+ return obj [ name ] ;
146+ } else if ( obj [ 'py_' + name ] !== undefined ) {
147+ return obj [ 'py_' + name ] ;
148+ } else if ( failsafe !== undefined ) {
149+ return failsafe ;
150+ } else {
151+ let message = "has no attribute '{}'" ;
152+ if ( obj . __class__ !== undefined ) {
153+ message = ( "'{}' object " + message ) . format ( obj . __class__ . __name__ , name ) ;
154+ } else if ( obj . __name__ !== undefined ) {
155+ message = ( "type object '{}' " + message ) . format ( obj . __name__ , name ) ;
156+ } else if ( obj . prototype !== undefined ) {
157+ message = ( "type object '{}' " + message ) . format ( obj . name || py_typeof ( obj ) , name ) ;
158+ } else {
159+ message = ( "'{}' object " + message ) . format ( obj . name || py_typeof ( obj ) , name ) ;
160+ }
161+ var __except0__ = AttributeError ( message , new Error ( ) ) ;
162+ __except0__ . __cause__ = null ;
163+ throw __except0__ ;
164+ }
145165} ;
146166
147167export function hasattr ( obj , name ) {
0 commit comments