Skip to content

Commit 06e4d33

Browse files
committed
fix: use napi_run_script to register inline functions correctly, look for NS_RETURNS_RETAINED, unique encoding for methods with different signature offsets used in the method definition, fix type errors in generated TS types
1 parent c4538d3 commit 06e4d33

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+3125
-2499
lines changed

deno.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
"build": "deno run -A scripts/build.ts",
1414
"bench": "node examples/main.js",
1515
"deno": "../deno/target/release/deno run -A",
16-
"bundle": "deno run -A --unstable scripts/bundler.ts",
16+
"bundle": "deno run -A scripts/bundler.ts",
1717
"open-bundle": "open \"NativeScript for macOS.app\"",
18-
"metagen": "deno run -A --unstable scripts/metagen.ts",
18+
"metagen": "deno run -A scripts/metagen.ts",
1919
"build-metagen": "cd metadata && deno task build"
2020
},
2121

metadata/include/IR.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class MemberDecl {
216216
std::string methodSelector;
217217
bool isVariadic;
218218
bool isInit = false;
219+
bool returnOwned = false;
219220

220221
// Property
221222
TypeSpec propertyType;

metadata/metadata.ios.nsmd

10 KB
Binary file not shown.

metadata/metadata.macos.nsmd

6.04 KB
Binary file not shown.

metadata/src/IR/Member.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "IR.h"
2+
#include "clang-c/Index.h"
23
#include <cassert>
34

45
namespace metagen {
@@ -20,6 +21,23 @@ MemberDecl::MemberDecl(CXCursor cursor,
2021
name = jsifySelector(methodSelector);
2122
clang_disposeString(cxname);
2223

24+
clang_visitChildren(
25+
cursor,
26+
[](CXCursor cursor, CXCursor, CXClientData clientData) {
27+
if (!isAvailable(cursor)) {
28+
return CXChildVisit_Continue;
29+
}
30+
31+
auto method = (MemberDecl *)clientData;
32+
33+
if (cursor.kind == CXCursor_NSReturnsRetained) {
34+
method->returnOwned = true;
35+
}
36+
37+
return CXChildVisit_Continue;
38+
},
39+
this);
40+
2341
auto argc = clang_Cursor_getNumArguments(cursor);
2442

2543
for (int i = 0; i < argc; i++) {

metadata/src/IR/Protocol.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void ProtocolDecl::postProcessMembers() {
8686

8787
for (ProtocolDecl *protocol : protocolRefs) {
8888
convertMethodToPropertyIfNeeded(
89-
member, protocol->getMemberNamed(member.name), false);
89+
member, protocol->getMemberNamed(member.name), true);
9090
}
9191

9292
for (ProtocolDecl *protocol : derivedProtocolRefs) {

metadata/src/MetadataWriter/Member.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ MDMember *MDMetadataWriter::memberFromDecl(MemberDecl &decl) {
5151
member->flags = mdMemberMethod;
5252
if (decl.isStatic)
5353
member->flags = (MDMemberFlag)(member->flags | mdMemberStatic);
54-
if (isSelectorOwned(decl.methodSelector))
54+
if (isSelectorOwned(decl.methodSelector) || decl.returnOwned)
5555
member->flags = (MDMemberFlag)(member->flags | mdMemberReturnOwned);
5656

5757
if (decl.isInit) {
@@ -66,6 +66,7 @@ MDMember *MDMetadataWriter::memberFromDecl(MemberDecl &decl) {
6666
mdSignature->isVariadic = decl.isVariadic;
6767
MDSignatureResolvable res{mdSignature, &member->signature};
6868
signatureResolvables.emplace_back(res);
69+
6970
break;
7071
}
7172
}

metadata/src/MetadataWriter/TypeSpec.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ std::string MDTypeInfoSerde::encode(MDTypeInfo *type) {
361361
result += "}";
362362
break;
363363
case mdTypeBlock:
364-
result = "^?";
364+
result = "^" + std::to_string(type->signatureOffset);
365365
break;
366366
case mdTypePointer:
367367
result = "^";

metadata/src/TSEmitter/Class.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void TSFile::write(ClassDecl &decl) {
3939

4040
line += " {";
4141
if (decl.tsIgnore) {
42-
code.write("// @ts-ignore");
42+
code.write("// @ts-ignore ClassDecl.tsIgnore");
4343
}
4444
code.write(line);
4545
code.enter();

metadata/src/TSEmitter/Member.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void TSFile::write(MemberDecl &decl, bool isInterface,
7272
// Due to inconsistencies between Objective-C and TypeScript type
7373
// systems, we have to use this annotation to prevent the TypeScript
7474
// compiler from complaining about how one type doesn't satisfy another.
75-
code.write("// @ts-ignore");
75+
code.write("// @ts-ignore MemberDecl.tsIgnore");
7676
}
7777

7878
code.write(line);
@@ -97,7 +97,7 @@ void TSFile::write(MemberDecl &decl, bool isInterface,
9797
: getterType;
9898
line += ";";
9999
if (decl.tsIgnore) {
100-
code.write("// @ts-ignore");
100+
code.write("// @ts-ignore MemberDecl.tsIgnore");
101101
}
102102
code.write(line);
103103

@@ -114,7 +114,7 @@ void TSFile::write(MemberDecl &decl, bool isInterface,
114114
: setterType;
115115
line += ");";
116116
if (decl.tsIgnore) {
117-
code.write("// @ts-ignore");
117+
code.write("// @ts-ignore MemberDecl.tsIgnore");
118118
}
119119
code.write(line);
120120
} else {
@@ -136,7 +136,7 @@ void TSFile::write(MemberDecl &decl, bool isInterface,
136136
line += ";";
137137

138138
if (decl.tsIgnore) {
139-
code.write("// @ts-ignore");
139+
code.write("// @ts-ignore MemberDecl.tsIgnore");
140140
}
141141

142142
code.write(line);

0 commit comments

Comments
 (0)