diff options
author | Chad Austin <chad@imvu.com> | 2013-04-08 12:19:26 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-18 20:08:04 +0300 |
commit | f554c2fac03138bf6d3c25180b6dc6771fb80166 (patch) | |
tree | 0486c27f8cd2705ef4474b5ad92dcf7ba03313ca /src | |
parent | 040eb9db4222bf3b3eff2ba0ca72e83830f76d47 (diff) |
Generalize class property access.
Diffstat (limited to 'src')
-rwxr-xr-x | src/embind/embind.js | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index ee717f4b..03af7010 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -1154,42 +1154,47 @@ function __embind_register_class_class_function( } function __embind_register_class_property( - rawClassType, + classType, fieldName, - rawFieldType, + getterReturnType, getter, + getterContext, + setterArgumentType, setter, - context + setterContext ) { fieldName = Pointer_stringify(fieldName); getter = FUNCTION_TABLE[getter]; setter = FUNCTION_TABLE[setter]; - whenDependentTypesAreResolved([], [rawClassType], function(classType) { + + whenDependentTypesAreResolved([], [classType], function(classType) { classType = classType[0]; var humanName = classType.name + '.' + fieldName; Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, { get: function() { - throwUnboundTypeError('Cannot access ' + humanName + ' due to unbound types', [rawFieldType]); + throwUnboundTypeError('Cannot access ' + humanName + ' due to unbound types', [getterReturnType, setterArgumentType]); }, set: function() { - throwUnboundTypeError('Cannot access ' + humanName + ' due to unbound types', [rawFieldType]); + throwUnboundTypeError('Cannot access ' + humanName + ' due to unbound types', [getterReturnType, setterArgumentType]); }, enumerable: true, configurable: true }); - whenDependentTypesAreResolved([], [rawFieldType], function(fieldType) { - fieldType = fieldType[0]; + whenDependentTypesAreResolved([], [getterReturnType, setterArgumentType], function(types) { + var getterReturnType = types[0]; + var setterArgumentType = types[1]; + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, { get: function() { var ptr = validateThis(this, classType, humanName + ' getter'); - return fieldType.fromWireType(getter(context, ptr)); + return getterReturnType.fromWireType(getter(getterContext, ptr)); }, set: function(v) { var ptr = validateThis(this, classType, humanName + ' setter'); var destructors = []; - setter(context, ptr, fieldType.toWireType(destructors, v)); + setter(setterContext, ptr, setterArgumentType.toWireType(destructors, v)); runDestructors(destructors); }, enumerable: true |