Support watchos and tvos in cinterop definitions

This commit is contained in:
Kirill Shmakov
2019-10-30 18:39:46 +03:00
parent 08f9dd2aea
commit c7bd6d8ede
8 changed files with 794 additions and 651 deletions
File diff suppressed because it is too large Load Diff
@@ -23,34 +23,15 @@ public class NativeDefinitionsParser implements PsiParser, LightPsiParser {
boolean r;
b = adapt_builder_(t, b, this, null);
Marker m = enter_section_(b, 0, _COLLAPSE_, null);
if (t == BOOL_KEY) {
r = boolKey(b, 0);
}
else if (t == BOOL_VALUE) {
r = boolValue(b, 0);
}
else if (t == CODE) {
r = code(b, 0);
}
else if (t == STRING_KEY) {
r = stringKey(b, 0);
}
else if (t == STRING_VALUE) {
r = stringValue(b, 0);
}
else if (t == STRINGS_KEY) {
r = stringsKey(b, 0);
}
else if (t == STRINGS_VALUE) {
r = stringsValue(b, 0);
}
else {
r = parse_root_(t, b, 0);
}
r = parse_root_(t, b);
exit_section_(b, 0, m, t, r, true, TRUE_CONDITION);
}
protected boolean parse_root_(IElementType t, PsiBuilder b, int l) {
protected boolean parse_root_(IElementType t, PsiBuilder b) {
return parse_root_(t, b, 0);
}
static boolean parse_root_(IElementType t, PsiBuilder b, int l) {
return root(b, l + 1);
}
@@ -204,10 +185,12 @@ public class NativeDefinitionsParser implements PsiParser, LightPsiParser {
// ANDROID | ANDROID_ARM32 | ANDROID_ARM64 | ARM32 | ARM64 | IOS | IOS_ARM32
// | IOS_ARM64 | IOS_X64 | LINUX | LINUX_ARM32_HFP | LINUX_MIPS32
// | LINUX_MIPSEL32 | LINUX_X64 | MACOS_X64 | MINGW | MINGW_X64 | MIPS32
// | MIPSEL32 | OSX | WASM | WASM32 | X64 | UNKNOWN_PLATFORM
// | MIPSEL32 | OSX | TVOS | TVOS_ARM64 | TVOS_X64 | WASM | WASM32 | WATCHOS |
// | WATCHOS_ARM32 | WATCHOS_ARM64 | WATCHOS_X64 | WATCHOS_X86 | X64 | UNKNOWN_PLATFORM
static boolean platform_(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "platform_")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, ANDROID);
if (!r) r = consumeToken(b, ANDROID_ARM32);
if (!r) r = consumeToken(b, ANDROID_ARM64);
@@ -228,10 +211,20 @@ public class NativeDefinitionsParser implements PsiParser, LightPsiParser {
if (!r) r = consumeToken(b, MIPS32);
if (!r) r = consumeToken(b, MIPSEL32);
if (!r) r = consumeToken(b, OSX);
if (!r) r = consumeToken(b, TVOS);
if (!r) r = consumeToken(b, TVOS_ARM64);
if (!r) r = consumeToken(b, TVOS_X64);
if (!r) r = consumeToken(b, WASM);
if (!r) r = consumeToken(b, WASM32);
if (!r) r = consumeToken(b, WATCHOS);
if (!r) r = consumeToken(b, PLATFORM__26_0);
if (!r) r = consumeToken(b, WATCHOS_ARM32);
if (!r) r = consumeToken(b, WATCHOS_ARM64);
if (!r) r = consumeToken(b, WATCHOS_X64);
if (!r) r = consumeToken(b, WATCHOS_X86);
if (!r) r = consumeToken(b, X64);
if (!r) r = consumeToken(b, UNKNOWN_PLATFORM);
exit_section_(b, m, null, r);
return r;
}
@@ -57,14 +57,23 @@ public interface NativeDefinitionsTypes {
IElementType NO_STRING_CONVERSION = new NativeDefinitionsTokenType("noStringConversion");
IElementType OSX = new NativeDefinitionsTokenType("osx");
IElementType PACKAGE = new NativeDefinitionsTokenType("package");
IElementType PLATFORM__26_0 = new NativeDefinitionsTokenType("platform__26_0");
IElementType SEPARATOR = new NativeDefinitionsTokenType("SEPARATOR");
IElementType STATIC_LIBRARIES = new NativeDefinitionsTokenType("staticLibraries");
IElementType STRICT_ENUMS = new NativeDefinitionsTokenType("strictEnums");
IElementType TVOS = new NativeDefinitionsTokenType("TVOS");
IElementType TVOS_ARM64 = new NativeDefinitionsTokenType("TVOS_ARM64");
IElementType TVOS_X64 = new NativeDefinitionsTokenType("TVOS_X64");
IElementType UNKNOWN_KEY = new NativeDefinitionsTokenType("<unknown key>");
IElementType UNKNOWN_PLATFORM = new NativeDefinitionsTokenType("<unknown platform>");
IElementType VALUE = new NativeDefinitionsTokenType("VALUE");
IElementType WASM = new NativeDefinitionsTokenType("wasm");
IElementType WASM32 = new NativeDefinitionsTokenType("wasm32");
IElementType WATCHOS = new NativeDefinitionsTokenType("WATCHOS");
IElementType WATCHOS_ARM32 = new NativeDefinitionsTokenType("WATCHOS_ARM32");
IElementType WATCHOS_ARM64 = new NativeDefinitionsTokenType("WATCHOS_ARM64");
IElementType WATCHOS_X64 = new NativeDefinitionsTokenType("WATCHOS_X64");
IElementType WATCHOS_X86 = new NativeDefinitionsTokenType("WATCHOS_X86");
IElementType X64 = new NativeDefinitionsTokenType("x64");
class Factory {
@@ -92,6 +92,7 @@ private incorrectDefinition_ ::= UNKNOWN_KEY? UNKNOWN_PLATFORM? SEPARATOR VALUE?
private platform_ ::= ANDROID | ANDROID_ARM32 | ANDROID_ARM64 | ARM32 | ARM64 | IOS | IOS_ARM32
| IOS_ARM64 | IOS_X64 | LINUX | LINUX_ARM32_HFP | LINUX_MIPS32
| LINUX_MIPSEL32 | LINUX_X64 | MACOS_X64 | MINGW | MINGW_X64 | MIPS32
| MIPSEL32 | OSX | WASM | WASM32 | X64 | UNKNOWN_PLATFORM
| MIPSEL32 | OSX | TVOS | TVOS_ARM64 | TVOS_X64 | WASM | WASM32 | WATCHOS |
| WATCHOS_ARM32 | WATCHOS_ARM64 | WATCHOS_X64 | WATCHOS_X86 | X64 | UNKNOWN_PLATFORM
code ::= CODE_CHARS
@@ -70,8 +70,16 @@ MINGW_X64="mingw_x64"
MIPS32="mips32"
MIPSEL32="mipsel32"
OSX="osx"
TVOS="tvos"
TVOS_ARM64="tvos_arm64"
TVOS_X64="tvos_x64"
WASM="wasm"
WASM32="wasm32"
WATCHOS="watchos"
WATCHOS_ARM32="watchos_arm32"
WATCHOS_ARM64="watchos_arm64"
WATCHOS_X64="watchos_x64"
WATCHOS_X86="watchos_x86"
X64="x64"
@@ -131,8 +139,16 @@ X64="x64"
[.]{MIPS32} { return MIPS32; }
[.]{MIPSEL32} { return MIPSEL32; }
[.]{OSX} { return OSX; }
[.]{TVOS} { return TVOS; }
[.]{TVOS_ARM64} { return TVOS_ARM64; }
[.]{TVOS_X64} { return TVOS_X64; }
[.]{WASM} { return WASM; }
[.]{WASM32} { return WASM32; }
[.]{WATCHOS} { return WATCHOS; }
[.]{WATCHOS_ARM32} { return WATCHOS_ARM32; }
[.]{WATCHOS_ARM64} { return WATCHOS_ARM64; }
[.]{WATCHOS_X64} { return WATCHOS_X64; }
[.]{WATCHOS_X86} { return WATCHOS_X86; }
[.]{X64} { return X64; }
[.]{PLATFORM_CHAR}+ { return UNKNOWN_PLATFORM; }
{SEPARATOR} { yybegin(WAITING_VALUE); return SEPARATOR; }
@@ -144,8 +144,16 @@ object NativeDefinitionsSyntaxHighlighter : SyntaxHighlighterBase() {
NativeDefinitionsTypes.MIPS32 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.MIPSEL32 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.OSX -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.TVOS -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.TVOS_ARM64 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.TVOS_X64 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WASM -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WASM32 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WATCHOS -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WATCHOS_ARM32 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WATCHOS_ARM64 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WATCHOS_X64 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.WATCHOS_X86 -> KNOWN_EXTENSIONS_KEYS
NativeDefinitionsTypes.X64 -> KNOWN_EXTENSIONS_KEYS
else -> EMPTY_KEYS
}
@@ -25,12 +25,14 @@ linker=clang
linkerOpts = -DBAR=bar -DBAZ=baz
linkerOpts.linux_mipsel32 = -fpic
entryPoint = main1 main2
entryPoint.tvos_x64 = main3
nonStrictEnums.wasm32 = non strict
noStringConversion.linux_arm32_hfp = no string
strictEnums.android_arm64 = strict enums
modules.osx = baba
modules.watchos_arm64 = deda
---
+56 -38
View File
@@ -1,4 +1,4 @@
Definitions file for Kotlin/Native C interop(0,1420)
Definitions file for Kotlin/Native C interop(0,1477)
PsiComment(NativeDefinitionsTokenType.COMMENT)('# In this test case all supported properties are used.')(0,54)
PsiWhiteSpace('\n')(54,55)
NativeDefinitionsStringKeyImpl(STRING_KEY)(55,62)
@@ -171,43 +171,61 @@ Definitions file for Kotlin/Native C interop(0,1420)
PsiWhiteSpace(' ')(821,822)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(822,833)
PsiElement(NativeDefinitionsTokenType.VALUE)('main1 main2')(822,833)
PsiWhiteSpace('\n\n')(833,835)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(835,849)
PsiElement(NativeDefinitionsTokenType.nonStrictEnums)('nonStrictEnums')(835,849)
PsiElement(NativeDefinitionsTokenType.wasm32)('.wasm32')(849,856)
PsiWhiteSpace(' ')(856,857)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(857,858)
PsiWhiteSpace(' ')(858,859)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(859,869)
PsiElement(NativeDefinitionsTokenType.VALUE)('non strict')(859,869)
PsiWhiteSpace('\n')(869,870)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(870,888)
PsiElement(NativeDefinitionsTokenType.noStringConversion)('noStringConversion')(870,888)
PsiElement(NativeDefinitionsTokenType.linux_arm32_hfp)('.linux_arm32_hfp')(888,904)
PsiWhiteSpace(' ')(904,905)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(905,906)
PsiWhiteSpace(' ')(906,907)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(907,916)
PsiElement(NativeDefinitionsTokenType.VALUE)('no string')(907,916)
PsiWhiteSpace('\n')(916,917)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(917,928)
PsiElement(NativeDefinitionsTokenType.strictEnums)('strictEnums')(917,928)
PsiElement(NativeDefinitionsTokenType.android_arm64)('.android_arm64')(928,942)
PsiWhiteSpace(' ')(942,943)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(943,944)
PsiWhiteSpace(' ')(944,945)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(945,957)
PsiElement(NativeDefinitionsTokenType.VALUE)('strict enums')(945,957)
PsiWhiteSpace('\n\n')(957,959)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(959,966)
PsiElement(NativeDefinitionsTokenType.modules)('modules')(959,966)
PsiElement(NativeDefinitionsTokenType.osx)('.osx')(966,970)
PsiWhiteSpace('\n')(833,834)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(834,844)
PsiElement(NativeDefinitionsTokenType.entryPoint)('entryPoint')(834,844)
PsiElement(NativeDefinitionsTokenType.TVOS_X64)('.tvos_x64')(844,853)
PsiWhiteSpace(' ')(853,854)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(854,855)
PsiWhiteSpace(' ')(855,856)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(856,861)
PsiElement(NativeDefinitionsTokenType.VALUE)('main3')(856,861)
PsiWhiteSpace('\n\n')(861,863)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(863,877)
PsiElement(NativeDefinitionsTokenType.nonStrictEnums)('nonStrictEnums')(863,877)
PsiElement(NativeDefinitionsTokenType.wasm32)('.wasm32')(877,884)
PsiWhiteSpace(' ')(884,885)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(885,886)
PsiWhiteSpace(' ')(886,887)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(887,897)
PsiElement(NativeDefinitionsTokenType.VALUE)('non strict')(887,897)
PsiWhiteSpace('\n')(897,898)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(898,916)
PsiElement(NativeDefinitionsTokenType.noStringConversion)('noStringConversion')(898,916)
PsiElement(NativeDefinitionsTokenType.linux_arm32_hfp)('.linux_arm32_hfp')(916,932)
PsiWhiteSpace(' ')(932,933)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(933,934)
PsiWhiteSpace(' ')(934,935)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(935,944)
PsiElement(NativeDefinitionsTokenType.VALUE)('no string')(935,944)
PsiWhiteSpace('\n')(944,945)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(945,956)
PsiElement(NativeDefinitionsTokenType.strictEnums)('strictEnums')(945,956)
PsiElement(NativeDefinitionsTokenType.android_arm64)('.android_arm64')(956,970)
PsiWhiteSpace(' ')(970,971)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(971,972)
PsiWhiteSpace(' ')(972,973)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(973,977)
PsiElement(NativeDefinitionsTokenType.VALUE)('baba')(973,977)
PsiWhiteSpace('\n\n')(977,979)
PsiElement(NativeDefinitionsTokenType.DELIM)('---\n')(979,983)
NativeDefinitionsCodeImpl(CODE)(983,1420)
PsiElement(NativeDefinitionsTokenType.CODE_CHARS)('\nstruct Hash { // Line comment.\n int data[2];\n};\n\n/**********************\n * Multiline comment. *\n **********************/\ninline static int strangeSum(const int* buffer, int bufferSize) {\n int result = 20;\n const char * stringLiteral = "This is a string";\n for (int i = 0; i < bufferSize; ++i) {\n result += stringLiteral[i % 10] & 1 == 0 ? (i << 1) : buffer[i / 2];\n if (stringLiter)\n }\n return result;\n}')(983,1420)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(973,985)
PsiElement(NativeDefinitionsTokenType.VALUE)('strict enums')(973,985)
PsiWhiteSpace('\n\n')(985,987)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(987,994)
PsiElement(NativeDefinitionsTokenType.modules)('modules')(987,994)
PsiElement(NativeDefinitionsTokenType.osx)('.osx')(994,998)
PsiWhiteSpace(' ')(998,999)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(999,1000)
PsiWhiteSpace(' ')(1000,1001)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(1001,1005)
PsiElement(NativeDefinitionsTokenType.VALUE)('baba')(1001,1005)
PsiWhiteSpace('\n')(1005,1006)
NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(1006,1013)
PsiElement(NativeDefinitionsTokenType.modules)('modules')(1006,1013)
PsiElement(NativeDefinitionsTokenType.WATCHOS_ARM64)('.watchos_arm64')(1013,1027)
PsiWhiteSpace(' ')(1027,1028)
PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(1028,1029)
PsiWhiteSpace(' ')(1029,1030)
NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(1030,1034)
PsiElement(NativeDefinitionsTokenType.VALUE)('deda')(1030,1034)
PsiWhiteSpace('\n\n')(1034,1036)
PsiElement(NativeDefinitionsTokenType.DELIM)('---\n')(1036,1040)
NativeDefinitionsCodeImpl(CODE)(1040,1477)
PsiElement(NativeDefinitionsTokenType.CODE_CHARS)('\nstruct Hash { // Line comment.\n int data[2];\n};\n\n/**********************\n * Multiline comment. *\n **********************/\ninline static int strangeSum(const int* buffer, int bufferSize) {\n int result = 20;\n const char * stringLiteral = "This is a string";\n for (int i = 0; i < bufferSize; ++i) {\n result += stringLiteral[i % 10] & 1 == 0 ? (i << 1) : buffer[i / 2];\n if (stringLiter)\n }\n return result;\n}')(1040,1477)