| Index: compiled/bindings/generator.cpp |
| =================================================================== |
| --- a/compiled/bindings/generator.cpp |
| +++ b/compiled/bindings/generator.cpp |
| @@ -399,27 +399,21 @@ namespace bindings_internal |
| printf("});\n"); |
| // Print static members |
| DifferentiatorInfo differentiator = cls.subclass_differentiator; |
| if (differentiator.offset != SIZE_MAX) |
| { |
| - printf("var %s_mapping = \n", cls.name.c_str()); |
| - puts("{"); |
| - for (const auto& item : differentiator.mapping) |
| - printf(" %i: '%s',\n", item.first, item.second.c_str()); |
| - puts("};"); |
| - |
| printf("exports.%s.fromPointer = function(ptr)\n", cls.name.c_str()); |
| puts("{"); |
| printf(" var type = HEAP32[ptr + %i >> 2];\n", differentiator.offset); |
| printf(" if (type in %s_mapping)\n", cls.name.c_str()); |
| - printf(" return new (exports[%s_mapping[type]])(ptr);\n", cls.name.c_str()); |
| + printf(" return new %s_mapping[type](ptr);\n", cls.name.c_str()); |
| printf(" throw new Error('Unexpected %s type: ' + type);\n", cls.name.c_str()); |
| puts("};"); |
| } |
| else |
| { |
| printf("exports.%s.fromPointer = function(ptr)\n", cls.name.c_str()); |
| puts("{"); |
| printf(" return new exports.%s(ptr);\n", cls.name.c_str()); |
| @@ -430,17 +424,32 @@ namespace bindings_internal |
| { |
| if (!method.call.instance_function) |
| { |
| printf("exports.%s.%s = %s;\n", cls.name.c_str(), method.name.c_str(), |
| wrapCall(method.call).c_str()); |
| } |
| } |
| } |
| + |
| + void printClassMapping(const ClassInfo& cls) |
| + { |
| + DifferentiatorInfo differentiator = cls.subclass_differentiator; |
| + if (differentiator.offset == SIZE_MAX) |
| + return; |
| + |
| + printf("var %s_mapping = \n", cls.name.c_str()); |
| + puts("{"); |
| + for (const auto& item : differentiator.mapping) |
| + printf(" %i: exports.%s,\n", item.first, item.second.c_str()); |
| + puts("};"); |
| + } |
| } |
| void printBindings() |
| { |
| bindings_internal::printHelpers(); |
| - for (const auto& item : classes) |
| - bindings_internal::printClass(item); |
| + for (const auto& cls : classes) |
| + bindings_internal::printClass(cls); |
| + for (const auto& cls : classes) |
| + bindings_internal::printClassMapping(cls); |
| } |