authorgravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2022-08-06 19:32:42+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-08-06 19:32:42+02:00
log3debd6b732556832e58491cb153e1fee2cc8876b
tree6ae912f0b6163d0efa7f081bb66fe9556d41ddd8
parent943f4eb515ec03499cf7b37d80b964e15502bfc8
parent94662591d617226caabcb6c7319d703f1e41a880
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge branch 'master' into nicedocs


7 files changed, 133 insertions(+), 32 deletions(-)

ci/srht/update_download_page+10-7
...@@ -100,6 +100,15 @@ cd "$SRCTARBALLDIR/ci/srht"...@@ -100,6 +100,15 @@ cd "$SRCTARBALLDIR/ci/srht"
100CIDIR="$(pwd)"100CIDIR="$(pwd)"
101101
102cd "$HOME"102cd "$HOME"
103
104# Upload new stdlib autodocs
105mkdir -p docs_to_upload/documentation/master/std/
106cp "$ZIGDIR/docs/std/index.html" docs_to_upload/documentation/master/std/index.html
107cp "$ZIGDIR/docs/std/data.js" docs_to_upload/documentation/master/std/data.js
108cp "$ZIGDIR/docs/std/main.js" docs_to_upload/documentation/master/std/main.js
109cp "$LANGREF" docs_to_upload/documentation/master/index.html
110$S3CMD put -P --no-mime-magic --recursive --add-header="Cache-Control: max-age=0, must-revalidate" "docs_to_upload/" s3://ziglang.org/
111
103git clone --depth 1 git@github.com:ziglang/www.ziglang.org.git112git clone --depth 1 git@github.com:ziglang/www.ziglang.org.git
104cd www.ziglang.org113cd www.ziglang.org
105WWWDIR="$(pwd)"114WWWDIR="$(pwd)"
...@@ -108,12 +117,6 @@ $S3CMD put -P --no-mime-magic --add-header="cache-control: public, max-age=31536...@@ -108,12 +117,6 @@ $S3CMD put -P --no-mime-magic --add-header="cache-control: public, max-age=31536
108117
109cd "$WWWDIR"118cd "$WWWDIR"
110cp "$CIDIR/out/index.json" data/releases.json119cp "$CIDIR/out/index.json" data/releases.json
111mkdir -p content/documentation/master/std
112cp "$LANGREF" content/documentation/master/index.html
113cp "$ZIGDIR/docs/std/index.html" content/documentation/master/std/index.html
114cp "$ZIGDIR/docs/std/data.js" content/documentation/master/std/data.js
115cp "$ZIGDIR/docs/std/main.js" content/documentation/master/std/main.js
116git add data/releases.json120git add data/releases.json
117git add content/121git commit -m "CI: update releases"
118git commit -m "CI: update releases and docs"
119git push origin master122git push origin master
lib/docs/index.html+1
...@@ -650,6 +650,7 @@...@@ -650,6 +650,7 @@
650 <div id="sectSearchResults" class="hidden">650 <div id="sectSearchResults" class="hidden">
651 <h2>Search Results</h2>651 <h2>Search Results</h2>
652 <ul id="listSearchResults"></ul>652 <ul id="listSearchResults"></ul>
653 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
653 </div>654 </div>
654 <div id="sectSearchNoResults" class="hidden">655 <div id="sectSearchNoResults" class="hidden">
655 <h2>No Results Found</h2>656 <h2>No Results Found</h2>
lib/docs/main.js+38-19
...@@ -40,6 +40,7 @@ var zigAnalysis;...@@ -40,6 +40,7 @@ var zigAnalysis;
40 const domDeclNoRef = document.getElementById("declNoRef");40 const domDeclNoRef = document.getElementById("declNoRef");
41 const domSearch = document.getElementById("search");41 const domSearch = document.getElementById("search");
42 const domSectSearchResults = document.getElementById("sectSearchResults");42 const domSectSearchResults = document.getElementById("sectSearchResults");
43 const domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
4344
44 const domListSearchResults = document.getElementById("listSearchResults");45 const domListSearchResults = document.getElementById("listSearchResults");
45 const domSectSearchNoResults = document.getElementById("sectSearchNoResults");46 const domSectSearchNoResults = document.getElementById("sectSearchNoResults");
...@@ -51,9 +52,8 @@ var zigAnalysis;...@@ -51,9 +52,8 @@ var zigAnalysis;
51 const domHelpModal = document.getElementById("helpModal");52 const domHelpModal = document.getElementById("helpModal");
52 const domSearchPlaceholder = document.getElementById("searchPlaceholder");53 const domSearchPlaceholder = document.getElementById("searchPlaceholder");
5354
54 domSearch.disabled = false;
55
56 let searchTimer = null;55 let searchTimer = null;
56 let searchTrimResults = true;
5757
58 let escapeHtmlReplacements = {58 let escapeHtmlReplacements = {
59 "&": "&amp;",59 "&": "&amp;",
...@@ -105,6 +105,7 @@ var zigAnalysis;...@@ -105,6 +105,7 @@ var zigAnalysis;
105 // map of decl index to list of comptime fn calls105 // map of decl index to list of comptime fn calls
106 // let nodesToCallsMap = indexNodesToCalls();106 // let nodesToCallsMap = indexNodesToCalls();
107107
108 domSearch.disabled = false;
108 domSearch.addEventListener("keydown", onSearchKeyDown, false);109 domSearch.addEventListener("keydown", onSearchKeyDown, false);
109 domSearch.addEventListener("focus", ev => {110 domSearch.addEventListener("focus", ev => {
110 domSearchPlaceholder.classList.add("hidden");111 domSearchPlaceholder.classList.add("hidden");
...@@ -113,6 +114,14 @@ var zigAnalysis;...@@ -113,6 +114,14 @@ var zigAnalysis;
113 if (domSearch.value.length == 0)114 if (domSearch.value.length == 0)
114 domSearchPlaceholder.classList.remove("hidden");115 domSearchPlaceholder.classList.remove("hidden");
115 });116 });
117 domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false);
118 function onClickSearchShowAllResults(ev) {
119 ev.preventDefault();
120 ev.stopPropagation();
121 searchTrimResults = false;
122 onHashChange();
123 }
124
116 domPrivDeclsBox.addEventListener(125 domPrivDeclsBox.addEventListener(
117 "change",126 "change",
118 function () {127 function () {
...@@ -371,6 +380,7 @@ var zigAnalysis;...@@ -371,6 +380,7 @@ var zigAnalysis;
371 domSectFns.classList.add("hidden");380 domSectFns.classList.add("hidden");
372 domSectFields.classList.add("hidden");381 domSectFields.classList.add("hidden");
373 domSectSearchResults.classList.add("hidden");382 domSectSearchResults.classList.add("hidden");
383 domSectSearchAllResultsLink.classList.add("hidden");
374 domSectSearchNoResults.classList.add("hidden");384 domSectSearchNoResults.classList.add("hidden");
375 domSectInfo.classList.add("hidden");385 domSectInfo.classList.add("hidden");
376 domHdrName.classList.add("hidden");386 domHdrName.classList.add("hidden");
...@@ -3273,14 +3283,14 @@ var zigAnalysis;...@@ -3273,14 +3283,14 @@ var zigAnalysis;
3273 let oldHash = location.hash;3283 let oldHash = location.hash;
3274 let parts = oldHash.split("?");3284 let parts = oldHash.split("?");
3275 let newPart2 = domSearch.value === "" ? "" : "?" + domSearch.value;3285 let newPart2 = domSearch.value === "" ? "" : "?" + domSearch.value;
3276 location.hash =3286 location.replace(parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2);
3277 parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2;
3278 }3287 }
3279 function getSearchTerms() {3288 function getSearchTerms() {
3280 let list = curNavSearch.trim().split(/[ \r\n\t]+/);3289 let list = curNavSearch.trim().split(/[ \r\n\t]+/);
3281 list.sort();3290 list.sort();
3282 return list;3291 return list;
3283 }3292 }
3293
3284 function renderSearch() {3294 function renderSearch() {
3285 let matchedItems = [];3295 let matchedItems = [];
3286 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;3296 let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
...@@ -3346,28 +3356,37 @@ var zigAnalysis;...@@ -3346,28 +3356,37 @@ var zigAnalysis;
3346 }3356 }
33473357
3348 if (matchedItems.length !== 0) {3358 if (matchedItems.length !== 0) {
3349 resizeDomList(
3350 domListSearchResults,
3351 matchedItems.length,
3352 '<li><a href="#"></a></li>'
3353 );
3354
3355 matchedItems.sort(function (a, b) {3359 matchedItems.sort(function (a, b) {
3356 let cmp = operatorCompare(b.points, a.points);3360 let cmp = operatorCompare(b.points, a.points);
3357 if (cmp != 0) return cmp;3361 if (cmp != 0) return cmp;
3358 return operatorCompare(a.decl.name, b.decl.name);3362 return operatorCompare(a.decl.name, b.decl.name);
3359 });3363 });
33603364
3365
3366 var searchTrimmed = false
3367 var searchTrimResultsMaxItems = 200
3368 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
3369 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems)
3370 searchTrimmed = true
3371 }
3372
3373 // Build up the list of search results
3374 let matchedItemsHTML = "";
3375
3361 for (let i = 0; i < matchedItems.length; i += 1) {3376 for (let i = 0; i < matchedItems.length; i += 1) {
3362 let liDom = domListSearchResults.children[i];3377 const match = matchedItems[i];
3363 let aDom = liDom.children[0];3378 const lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];
3364 let match = matchedItems[i];3379
3365 let lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];3380 const text = lastPkgName + "." + match.path.declNames.join(".");
3366 aDom.textContent = lastPkgName + "." + match.path.declNames.join(".");3381 const href = navLink(match.path.pkgNames, match.path.declNames);
3367 aDom.setAttribute(3382
3368 "href",3383 matchedItemsHTML += "<li><a href=\""+ href +"\">"+ text + "</a></li>";
3369 navLink(match.path.pkgNames, match.path.declNames)3384 }
3370 );3385
3386 // Replace the search results using our newly constructed HTML string
3387 domListSearchResults.innerHTML = matchedItemsHTML;
3388 if (searchTrimmed) {
3389 domSectSearchAllResultsLink.classList.remove("hidden");
3371 }3390 }
3372 renderSearchCursor();3391 renderSearchCursor();
33733392
src/Sema.zig+30-6
...@@ -19764,6 +19764,8 @@ fn validateRunTimeType(...@@ -19764,6 +19764,8 @@ fn validateRunTimeType(
19764 };19764 };
19765}19765}
1976619766
19767const TypeSet = std.HashMapUnmanaged(Type, void, Type.HashContext64, std.hash_map.default_max_load_percentage);
19768
19767fn explainWhyTypeIsComptime(19769fn explainWhyTypeIsComptime(
19768 sema: *Sema,19770 sema: *Sema,
19769 block: *Block,19771 block: *Block,
...@@ -19771,6 +19773,22 @@ fn explainWhyTypeIsComptime(...@@ -19771,6 +19773,22 @@ fn explainWhyTypeIsComptime(
19771 msg: *Module.ErrorMsg,19773 msg: *Module.ErrorMsg,
19772 src_loc: Module.SrcLoc,19774 src_loc: Module.SrcLoc,
19773 ty: Type,19775 ty: Type,
19776) CompileError!void {
19777 var type_set = TypeSet{};
19778 defer type_set.deinit(sema.gpa);
19779
19780 try sema.resolveTypeFully(block, src, ty);
19781 return sema.explainWhyTypeIsComptimeInner(block, src, msg, src_loc, ty, &type_set);
19782}
19783
19784fn explainWhyTypeIsComptimeInner(
19785 sema: *Sema,
19786 block: *Block,
19787 src: LazySrcLoc,
19788 msg: *Module.ErrorMsg,
19789 src_loc: Module.SrcLoc,
19790 ty: Type,
19791 type_set: *TypeSet,
19774) CompileError!void {19792) CompileError!void {
19775 const mod = sema.mod;19793 const mod = sema.mod;
19776 switch (ty.zigTypeTag()) {19794 switch (ty.zigTypeTag()) {
...@@ -19808,7 +19826,7 @@ fn explainWhyTypeIsComptime(...@@ -19808,7 +19826,7 @@ fn explainWhyTypeIsComptime(
19808 },19826 },
1980919827
19810 .Array, .Vector => {19828 .Array, .Vector => {
19811 try sema.explainWhyTypeIsComptime(block, src, msg, src_loc, ty.elemType());19829 try sema.explainWhyTypeIsComptimeInner(block, src, msg, src_loc, ty.elemType(), type_set);
19812 },19830 },
19813 .Pointer => {19831 .Pointer => {
19814 const elem_ty = ty.elemType2();19832 const elem_ty = ty.elemType2();
...@@ -19826,18 +19844,20 @@ fn explainWhyTypeIsComptime(...@@ -19826,18 +19844,20 @@ fn explainWhyTypeIsComptime(
19826 }19844 }
19827 return;19845 return;
19828 }19846 }
19829 try sema.explainWhyTypeIsComptime(block, src, msg, src_loc, ty.elemType());19847 try sema.explainWhyTypeIsComptimeInner(block, src, msg, src_loc, ty.elemType(), type_set);
19830 },19848 },
1983119849
19832 .Optional => {19850 .Optional => {
19833 var buf: Type.Payload.ElemType = undefined;19851 var buf: Type.Payload.ElemType = undefined;
19834 try sema.explainWhyTypeIsComptime(block, src, msg, src_loc, ty.optionalChild(&buf));19852 try sema.explainWhyTypeIsComptimeInner(block, src, msg, src_loc, ty.optionalChild(&buf), type_set);
19835 },19853 },
19836 .ErrorUnion => {19854 .ErrorUnion => {
19837 try sema.explainWhyTypeIsComptime(block, src, msg, src_loc, ty.errorUnionPayload());19855 try sema.explainWhyTypeIsComptimeInner(block, src, msg, src_loc, ty.errorUnionPayload(), type_set);
19838 },19856 },
1983919857
19840 .Struct => {19858 .Struct => {
19859 if ((try type_set.getOrPutContext(sema.gpa, ty, .{ .mod = mod })).found_existing) return;
19860
19841 if (ty.castTag(.@"struct")) |payload| {19861 if (ty.castTag(.@"struct")) |payload| {
19842 const struct_obj = payload.data;19862 const struct_obj = payload.data;
19843 for (struct_obj.fields.values()) |field, i| {19863 for (struct_obj.fields.values()) |field, i| {
...@@ -19845,9 +19865,10 @@ fn explainWhyTypeIsComptime(...@@ -19845,9 +19865,10 @@ fn explainWhyTypeIsComptime(
19845 .index = i,19865 .index = i,
19846 .range = .type,19866 .range = .type,
19847 });19867 });
19868
19848 if (try sema.typeRequiresComptime(block, src, field.ty)) {19869 if (try sema.typeRequiresComptime(block, src, field.ty)) {
19849 try mod.errNoteNonLazy(field_src_loc, msg, "struct requires comptime because of this field", .{});19870 try mod.errNoteNonLazy(field_src_loc, msg, "struct requires comptime because of this field", .{});
19850 try sema.explainWhyTypeIsComptime(block, src, msg, field_src_loc, field.ty);19871 try sema.explainWhyTypeIsComptimeInner(block, src, msg, field_src_loc, field.ty, type_set);
19851 }19872 }
19852 }19873 }
19853 }19874 }
...@@ -19855,6 +19876,8 @@ fn explainWhyTypeIsComptime(...@@ -19855,6 +19876,8 @@ fn explainWhyTypeIsComptime(
19855 },19876 },
1985619877
19857 .Union => {19878 .Union => {
19879 if ((try type_set.getOrPutContext(sema.gpa, ty, .{ .mod = mod })).found_existing) return;
19880
19858 if (ty.cast(Type.Payload.Union)) |payload| {19881 if (ty.cast(Type.Payload.Union)) |payload| {
19859 const union_obj = payload.data;19882 const union_obj = payload.data;
19860 for (union_obj.fields.values()) |field, i| {19883 for (union_obj.fields.values()) |field, i| {
...@@ -19862,9 +19885,10 @@ fn explainWhyTypeIsComptime(...@@ -19862,9 +19885,10 @@ fn explainWhyTypeIsComptime(
19862 .index = i,19885 .index = i,
19863 .range = .type,19886 .range = .type,
19864 });19887 });
19888
19865 if (try sema.typeRequiresComptime(block, src, field.ty)) {19889 if (try sema.typeRequiresComptime(block, src, field.ty)) {
19866 try mod.errNoteNonLazy(field_src_loc, msg, "union requires comptime because of this field", .{});19890 try mod.errNoteNonLazy(field_src_loc, msg, "union requires comptime because of this field", .{});
19867 try sema.explainWhyTypeIsComptime(block, src, msg, field_src_loc, field.ty);19891 try sema.explainWhyTypeIsComptimeInner(block, src, msg, field_src_loc, field.ty, type_set);
19868 }19892 }
19869 }19893 }
19870 }19894 }
test/cases/compile_errors/AstGen_comptime_known_struct_is_resolved_before_error.zig created+19
...@@ -0,0 +1,19 @@
1const S1 = struct {
2 a: S2,
3};
4const S2 = struct {
5 b: fn () void,
6};
7pub export fn entry() void {
8 var s: S1 = undefined;
9 _ = s;
10}
11
12// error
13// backend=stage2
14// target=native
15//
16// :8:12: error: variable of type 'tmp.S1' must be const or comptime
17// :2:8: note: struct requires comptime because of this field
18// :5:8: note: struct requires comptime because of this field
19// :5:8: note: use '*const fn() void' for a function pointer type
test/cases/compile_errors/self_referential_struct_requires_comptime.zig created+18
...@@ -0,0 +1,18 @@
1const S = struct {
2 a: fn () void,
3 b: *S,
4};
5pub export fn entry() void {
6 var s: S = undefined;
7 _ = s;
8}
9
10
11// error
12// backend=stage2
13// target=native
14//
15// :6:12: error: variable of type 'tmp.S' must be const or comptime
16// :2:8: note: struct requires comptime because of this field
17// :2:8: note: use '*const fn() void' for a function pointer type
18// :3:8: note: struct requires comptime because of this field
test/cases/compile_errors/self_referential_union_requires_comptime.zig created+17
...@@ -0,0 +1,17 @@
1const U = union {
2 a: fn () void,
3 b: *U,
4};
5pub export fn entry() void {
6 var u: U = undefined;
7 _ = u;
8}
9
10// error
11// backend=stage2
12// target=native
13//
14// :6:12: error: variable of type 'tmp.U' must be const or comptime
15// :2:8: note: union requires comptime because of this field
16// :2:8: note: use '*const fn() void' for a function pointer type
17// :3:8: note: union requires comptime because of this field