| Index: compiled/bindings/generator.cpp |
| =================================================================== |
| --- a/compiled/bindings/generator.cpp |
| +++ b/compiled/bindings/generator.cpp |
| @@ -64,16 +64,17 @@ namespace bindings_internal |
| break; |
| case TypeCategory::DOUBLE: |
| signature += 'd'; |
| break; |
| case TypeCategory::INT: |
| case TypeCategory::INT64: |
| case TypeCategory::STRING_REF: |
| case TypeCategory::CLASS_PTR: |
| + case TypeCategory::CLASS_REF: |
| signature += 'i'; |
| break; |
| default: |
| throw std::runtime_error("Unexpected function return type"); |
| } |
| // `this` pointer is an implicit parameter with clang and should be added |
| // to the signature. |
| @@ -84,16 +85,17 @@ namespace bindings_internal |
| // https://github.com/kripken/emscripten/blob/1.37.3/src/modules.js#L67 |
| for (const auto& type : argTypes) |
| { |
| switch (type) |
| { |
| case TypeCategory::INT: |
| case TypeCategory::STRING_REF: |
| case TypeCategory::CLASS_PTR: |
| + case TypeCategory::CLASS_REF: |
| signature += 'i'; |
| break; |
| case TypeCategory::INT64: |
| // See https://github.com/kripken/emscripten/blob/1.37.3/src/modules.js#L73, |
| // numerical types larger than 32-bit are split into multiple |
| // 32-bit parameters. |
| signature += "ii"; |
| break; |
| @@ -240,16 +242,17 @@ namespace bindings_internal |
| result += " " + call_str + ";\n"; |
| result += " var result = readString(string);\n"; |
| result += " Module._DestroyString(string);\n"; |
| return result; |
| } |
| case TypeCategory::STRING_REF: |
| return " var result = readString(" + call_str + ");\n"; |
| case TypeCategory::CLASS_PTR: |
| + case TypeCategory::CLASS_REF: |
| { |
| std::string result; |
| result += " var result = " + call_str + ";\n"; |
| result += " if (result)\n"; |
| const ClassInfo* cls = find_class(call.pointerType); |
| if (!cls) |
| throw std::runtime_error("Function " + call.name + " returns pointer to unknown class"); |
| @@ -288,16 +291,18 @@ namespace bindings_internal |
| if (call.args[i] == TypeCategory::STRING_REF) |
| { |
| hasStringArgs = true; |
| params.push_back(std::string("createString(") + argName + ")"); |
| } |
| else if (call.args[i] == TypeCategory::CLASS_PTR) |
| params.push_back(argName + " ? " + argName + "._pointer : 0"); |
| + else if (call.args[i] == TypeCategory::CLASS_REF) |
| + params.push_back(argName + "._pointer"); |
|
Wladimir Palant
2017/08/31 12:37:39
This is an implicit null check, should be good eno
sergei
2017/08/31 12:59:20
LGTM, though not tested.
|
| else if (call.args[i] == TypeCategory::INT64) |
| { |
| // 64-bit integers are passed as two integer parameters |
| params.push_back(argName + " >>> 0"); |
| params.push_back(argName + " / 0x100000000 >>> 0"); |
| } |
| else |
| params.push_back(argName); |