authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-28 16:21:07-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-04-28 16:21:07-04:00
log03dd1fca94526f78400c662b6b1e712c05aee849
tree8655669fbdba9243a2a6ef1a3105f565d69ff76b
parentdb25c78413ac4472c6d50122d96c85a42dc032bc
parent2ef0795bfb440671bffd3c6b93603c012d27c24d
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #5195 from tadeokondrak/opaquetype-to-type-opaque

@OpaqueType -> `@Type(.Opaque)

12 files changed, 158 insertions(+), 159 deletions(-)

doc/langref.html.in+30-32
...@@ -1885,7 +1885,7 @@ test "null terminated array" {...@@ -1885,7 +1885,7 @@ test "null terminated array" {
1885 <li>Supports slice syntax: {#syntax#}ptr[start..end]{#endsyntax#}</li>1885 <li>Supports slice syntax: {#syntax#}ptr[start..end]{#endsyntax#}</li>
1886 <li>Supports pointer arithmetic: {#syntax#}ptr + x{#endsyntax#}, {#syntax#}ptr - x{#endsyntax#}</li>1886 <li>Supports pointer arithmetic: {#syntax#}ptr + x{#endsyntax#}, {#syntax#}ptr - x{#endsyntax#}</li>
1887 <li>{#syntax#}T{#endsyntax#} must have a known size, which means that it cannot be1887 <li>{#syntax#}T{#endsyntax#} must have a known size, which means that it cannot be
1888 {#syntax#}c_void{#endsyntax#} or any other {#link|@OpaqueType#}.</li>1888 {#syntax#}c_void{#endsyntax#} or any other {#link|opaque type|Opaque Types#}.</li>
1889 </ul>1889 </ul>
1890 </li>1890 </li>
1891 </ul>1891 </ul>
...@@ -5392,7 +5392,7 @@ fn eql_i32(a: i32, b: i32) bool {...@@ -5392,7 +5392,7 @@ fn eql_i32(a: i32, b: i32) bool {
5392 </p>5392 </p>
5393 <p>5393 <p>
5394 {#syntax#}void{#endsyntax#} is distinct from {#syntax#}c_void{#endsyntax#}, which is defined like this:5394 {#syntax#}void{#endsyntax#} is distinct from {#syntax#}c_void{#endsyntax#}, which is defined like this:
5395 {#syntax#}pub const c_void = @OpaqueType();{#endsyntax#}.5395 {#syntax#}pub const c_void = @Type(.Opaque);{#endsyntax#}.
5396 {#syntax#}void{#endsyntax#} has a known size of 0 bytes, and {#syntax#}c_void{#endsyntax#} has an unknown, but non-zero, size.5396 {#syntax#}void{#endsyntax#} has a known size of 0 bytes, and {#syntax#}c_void{#endsyntax#} has an unknown, but non-zero, size.
5397 </p>5397 </p>
5398 <p>5398 <p>
...@@ -7666,30 +7666,6 @@ mem.set(u8, dest, c);{#endsyntax#}</pre>...@@ -7666,30 +7666,6 @@ mem.set(u8, dest, c);{#endsyntax#}</pre>
7666 </p>7666 </p>
7667 {#header_close#}7667 {#header_close#}
76687668
7669 {#header_open|@OpaqueType#}
7670 <pre>{#syntax#}@OpaqueType() type{#endsyntax#}</pre>
7671 <p>
7672 Creates a new type with an unknown (but non-zero) size and alignment.
7673 </p>
7674 <p>
7675 This is typically used for type safety when interacting with C code that does not expose struct details.
7676 Example:
7677 </p>
7678 {#code_begin|test_err|expected type '*Derp', found '*Wat'#}
7679const Derp = @OpaqueType();
7680const Wat = @OpaqueType();
7681
7682extern fn bar(d: *Derp) void;
7683fn foo(w: *Wat) callconv(.C) void {
7684 bar(w);
7685}
7686
7687test "call foo" {
7688 foo(undefined);
7689}
7690 {#code_end#}
7691 {#header_close#}
7692
7693 {#header_open|@panic#}7669 {#header_open|@panic#}
7694 <pre>{#syntax#}@panic(message: []const u8) noreturn{#endsyntax#}</pre>7670 <pre>{#syntax#}@panic(message: []const u8) noreturn{#endsyntax#}</pre>
7695 <p>7671 <p>
...@@ -8274,21 +8250,21 @@ test "integer truncation" {...@@ -8274,21 +8250,21 @@ test "integer truncation" {
8274 <li>{#syntax#}comptime_float{#endsyntax#}</li>8250 <li>{#syntax#}comptime_float{#endsyntax#}</li>
8275 <li>{#syntax#}@TypeOf(undefined){#endsyntax#}</li>8251 <li>{#syntax#}@TypeOf(undefined){#endsyntax#}</li>
8276 <li>{#syntax#}@TypeOf(null){#endsyntax#}</li>8252 <li>{#syntax#}@TypeOf(null){#endsyntax#}</li>
8253 <li>{#link|Arrays#}</li>
8254 <li>{#link|Optionals#}</li>
8255 <li>{#link|Error Union Type#}</li>
8256 <li>{#link|Vectors#}</li>
8257 <li>{#link|Opaque Types#}</li>
8258 <li>AnyFrame</li>
8277 </ul>8259 </ul>
8278 <p>8260 <p>
8279 For these types it is a8261 For these types it is a
8280 <a href="https://github.com/ziglang/zig/issues/2907">TODO in the compiler to implement</a>:8262 <a href="https://github.com/ziglang/zig/issues/2907">TODO in the compiler to implement</a>:
8281 </p>8263 </p>
8282 <ul>8264 <ul>
8283 <li>Array</li>
8284 <li>Optional</li>
8285 <li>ErrorUnion</li>
8286 <li>ErrorSet</li>8265 <li>ErrorSet</li>
8287 <li>Enum</li>8266 <li>Enum</li>
8288 <li>Opaque</li>
8289 <li>FnFrame</li>8267 <li>FnFrame</li>
8290 <li>AnyFrame</li>
8291 <li>Vector</li>
8292 <li>EnumLiteral</li>8268 <li>EnumLiteral</li>
8293 </ul>8269 </ul>
8294 <p>8270 <p>
...@@ -8373,6 +8349,28 @@ fn foo(comptime T: type, ptr: *T) T {...@@ -8373,6 +8349,28 @@ fn foo(comptime T: type, ptr: *T) T {
8373 {#header_close#}8349 {#header_close#}
8374 {#header_close#}8350 {#header_close#}
83758351
8352 {#header_open|Opaque Types#}
8353 {#syntax#}@Type(.Opaque){#endsyntax#} creates a new type with an unknown (but non-zero) size and alignment.
8354 </p>
8355 <p>
8356 This is typically used for type safety when interacting with C code that does not expose struct details.
8357 Example:
8358 </p>
8359 {#code_begin|test_err|expected type '*Derp', found '*Wat'#}
8360const Derp = @Type(.Opaque);
8361const Wat = @Type(.Opaque);
8362
8363extern fn bar(d: *Derp) void;
8364fn foo(w: *Wat) callconv(.C) void {
8365 bar(w);
8366}
8367
8368test "call foo" {
8369 foo(undefined);
8370}
8371 {#code_end#}
8372 {#header_close#}
8373
8376 {#header_open|Build Mode#}8374 {#header_open|Build Mode#}
8377 <p>8375 <p>
8378 Zig has four build modes:8376 Zig has four build modes:
lib/std/c.zig+2-2
...@@ -277,8 +277,8 @@ pub extern "c" fn pthread_cond_signal(cond: *pthread_cond_t) c_int;...@@ -277,8 +277,8 @@ pub extern "c" fn pthread_cond_signal(cond: *pthread_cond_t) c_int;
277pub extern "c" fn pthread_cond_broadcast(cond: *pthread_cond_t) c_int;277pub extern "c" fn pthread_cond_broadcast(cond: *pthread_cond_t) c_int;
278pub extern "c" fn pthread_cond_destroy(cond: *pthread_cond_t) c_int;278pub extern "c" fn pthread_cond_destroy(cond: *pthread_cond_t) c_int;
279279
280pub const pthread_t = *@OpaqueType();280pub const pthread_t = *@Type(.Opaque);
281pub const FILE = @OpaqueType();281pub const FILE = @Type(.Opaque);
282282
283pub extern "c" fn dlopen(path: [*:0]const u8, mode: c_int) ?*c_void;283pub extern "c" fn dlopen(path: [*:0]const u8, mode: c_int) ?*c_void;
284pub extern "c" fn dlclose(handle: *c_void) c_int;284pub extern "c" fn dlclose(handle: *c_void) c_int;
lib/std/os/uefi.zig+3-3
...@@ -12,7 +12,7 @@ pub var handle: Handle = undefined;...@@ -12,7 +12,7 @@ pub var handle: Handle = undefined;
12pub var system_table: *tables.SystemTable = undefined;12pub var system_table: *tables.SystemTable = undefined;
1313
14/// A handle to an event structure.14/// A handle to an event structure.
15pub const Event = *@OpaqueType();15pub const Event = *@Type(.Opaque);
1616
17/// GUIDs must be align(8)17/// GUIDs must be align(8)
18pub const Guid = extern struct {18pub const Guid = extern struct {
...@@ -46,7 +46,7 @@ pub const Guid = extern struct {...@@ -46,7 +46,7 @@ pub const Guid = extern struct {
46};46};
4747
48/// An EFI Handle represents a collection of related interfaces.48/// An EFI Handle represents a collection of related interfaces.
49pub const Handle = *@OpaqueType();49pub const Handle = *@Type(.Opaque);
5050
51/// This structure represents time information.51/// This structure represents time information.
52pub const Time = extern struct {52pub const Time = extern struct {
...@@ -103,4 +103,4 @@ pub const TimeCapabilities = extern struct {...@@ -103,4 +103,4 @@ pub const TimeCapabilities = extern struct {
103};103};
104104
105/// File Handle as specified in the EFI Shell Spec105/// File Handle as specified in the EFI Shell Spec
106pub const FileHandle = *@OpaqueType();106pub const FileHandle = *@Type(.Opaque);
lib/std/os/uefi/protocols/hii.zig+1-1
...@@ -1,7 +1,7 @@...@@ -1,7 +1,7 @@
1const uefi = @import("std").os.uefi;1const uefi = @import("std").os.uefi;
2const Guid = uefi.Guid;2const Guid = uefi.Guid;
33
4pub const HIIHandle = *@OpaqueType();4pub const HIIHandle = *@Type(.Opaque);
55
6/// The header found at the start of each package.6/// The header found at the start of each package.
7pub const HIIPackageHeader = packed struct {7pub const HIIPackageHeader = packed struct {
lib/std/os/windows/bits.zig+15-15
...@@ -27,16 +27,16 @@ pub const UCHAR = u8;...@@ -27,16 +27,16 @@ pub const UCHAR = u8;
27pub const FLOAT = f32;27pub const FLOAT = f32;
28pub const HANDLE = *c_void;28pub const HANDLE = *c_void;
29pub const HCRYPTPROV = ULONG_PTR;29pub const HCRYPTPROV = ULONG_PTR;
30pub const HBRUSH = *@OpaqueType();30pub const HBRUSH = *@Type(.Opaque);
31pub const HCURSOR = *@OpaqueType();31pub const HCURSOR = *@Type(.Opaque);
32pub const HICON = *@OpaqueType();32pub const HICON = *@Type(.Opaque);
33pub const HINSTANCE = *@OpaqueType();33pub const HINSTANCE = *@Type(.Opaque);
34pub const HMENU = *@OpaqueType();34pub const HMENU = *@Type(.Opaque);
35pub const HMODULE = *@OpaqueType();35pub const HMODULE = *@Type(.Opaque);
36pub const HWND = *@OpaqueType();36pub const HWND = *@Type(.Opaque);
37pub const HDC = *@OpaqueType();37pub const HDC = *@Type(.Opaque);
38pub const HGLRC = *@OpaqueType();38pub const HGLRC = *@Type(.Opaque);
39pub const FARPROC = *@OpaqueType();39pub const FARPROC = *@Type(.Opaque);
40pub const INT = c_int;40pub const INT = c_int;
41pub const LPBYTE = *BYTE;41pub const LPBYTE = *BYTE;
42pub const LPCH = *CHAR;42pub const LPCH = *CHAR;
...@@ -76,7 +76,7 @@ pub const WPARAM = usize;...@@ -76,7 +76,7 @@ pub const WPARAM = usize;
76pub const LPARAM = ?*c_void;76pub const LPARAM = ?*c_void;
77pub const LRESULT = ?*c_void;77pub const LRESULT = ?*c_void;
7878
79pub const va_list = *@OpaqueType();79pub const va_list = *@Type(.Opaque);
8080
81pub const TRUE = 1;81pub const TRUE = 1;
82pub const FALSE = 0;82pub const FALSE = 0;
...@@ -1169,10 +1169,10 @@ pub const UNICODE_STRING = extern struct {...@@ -1169,10 +1169,10 @@ pub const UNICODE_STRING = extern struct {
1169 Buffer: [*]WCHAR,1169 Buffer: [*]WCHAR,
1170};1170};
11711171
1172const ACTIVATION_CONTEXT_DATA = @OpaqueType();1172const ACTIVATION_CONTEXT_DATA = @Type(.Opaque);
1173const ASSEMBLY_STORAGE_MAP = @OpaqueType();1173const ASSEMBLY_STORAGE_MAP = @Type(.Opaque);
1174const FLS_CALLBACK_INFO = @OpaqueType();1174const FLS_CALLBACK_INFO = @Type(.Opaque);
1175const RTL_BITMAP = @OpaqueType();1175const RTL_BITMAP = @Type(.Opaque);
1176pub const PRTL_BITMAP = *RTL_BITMAP;1176pub const PRTL_BITMAP = *RTL_BITMAP;
1177const KAFFINITY = usize;1177const KAFFINITY = usize;
11781178
lib/std/os/windows/ws2_32.zig+1-1
...@@ -1,6 +1,6 @@...@@ -1,6 +1,6 @@
1usingnamespace @import("bits.zig");1usingnamespace @import("bits.zig");
22
3pub const SOCKET = *@OpaqueType();3pub const SOCKET = *@Type(.Opaque);
4pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0));4pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0));
5pub const SOCKET_ERROR = -1;5pub const SOCKET_ERROR = -1;
66
src-self-hosted/clang.zig+84-84
...@@ -1,89 +1,89 @@...@@ -1,89 +1,89 @@
1const builtin = @import("builtin");1const builtin = @import("builtin");
22
3pub const struct_ZigClangConditionalOperator = @OpaqueType();3pub const struct_ZigClangConditionalOperator = @Type(.Opaque);
4pub const struct_ZigClangBinaryConditionalOperator = @OpaqueType();4pub const struct_ZigClangBinaryConditionalOperator = @Type(.Opaque);
5pub const struct_ZigClangAbstractConditionalOperator = @OpaqueType();5pub const struct_ZigClangAbstractConditionalOperator = @Type(.Opaque);
6pub const struct_ZigClangAPInt = @OpaqueType();6pub const struct_ZigClangAPInt = @Type(.Opaque);
7pub const struct_ZigClangAPSInt = @OpaqueType();7pub const struct_ZigClangAPSInt = @Type(.Opaque);
8pub const struct_ZigClangAPFloat = @OpaqueType();8pub const struct_ZigClangAPFloat = @Type(.Opaque);
9pub const struct_ZigClangASTContext = @OpaqueType();9pub const struct_ZigClangASTContext = @Type(.Opaque);
10pub const struct_ZigClangASTUnit = @OpaqueType();10pub const struct_ZigClangASTUnit = @Type(.Opaque);
11pub const struct_ZigClangArraySubscriptExpr = @OpaqueType();11pub const struct_ZigClangArraySubscriptExpr = @Type(.Opaque);
12pub const struct_ZigClangArrayType = @OpaqueType();12pub const struct_ZigClangArrayType = @Type(.Opaque);
13pub const struct_ZigClangAttributedType = @OpaqueType();13pub const struct_ZigClangAttributedType = @Type(.Opaque);
14pub const struct_ZigClangBinaryOperator = @OpaqueType();14pub const struct_ZigClangBinaryOperator = @Type(.Opaque);
15pub const struct_ZigClangBreakStmt = @OpaqueType();15pub const struct_ZigClangBreakStmt = @Type(.Opaque);
16pub const struct_ZigClangBuiltinType = @OpaqueType();16pub const struct_ZigClangBuiltinType = @Type(.Opaque);
17pub const struct_ZigClangCStyleCastExpr = @OpaqueType();17pub const struct_ZigClangCStyleCastExpr = @Type(.Opaque);
18pub const struct_ZigClangCallExpr = @OpaqueType();18pub const struct_ZigClangCallExpr = @Type(.Opaque);
19pub const struct_ZigClangCaseStmt = @OpaqueType();19pub const struct_ZigClangCaseStmt = @Type(.Opaque);
20pub const struct_ZigClangCompoundAssignOperator = @OpaqueType();20pub const struct_ZigClangCompoundAssignOperator = @Type(.Opaque);
21pub const struct_ZigClangCompoundStmt = @OpaqueType();21pub const struct_ZigClangCompoundStmt = @Type(.Opaque);
22pub const struct_ZigClangConstantArrayType = @OpaqueType();22pub const struct_ZigClangConstantArrayType = @Type(.Opaque);
23pub const struct_ZigClangContinueStmt = @OpaqueType();23pub const struct_ZigClangContinueStmt = @Type(.Opaque);
24pub const struct_ZigClangDecayedType = @OpaqueType();24pub const struct_ZigClangDecayedType = @Type(.Opaque);
25pub const struct_ZigClangDecl = @OpaqueType();25pub const struct_ZigClangDecl = @Type(.Opaque);
26pub const struct_ZigClangDeclRefExpr = @OpaqueType();26pub const struct_ZigClangDeclRefExpr = @Type(.Opaque);
27pub const struct_ZigClangDeclStmt = @OpaqueType();27pub const struct_ZigClangDeclStmt = @Type(.Opaque);
28pub const struct_ZigClangDefaultStmt = @OpaqueType();28pub const struct_ZigClangDefaultStmt = @Type(.Opaque);
29pub const struct_ZigClangDiagnosticOptions = @OpaqueType();29pub const struct_ZigClangDiagnosticOptions = @Type(.Opaque);
30pub const struct_ZigClangDiagnosticsEngine = @OpaqueType();30pub const struct_ZigClangDiagnosticsEngine = @Type(.Opaque);
31pub const struct_ZigClangDoStmt = @OpaqueType();31pub const struct_ZigClangDoStmt = @Type(.Opaque);
32pub const struct_ZigClangElaboratedType = @OpaqueType();32pub const struct_ZigClangElaboratedType = @Type(.Opaque);
33pub const struct_ZigClangEnumConstantDecl = @OpaqueType();33pub const struct_ZigClangEnumConstantDecl = @Type(.Opaque);
34pub const struct_ZigClangEnumDecl = @OpaqueType();34pub const struct_ZigClangEnumDecl = @Type(.Opaque);
35pub const struct_ZigClangEnumType = @OpaqueType();35pub const struct_ZigClangEnumType = @Type(.Opaque);
36pub const struct_ZigClangExpr = @OpaqueType();36pub const struct_ZigClangExpr = @Type(.Opaque);
37pub const struct_ZigClangFieldDecl = @OpaqueType();37pub const struct_ZigClangFieldDecl = @Type(.Opaque);
38pub const struct_ZigClangFileID = @OpaqueType();38pub const struct_ZigClangFileID = @Type(.Opaque);
39pub const struct_ZigClangForStmt = @OpaqueType();39pub const struct_ZigClangForStmt = @Type(.Opaque);
40pub const struct_ZigClangFullSourceLoc = @OpaqueType();40pub const struct_ZigClangFullSourceLoc = @Type(.Opaque);
41pub const struct_ZigClangFunctionDecl = @OpaqueType();41pub const struct_ZigClangFunctionDecl = @Type(.Opaque);
42pub const struct_ZigClangFunctionProtoType = @OpaqueType();42pub const struct_ZigClangFunctionProtoType = @Type(.Opaque);
43pub const struct_ZigClangIfStmt = @OpaqueType();43pub const struct_ZigClangIfStmt = @Type(.Opaque);
44pub const struct_ZigClangImplicitCastExpr = @OpaqueType();44pub const struct_ZigClangImplicitCastExpr = @Type(.Opaque);
45pub const struct_ZigClangIncompleteArrayType = @OpaqueType();45pub const struct_ZigClangIncompleteArrayType = @Type(.Opaque);
46pub const struct_ZigClangIntegerLiteral = @OpaqueType();46pub const struct_ZigClangIntegerLiteral = @Type(.Opaque);
47pub const struct_ZigClangMacroDefinitionRecord = @OpaqueType();47pub const struct_ZigClangMacroDefinitionRecord = @Type(.Opaque);
48pub const struct_ZigClangMacroExpansion = @OpaqueType();48pub const struct_ZigClangMacroExpansion = @Type(.Opaque);
49pub const struct_ZigClangMacroQualifiedType = @OpaqueType();49pub const struct_ZigClangMacroQualifiedType = @Type(.Opaque);
50pub const struct_ZigClangMemberExpr = @OpaqueType();50pub const struct_ZigClangMemberExpr = @Type(.Opaque);
51pub const struct_ZigClangNamedDecl = @OpaqueType();51pub const struct_ZigClangNamedDecl = @Type(.Opaque);
52pub const struct_ZigClangNone = @OpaqueType();52pub const struct_ZigClangNone = @Type(.Opaque);
53pub const struct_ZigClangOpaqueValueExpr = @OpaqueType();53pub const struct_ZigClangOpaqueValueExpr = @Type(.Opaque);
54pub const struct_ZigClangPCHContainerOperations = @OpaqueType();54pub const struct_ZigClangPCHContainerOperations = @Type(.Opaque);
55pub const struct_ZigClangParenExpr = @OpaqueType();55pub const struct_ZigClangParenExpr = @Type(.Opaque);
56pub const struct_ZigClangParenType = @OpaqueType();56pub const struct_ZigClangParenType = @Type(.Opaque);
57pub const struct_ZigClangParmVarDecl = @OpaqueType();57pub const struct_ZigClangParmVarDecl = @Type(.Opaque);
58pub const struct_ZigClangPointerType = @OpaqueType();58pub const struct_ZigClangPointerType = @Type(.Opaque);
59pub const struct_ZigClangPreprocessedEntity = @OpaqueType();59pub const struct_ZigClangPreprocessedEntity = @Type(.Opaque);
60pub const struct_ZigClangRecordDecl = @OpaqueType();60pub const struct_ZigClangRecordDecl = @Type(.Opaque);
61pub const struct_ZigClangRecordType = @OpaqueType();61pub const struct_ZigClangRecordType = @Type(.Opaque);
62pub const struct_ZigClangReturnStmt = @OpaqueType();62pub const struct_ZigClangReturnStmt = @Type(.Opaque);
63pub const struct_ZigClangSkipFunctionBodiesScope = @OpaqueType();63pub const struct_ZigClangSkipFunctionBodiesScope = @Type(.Opaque);
64pub const struct_ZigClangSourceManager = @OpaqueType();64pub const struct_ZigClangSourceManager = @Type(.Opaque);
65pub const struct_ZigClangSourceRange = @OpaqueType();65pub const struct_ZigClangSourceRange = @Type(.Opaque);
66pub const struct_ZigClangStmt = @OpaqueType();66pub const struct_ZigClangStmt = @Type(.Opaque);
67pub const struct_ZigClangStringLiteral = @OpaqueType();67pub const struct_ZigClangStringLiteral = @Type(.Opaque);
68pub const struct_ZigClangStringRef = @OpaqueType();68pub const struct_ZigClangStringRef = @Type(.Opaque);
69pub const struct_ZigClangSwitchStmt = @OpaqueType();69pub const struct_ZigClangSwitchStmt = @Type(.Opaque);
70pub const struct_ZigClangTagDecl = @OpaqueType();70pub const struct_ZigClangTagDecl = @Type(.Opaque);
71pub const struct_ZigClangType = @OpaqueType();71pub const struct_ZigClangType = @Type(.Opaque);
72pub const struct_ZigClangTypedefNameDecl = @OpaqueType();72pub const struct_ZigClangTypedefNameDecl = @Type(.Opaque);
73pub const struct_ZigClangTypedefType = @OpaqueType();73pub const struct_ZigClangTypedefType = @Type(.Opaque);
74pub const struct_ZigClangUnaryExprOrTypeTraitExpr = @OpaqueType();74pub const struct_ZigClangUnaryExprOrTypeTraitExpr = @Type(.Opaque);
75pub const struct_ZigClangUnaryOperator = @OpaqueType();75pub const struct_ZigClangUnaryOperator = @Type(.Opaque);
76pub const struct_ZigClangValueDecl = @OpaqueType();76pub const struct_ZigClangValueDecl = @Type(.Opaque);
77pub const struct_ZigClangVarDecl = @OpaqueType();77pub const struct_ZigClangVarDecl = @Type(.Opaque);
78pub const struct_ZigClangWhileStmt = @OpaqueType();78pub const struct_ZigClangWhileStmt = @Type(.Opaque);
79pub const struct_ZigClangFunctionType = @OpaqueType();79pub const struct_ZigClangFunctionType = @Type(.Opaque);
80pub const struct_ZigClangPredefinedExpr = @OpaqueType();80pub const struct_ZigClangPredefinedExpr = @Type(.Opaque);
81pub const struct_ZigClangInitListExpr = @OpaqueType();81pub const struct_ZigClangInitListExpr = @Type(.Opaque);
82pub const ZigClangPreprocessingRecord = @OpaqueType();82pub const ZigClangPreprocessingRecord = @Type(.Opaque);
83pub const ZigClangFloatingLiteral = @OpaqueType();83pub const ZigClangFloatingLiteral = @Type(.Opaque);
84pub const ZigClangConstantExpr = @OpaqueType();84pub const ZigClangConstantExpr = @Type(.Opaque);
85pub const ZigClangCharacterLiteral = @OpaqueType();85pub const ZigClangCharacterLiteral = @Type(.Opaque);
86pub const ZigClangStmtExpr = @OpaqueType();86pub const ZigClangStmtExpr = @Type(.Opaque);
8787
88pub const ZigClangBO = extern enum {88pub const ZigClangBO = extern enum {
89 PtrMemD,89 PtrMemD,
src-self-hosted/translate_c.zig+2-1
...@@ -4025,7 +4025,8 @@ fn transCreateNodeFloat(c: *Context, int: var) !*ast.Node {...@@ -4025,7 +4025,8 @@ fn transCreateNodeFloat(c: *Context, int: var) !*ast.Node {
4025}4025}
40264026
4027fn transCreateNodeOpaqueType(c: *Context) !*ast.Node {4027fn transCreateNodeOpaqueType(c: *Context) !*ast.Node {
4028 const call_node = try transCreateNodeBuiltinFnCall(c, "@OpaqueType");4028 const call_node = try transCreateNodeBuiltinFnCall(c, "@Type");
4029 try call_node.params.push(try transCreateNodeEnumLiteral(c, "Opaque"));
4029 call_node.rparen_token = try appendToken(c, .RParen, ")");4030 call_node.rparen_token = try appendToken(c, .RParen, ")");
4030 return &call_node.base;4031 return &call_node.base;
4031}4032}
test/compile_errors.zig+9-9
...@@ -1992,7 +1992,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1992,7 +1992,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1992 });1992 });
19931993
1994 cases.add("directly embedding opaque type in struct and union",1994 cases.add("directly embedding opaque type in struct and union",
1995 \\const O = @OpaqueType();1995 \\const O = @Type(.Opaque);
1996 \\const Foo = struct {1996 \\const Foo = struct {
1997 \\ o: O,1997 \\ o: O,
1998 \\};1998 \\};
...@@ -2007,7 +2007,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2007,7 +2007,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2007 \\ var bar: Bar = undefined;2007 \\ var bar: Bar = undefined;
2008 \\}2008 \\}
2009 \\export fn c() void {2009 \\export fn c() void {
2010 \\ var baz: *@OpaqueType() = undefined;2010 \\ var baz: *@Type(.Opaque) = undefined;
2011 \\ const qux = .{baz.*};2011 \\ const qux = .{baz.*};
2012 \\}2012 \\}
2013 , &[_][]const u8{2013 , &[_][]const u8{
...@@ -2971,7 +2971,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2971,7 +2971,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2971 });2971 });
29722972
2973 cases.add("unknown length pointer to opaque",2973 cases.add("unknown length pointer to opaque",
2974 \\export const T = [*]@OpaqueType();2974 \\export const T = [*]@Type(.Opaque);
2975 , &[_][]const u8{2975 , &[_][]const u8{
2976 "tmp.zig:1:21: error: unknown-length pointer to opaque",2976 "tmp.zig:1:21: error: unknown-length pointer to opaque",
2977 });2977 });
...@@ -6127,8 +6127,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -6127,8 +6127,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
6127 "tmp.zig:2:31: error: index 2 outside array of size 2",6127 "tmp.zig:2:31: error: index 2 outside array of size 2",
6128 });6128 });
61296129
6130 cases.add("wrong pointer coerced to pointer to @OpaqueType()",6130 cases.add("wrong pointer coerced to pointer to @Type(.Opaque)",
6131 \\const Derp = @OpaqueType();6131 \\const Derp = @Type(.Opaque);
6132 \\extern fn bar(d: *Derp) void;6132 \\extern fn bar(d: *Derp) void;
6133 \\export fn foo() void {6133 \\export fn foo() void {
6134 \\ var x = @as(u8, 1);6134 \\ var x = @as(u8, 1);
...@@ -6166,7 +6166,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -6166,7 +6166,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
6166 \\export fn entry9() void {6166 \\export fn entry9() void {
6167 \\ var z: noreturn = return;6167 \\ var z: noreturn = return;
6168 \\}6168 \\}
6169 \\const Opaque = @OpaqueType();6169 \\const Opaque = @Type(.Opaque);
6170 \\const Foo = struct {6170 \\const Foo = struct {
6171 \\ fn bar(self: *const Foo) void {}6171 \\ fn bar(self: *const Foo) void {}
6172 \\};6172 \\};
...@@ -6320,7 +6320,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -6320,7 +6320,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
6320 });6320 });
63216321
6322 cases.add("field access of opaque type",6322 cases.add("field access of opaque type",
6323 \\const MyType = @OpaqueType();6323 \\const MyType = @Type(.Opaque);
6324 \\6324 \\
6325 \\export fn entry() bool {6325 \\export fn entry() bool {
6326 \\ var x: i32 = 1;6326 \\ var x: i32 = 1;
...@@ -6936,7 +6936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -6936,7 +6936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
6936 });6936 });
69376937
6938 cases.add("function returning opaque type",6938 cases.add("function returning opaque type",
6939 \\const FooType = @OpaqueType();6939 \\const FooType = @Type(.Opaque);
6940 \\export fn bar() !FooType {6940 \\export fn bar() !FooType {
6941 \\ return error.InvalidValue;6941 \\ return error.InvalidValue;
6942 \\}6942 \\}
...@@ -6954,7 +6954,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -6954,7 +6954,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
6954 });6954 });
69556955
6956 cases.add("generic function returning opaque type",6956 cases.add("generic function returning opaque type",
6957 \\const FooType = @OpaqueType();6957 \\const FooType = @Type(.Opaque);
6958 \\fn generic(comptime T: type) !T {6958 \\fn generic(comptime T: type) !T {
6959 \\ return undefined;6959 \\ return undefined;
6960 \\}6960 \\}
test/gen_h.zig+1-1
...@@ -74,7 +74,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -74,7 +74,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
74 });74 });
7575
76 cases.add("declare opaque type",76 cases.add("declare opaque type",
77 \\const Foo = @OpaqueType();77 \\const Foo = @Type(.Opaque);
78 \\78 \\
79 \\export fn entry(foo: ?*Foo) void { }79 \\export fn entry(foo: ?*Foo) void { }
80 , &[_][]const u8{80 , &[_][]const u8{
test/stage1/behavior/misc.zig+3-3
...@@ -444,9 +444,9 @@ export fn writeToVRam() void {...@@ -444,9 +444,9 @@ export fn writeToVRam() void {
444 vram[0] = 'X';444 vram[0] = 'X';
445}445}
446446
447const OpaqueA = @OpaqueType();447const OpaqueA = @Type(.Opaque);
448const OpaqueB = @OpaqueType();448const OpaqueB = @Type(.Opaque);
449test "@OpaqueType" {449test "opaque types" {
450 expect(*OpaqueA != *OpaqueB);450 expect(*OpaqueA != *OpaqueB);
451 expect(mem.eql(u8, @typeName(OpaqueA), "OpaqueA"));451 expect(mem.eql(u8, @typeName(OpaqueA), "OpaqueA"));
452 expect(mem.eql(u8, @typeName(OpaqueB), "OpaqueB"));452 expect(mem.eql(u8, @typeName(OpaqueB), "OpaqueB"));
test/translate_c.zig+7-7
...@@ -36,9 +36,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -36,9 +36,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
36 \\struct foo { int x; int y[]; };36 \\struct foo { int x; int y[]; };
37 \\struct bar { int x; int y[0]; };37 \\struct bar { int x; int y[0]; };
38 , &[_][]const u8{38 , &[_][]const u8{
39 \\pub const struct_foo = @OpaqueType();39 \\pub const struct_foo = @Type(.Opaque);
40 ,40 ,
41 \\pub const struct_bar = @OpaqueType();41 \\pub const struct_bar = @Type(.Opaque);
42 });42 });
4343
44 cases.add("nested loops without blocks",44 cases.add("nested loops without blocks",
...@@ -106,7 +106,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -106,7 +106,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
106 \\pub const struct_arcan_shmif_page = //106 \\pub const struct_arcan_shmif_page = //
107 ,107 ,
108 \\warning: unsupported type: 'Atomic'108 \\warning: unsupported type: 'Atomic'
109 \\ @OpaqueType(); // 109 \\ @Type(.Opaque); //
110 ,110 ,
111 \\ warning: struct demoted to opaque type - unable to translate type of field abufused111 \\ warning: struct demoted to opaque type - unable to translate type of field abufused
112 , // TODO should be `addr: *struct_arcan_shmif_page`112 , // TODO should be `addr: *struct_arcan_shmif_page`
...@@ -285,8 +285,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -285,8 +285,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
285 \\ struct opaque_2 *cast = (struct opaque_2 *)opaque;285 \\ struct opaque_2 *cast = (struct opaque_2 *)opaque;
286 \\}286 \\}
287 , &[_][]const u8{287 , &[_][]const u8{
288 \\pub const struct_opaque = @OpaqueType();288 \\pub const struct_opaque = @Type(.Opaque);
289 \\pub const struct_opaque_2 = @OpaqueType();289 \\pub const struct_opaque_2 = @Type(.Opaque);
290 \\pub export fn function(arg_opaque_1: ?*struct_opaque) void {290 \\pub export fn function(arg_opaque_1: ?*struct_opaque) void {
291 \\ var opaque_1 = arg_opaque_1;291 \\ var opaque_1 = arg_opaque_1;
292 \\ var cast: ?*struct_opaque_2 = @ptrCast(?*struct_opaque_2, opaque_1);292 \\ var cast: ?*struct_opaque_2 = @ptrCast(?*struct_opaque_2, opaque_1);
...@@ -524,7 +524,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -524,7 +524,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
524 \\ struct Foo *foo;524 \\ struct Foo *foo;
525 \\};525 \\};
526 , &[_][]const u8{526 , &[_][]const u8{
527 \\pub const struct_Foo = @OpaqueType();527 \\pub const struct_Foo = @Type(.Opaque);
528 ,528 ,
529 \\pub const struct_Bar = extern struct {529 \\pub const struct_Bar = extern struct {
530 \\ foo: ?*struct_Foo,530 \\ foo: ?*struct_Foo,
...@@ -601,7 +601,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -601,7 +601,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
601 \\struct Foo;601 \\struct Foo;
602 \\struct Foo *some_func(struct Foo *foo, int x);602 \\struct Foo *some_func(struct Foo *foo, int x);
603 , &[_][]const u8{603 , &[_][]const u8{
604 \\pub const struct_Foo = @OpaqueType();604 \\pub const struct_Foo = @Type(.Opaque);
605 ,605 ,
606 \\pub extern fn some_func(foo: ?*struct_Foo, x: c_int) ?*struct_Foo;606 \\pub extern fn some_func(foo: ?*struct_Foo, x: c_int) ?*struct_Foo;
607 ,607 ,