aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChad Austin <chad@imvu.com>2013-04-08 12:19:26 -0700
committerJukka Jylänki <jujjyl@gmail.com>2013-04-18 20:08:04 +0300
commitf554c2fac03138bf6d3c25180b6dc6771fb80166 (patch)
tree0486c27f8cd2705ef4474b5ad92dcf7ba03313ca /src
parent040eb9db4222bf3b3eff2ba0ca72e83830f76d47 (diff)
Generalize class property access.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/embind/embind.js25
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