From 4f6eeaf1bc62bd879643cc58c95c8271d2138021 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 27 Feb 2017 00:36:29 +0100 Subject: [PATCH 01/78] documents the limitation of attributes on overridden functions --- spec/function.dd | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/spec/function.dd b/spec/function.dd index 3ac33849a6..b3cb214571 100644 --- a/spec/function.dd +++ b/spec/function.dd @@ -921,6 +921,31 @@ void main() } ------ + $(P It's not allowed to mark an overridden method with the attributes + $(LINK2 attribute.html#disable, $(D @disable)) or + $(LINK2 attribute.html#deprecated, $(D deprecated)). + To stop the compilation or to output the deprecation message, the compiler + must be able to determine the target of the call, which can't be guaranteed + when it is virtual. + ) + +------ +class B +{ + void foo() {} +} + +class D : B +{ + @disable override void foo() {} +} + +void main() +{ + B b = new D; + b.foo(); // would compiles and then the most derived would be called even if disabled. +} +------ $(H4 $(LNAME2 inline-functions, Inline Functions)) From ac6742f5a021236367f0904dfaf0f31368f8d2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Thu, 23 Mar 2017 21:40:27 +0100 Subject: [PATCH 02/78] Avoid auto-hyphenation of code in the dpldocs documentation. Fixes rejectedsoftware/ddox#126 --- css/ddox.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/css/ddox.css b/css/ddox.css index 0c0dab9b9b..4295bada76 100644 --- a/css/ddox.css +++ b/css/ddox.css @@ -14,6 +14,10 @@ h1 code a { border-bottom: 1px dashed #CCC; } +.hyphenate code { + hyphens: manual; +} + col.caption { min-width: 170pt; } From d8fc6e3c4a7734b5dfb0cbc77c603959ba93f0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Fri, 24 Mar 2017 10:40:04 +0100 Subject: [PATCH 03/78] Embed module links in /library/ overview in code tags. Avoids hyphenation and makes the appearance consistent with the rest of the documentation. --- dpl-docs/views/ddox.overview.dt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dpl-docs/views/ddox.overview.dt b/dpl-docs/views/ddox.overview.dt index 6e6be7a60d..07d650ff4a 100644 --- a/dpl-docs/views/ddox.overview.dt +++ b/dpl-docs/views/ddox.overview.dt @@ -15,7 +15,8 @@ block ddox.members - if (!m.qualifiedName.startsWith("std.c.") && !m.qualifiedName.startsWith("core.stdc.") && !m.qualifiedName.startsWith("core.sys.")) tr td - a(href="#{info.linkTo(m)}")= m.qualifiedName + a(href="#{info.linkTo(m)}") + code!= m.qualifiedName.replace(".", ".") td - if( m.docGroup ) |!= info.formatDoc(m.docGroup, 0, sec => sec == "$Short") @@ -25,7 +26,8 @@ block ddox.members - moduleInfoRecShort(p, prefix); - foreach( m; pack.modules ) - if (m.qualifiedName.startsWith(prefix)) - a(href="#{info.linkTo(m)}")= m.qualifiedName + a(href="#{info.linkTo(m)}") + code!= m.qualifiedName.replace(".", ".") table col.caption From 56ddea1410f09e59eb043e6f4267a74de9bd23fd Mon Sep 17 00:00:00 2001 From: Ross Harrison Date: Fri, 31 Mar 2017 16:37:09 -0400 Subject: [PATCH 04/78] Fix busted link with Internet archive --- spec/contracts.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/contracts.dd b/spec/contracts.dd index 9aec8b734b..a5ccc645cc 100644 --- a/spec/contracts.dd +++ b/spec/contracts.dd @@ -252,7 +252,7 @@ assert(&s); // check that struct S invariant holds $(H2 $(LNAME2 references, References)) $(LIST - $(LINK2 http://people.cs.uchicago.edu/~robby/contract-reading-list/, Contracts Reading List), + $(LINK2 https://web.archive.org/web/20080919174640/http://people.cs.uchicago.edu/~robby/contract-reading-list/, Contracts Reading List), $(LINK2 http://jan.newmarch.name/java/contracts/paper-long.html, Adding Contracts to Java) ) From ec744004a6ee847d7f958d2b88a3b5a5f5bd9af9 Mon Sep 17 00:00:00 2001 From: Andrei Alexandrescu Date: Mon, 3 Apr 2017 19:08:17 -0400 Subject: [PATCH 05/78] Add D foundation address (#1619) * Add address * Review @mdparker thx --- foundation.dd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/foundation.dd b/foundation.dd index 43222b0824..52aa4c6e01 100644 --- a/foundation.dd +++ b/foundation.dd @@ -63,7 +63,9 @@ $(H3 Official contacts) $(P The D Language Foundation has been incorporated with the state of Washington, USA. The employer ID is 47-5352856.) -$(P If you want to get in touch with the D Language Foundation, please feel free to write to $(LINK2 mailto:foundation@dlang.org, foundation@dlang.org).) +$(P To contact the D Language Foundation, please direct emails to +$(LINK2 mailto:foundation@dlang.org, foundation@dlang.org) and other correspondence to +6830 NE Bothell Way, Suite C-162, Kenmore WA 98028.) ) From b648589e4373893851964ff33125c01b19110bdc Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Sat, 8 Apr 2017 16:23:35 +0200 Subject: [PATCH 06/78] Remove gratuitous "empty" clause. FuncAttrs is already optional, so FuncAttr does not need to contain an empty clause. --- spec/abi.dd | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/abi.dd b/spec/abi.dd index 8ff19120d2..a975b65a28 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -469,7 +469,6 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(GLINK FuncAttr) $(I FuncAttrs) $(GNAME FuncAttr): - $(I empty) $(GLINK FuncAttrPure) $(GLINK FuncAttrNogc) $(GLINK FuncAttrNothrow) From 8cd57e5a60e46bd682d935c99092185b0eecfc18 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Sat, 8 Apr 2017 16:28:09 +0200 Subject: [PATCH 07/78] make Parameters optional in TypeFunction A function can have no arguments. --- spec/abi.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/abi.dd b/spec/abi.dd index 8ff19120d2..f07856d568 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -454,7 +454,7 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(B Nh) $(GLINK Type) $(GNAME TypeFunction): - $(GLINK CallConvention) $(GLINK FuncAttrs)$(OPT) $(GLINK Parameters) $(GLINK ParamClose) $(GLINK Type) + $(GLINK CallConvention) $(GLINK FuncAttrs)$(OPT) $(GLINK Parameters)$(OPT) $(GLINK ParamClose) $(GLINK Type) $(GNAME CallConvention): $(B F) $(GREEN // D) From f3f173bce3b27e7c81ee8a73383e052f593bf889 Mon Sep 17 00:00:00 2001 From: alouanchi Date: Sat, 8 Apr 2017 14:39:59 +0100 Subject: [PATCH 08/78] Fix Issue 17303 - type error in the href url under the link Systems Programming --- areas-of-d-usage.dd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/areas-of-d-usage.dd b/areas-of-d-usage.dd index 1dfd53e75e..75aeaffd11 100644 --- a/areas-of-d-usage.dd +++ b/areas-of-d-usage.dd @@ -12,7 +12,7 @@ $(DIVC page-contents quickindex, $(LI $(RELATIVE_LINK2 web, Web applications)) $(LI $(RELATIVE_LINK2 gui, GUI applications)) ) - $(LI $(RELATIVE_LINK2 system_programming, Systems Programming)) $(OL + $(LI $(RELATIVE_LINK2 system-programming, Systems Programming)) $(OL $(LI $(RELATIVE_LINK2 operating_systems, Operating systems)) $(LI $(RELATIVE_LINK2 compilers, Compilers)) $(LI $(RELATIVE_LINK2 embedded, Embedded applications)) @@ -30,7 +30,7 @@ $(DIVC page-contents quickindex, $(DIVC start-icons, $(START_ICONS_ENTRY Industry, industry, industry) - $(START_ICONS_ENTRY Systems Programming, gears, systems-programming) + $(START_ICONS_ENTRY Systems Programming, gears, system-programming) $(START_ICONS_ENTRY Research, flask, cutting-edge) $(START_ICONS_ENTRY Academia, graduation-cap, academia) ) From d74200d884603ae895e51ceb3029d5abed308087 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Sun, 9 Apr 2017 12:25:36 -0700 Subject: [PATCH 09/78] document -mv compiler switch --- dcompiler.dd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dcompiler.dd b/dcompiler.dd index 2d97fb22e7..e3715e4513 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -665,6 +665,14 @@ dmd -cov -unittest myprog.d ) ) + $(SWITCH $(SWNAME -mv)=$(I package.module)=$(I path/filename), + Use $(I path/filename) as the source file for $(I package.module). + This is used when the source file path and names are not the same + as the package and module hierarchy. + The rightmost components of the $(I path/filename) and $(I package.module) + can be omitted if they are the same. + ) + $(WINDOWS $(SWITCH $(SWNAME -mscrt)=$(I libname), if building MS-COFF object files with -m64 or -m32mscoff, embed a reference to From 4df809500d92762b3c8ffa47ff195b759239ecb0 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Tue, 11 Apr 2017 08:50:52 +0200 Subject: [PATCH 10/78] FuncAttrScope is now mangled as Nl Document changes by https://github.com/dlang/dmd/pull/6496 --- spec/abi.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/abi.dd b/spec/abi.dd index 8ff19120d2..45adeb1f35 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -499,7 +499,7 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(B Nj) $(GNAME FuncAttrScope): - $(B M) + $(B Nl) $(GNAME FuncAttrTrusted): $(B Ne) From 4ec66653c62e9842f253bc4365faac47df876cc0 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 11 Apr 2017 02:34:22 -0700 Subject: [PATCH 11/78] fix Issue 17293 - 'Using C++ Classes From D' example no longer works --- spec/cpp_interface.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/cpp_interface.dd b/spec/cpp_interface.dd index 7278fc3247..5dc7c787a8 100644 --- a/spec/cpp_interface.dd +++ b/spec/cpp_interface.dd @@ -260,7 +260,7 @@ void deleteInstance(Derived *&d) --- extern(C++) { - interface Base + abstract class Base { void print3i(int a, int b, int c); } From 25ce0d13eedac74f43ab0c599027fc992bf548be Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Thu, 13 Apr 2017 10:25:37 +0200 Subject: [PATCH 12/78] abi: Template symbol parameters are either qualified or mangled. Also symbol parameters are prefixed with their symbol length, as per bugzilla 3043. --- spec/abi.dd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/abi.dd b/spec/abi.dd index b43dfe0907..11cd4e15d3 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -244,8 +244,8 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GNAME TemplateArgX): $(B T) $(GLINK Type) $(B V) $(GLINK Type) $(GLINK Value) - $(B S) $(GLINK SymbolName) - $(B S) $(GLINK MangledName) + $(B S) $(GLINK Number) $(GLINK QualifiedName) + $(B S) $(GLINK Number) $(GLINK MangledName) $(GNAME Value): $(B n) From 77b142da75d58d7c837789448c6b936ce3c4bd3c Mon Sep 17 00:00:00 2001 From: Minas Mina Date: Thu, 13 Apr 2017 12:56:28 +0300 Subject: [PATCH 13/78] Terminix renamed to tilix --- areas-of-d-usage.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/areas-of-d-usage.dd b/areas-of-d-usage.dd index 75aeaffd11..1964a9539e 100644 --- a/areas-of-d-usage.dd +++ b/areas-of-d-usage.dd @@ -114,7 +114,7 @@ $(AREA_SECTION3 $(LNAME2 gui, GUI Applications), $(ARTICLE_FA_ICON desktop), D's high productivity is also beneficial when creating GUI applications. Some examples are the Linux tiling terminal emulator - $(HTTP github.com/gnunn1/terminix, terminix), + $(HTTP github.com/gnunn1/tilix, tilix), the D development environment $(HTTPS github.com/buggins/dlangide, DLangIDE), which is itself based on the cross-platform D library $(HTTPS github.com/buggins/dlangui, dlangui). From 95c0e8b4336760f2908b6d6e1779319a9fee8dc0 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Thu, 13 Apr 2017 20:25:58 +0200 Subject: [PATCH 14/78] Allow function parameter types in QualifiedName Nested symbols encode the function arguments of the outer function, similar to template arguments. --- spec/abi.dd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/abi.dd b/spec/abi.dd index 11cd4e15d3..70c1ca2450 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -211,6 +211,7 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GNAME QualifiedName): $(GLINK SymbolName) $(GLINK SymbolName) $(I QualifiedName) + $(GLINK SymbolName) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) $(GNAME SymbolName): $(GLINK LName) @@ -454,7 +455,10 @@ $(H3 $(LNAME2 type_mangling, Type Mangling)) $(B Nh) $(GLINK Type) $(GNAME TypeFunction): - $(GLINK CallConvention) $(GLINK FuncAttrs)$(OPT) $(GLINK Parameters)$(OPT) $(GLINK ParamClose) $(GLINK Type) + $(GLINK TypeFunctionNoReturn) $(GLINK Type) + + $(GNAME TypeFunctionNoReturn): + $(GLINK CallConvention) $(GLINK FuncAttrs)$(OPT) $(GLINK Parameters)$(OPT) $(GLINK ParamClose) $(GNAME CallConvention): $(B F) $(GREEN // D) From 8e3c4196f0dc360bcc7577f505585709634368b4 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Fri, 14 Apr 2017 15:32:54 +0200 Subject: [PATCH 15/78] allow 'M' for context pointer in QualifiedName --- spec/abi.dd | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/abi.dd b/spec/abi.dd index 70c1ca2450..a54b4c21af 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -212,6 +212,7 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GLINK SymbolName) $(GLINK SymbolName) $(I QualifiedName) $(GLINK SymbolName) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) + $(GLINK SymbolName) $(B M) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) $(GNAME SymbolName): $(GLINK LName) From eb35fd77de1dbea02c8018d7abe24a49fa8096d3 Mon Sep 17 00:00:00 2001 From: Wyatt Kennedy Date: Sun, 23 Apr 2017 20:03:43 -0500 Subject: [PATCH 16/78] Remove invalid colon There should not be a colon at the end of a NonVoidInitializer. --- spec/declaration.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/declaration.dd b/spec/declaration.dd index 19fe52a5fc..483b065e34 100644 --- a/spec/declaration.dd +++ b/spec/declaration.dd @@ -179,7 +179,7 @@ $(GNAME Initializer): $(GLINK NonVoidInitializer) $(GNAME NonVoidInitializer): - $(GLINK ExpInitializer): + $(GLINK ExpInitializer) $(GLINK ArrayInitializer) $(GLINK StructInitializer) From d581bd381030ad225c5261035a23fe3555f49f2e Mon Sep 17 00:00:00 2001 From: jacob-carlborg Date: Tue, 25 Apr 2017 13:20:18 +0200 Subject: [PATCH 17/78] Remove special casing for `objc.d` from the Posix makefile (#1636) This file is now shared for all platforms after the Objective-C integration refactoring: https://github.com/dlang/dmd/pull/6679. --- posix.mak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posix.mak b/posix.mak index 1414c1c660..217028ccca 100644 --- a/posix.mak +++ b/posix.mak @@ -518,11 +518,11 @@ docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ # DDox tries to generate the docs for all `.d` files. However for dmd this is tricky, # because the `{mach, elf, mscoff}` are platform dependent. -# Thus the need to exclude these files (and the `objc.d` files). +# Thus the need to exclude these files (and the `objc_glue.d` file). docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ ${PHOBOS_FILES_GENERATED} | dpl-docs find ${DMD_DIR}/src -name '*.d' | \ - sed -e /objc.d/d -e /mscoff/d -e /objc_glue.d/d ${DMD_EXCLUDE} \ + sed -e /mscoff/d -e /objc_glue.d/d ${DMD_EXCLUDE} \ > .prerelease-files.txt find ${DRUNTIME_DIR}/src -name '*.d' | sed -e '/gcstub/d' \ -e /unittest/d >> .prerelease-files.txt From 38aa012613510ed531b437b495699f10cc5199b3 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Wed, 26 Apr 2017 18:00:28 +0200 Subject: [PATCH 18/78] synchronize grammar for ModuleDeclaration with module.dd --- spec/grammar.dd | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/grammar.dd b/spec/grammar.dd index f8c5f62014..1a3c6a0201 100644 --- a/spec/grammar.dd +++ b/spec/grammar.dd @@ -1772,7 +1772,15 @@ $(GNAME DeclDef): $(GRAMMAR $(GNAME ModuleDeclaration): - $(D module) $(I ModuleFullyQualifiedName) $(D ;) + $(I ModuleAttributes)$(OPT) $(D module) $(I ModuleFullyQualifiedName) $(D ;) + +$(GNAME ModuleAttributes): + $(GLINK ModuleAttribute) + $(GLINK ModuleAttribute) $(I ModuleAttributes) + +$(GNAME ModuleAttribute): + $(GLINK2 attribute, DeprecatedAttribute) + $(GLINK2 attribute, UserDefinedAttribute) $(GNAME ModuleFullyQualifiedName): $(I ModuleName) From d027a09ada31dffe0d4bc3b45acad6072d0add3f Mon Sep 17 00:00:00 2001 From: David Sanders Date: Fri, 28 Apr 2017 11:07:21 -0700 Subject: [PATCH 19/78] Update dstyle.dd --- dstyle.dd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dstyle.dd b/dstyle.dd index f7039d2dc3..7041b958f5 100644 --- a/dstyle.dd +++ b/dstyle.dd @@ -211,7 +211,7 @@ $(H3 Operator Overloading) $(H3 Hungarian Notation) - $(P Using hungarian notation to denote the type of a variable + $(P Using Hungarian notation to denote the type of a variable is a bad idea. However, using notation to denote the purpose of a variable (that cannot be expressed by its type) is often a good @@ -328,7 +328,7 @@ $(LISTSECTION Imports, $(LI Local, selective imports should be preferred over global imports) $(LI Selective imports should have a space before and after the colon (`:`) like `import std.range : zip`) - $(LI Imports should be sorted lexiographically.) + $(LI Imports should be sorted lexicographically.) ) $(LISTSECTION Return type, $(LI The return type should be stated $(I explicitly) wherever possible, From 9dda536bb4379379ce5e2abd79d139dc387a3e75 Mon Sep 17 00:00:00 2001 From: Rainer Schuetze Date: Mon, 1 May 2017 18:02:28 +0200 Subject: [PATCH 20/78] allow TypeModifiers for member functions --- spec/abi.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/abi.dd b/spec/abi.dd index a54b4c21af..b2094627e4 100644 --- a/spec/abi.dd +++ b/spec/abi.dd @@ -212,7 +212,7 @@ $(H3 $(LNAME2 name_mangling, Name Mangling)) $(GLINK SymbolName) $(GLINK SymbolName) $(I QualifiedName) $(GLINK SymbolName) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) - $(GLINK SymbolName) $(B M) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) + $(GLINK SymbolName) $(B M) $(GLINK TypeModifiers)$(OPT) $(GLINK TypeFunctionNoReturn) $(I QualifiedName) $(GNAME SymbolName): $(GLINK LName) From 2ee84e51cfb6c91aa948cf094fefd13bfd4397ad Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 1 May 2017 19:13:56 +0200 Subject: [PATCH 21/78] grammar: Remove dangling closing parenthesis --- spec/grammar.dd | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/grammar.dd b/spec/grammar.dd index 1a3c6a0201..7f923bbfcd 100644 --- a/spec/grammar.dd +++ b/spec/grammar.dd @@ -1626,7 +1626,6 @@ $(GNAME LinkageType): $(D Pascal) $(D System) $(D Objective-C) -) $(GNAME CppAggregateType): $(D class) From 42b4fdb09d2c1384efd200387d0e211177c66827 Mon Sep 17 00:00:00 2001 From: Joakim Date: Wed, 3 May 2017 09:21:41 +0530 Subject: [PATCH 22/78] Update LDC platform info --- download.dd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/download.dd b/download.dd index 184ebc9102..bc1c929c99 100644 --- a/download.dd +++ b/download.dd @@ -37,11 +37,11 @@ $(TABLEC download-compilers, $(UL $(LI $(LINK2 http://llvm.org/, LLVM)-based D compiler) $(LI Strong optimization) - $(LI Alpha support for mobile: - $(LINK2 https://github.com/smolt/ldc-iphone-dev/releases, iOS), - $(LINK2 https://github.com/joakim-noah/android/releases, Android) + $(LI Mobile support: + $(LINK2 https://github.com/smolt/ldc-iphone-dev/releases, iOS alpha), + $(LINK2 https://github.com/joakim-noah/android/releases, Android beta) ) - $(LI Architectures: i386, amd64, armel, $(LINK2 https://wiki.dlang.org/Compilers#Comparison,others)) + $(LI Architectures: i386, amd64, armel, armhf, $(LINK2 https://wiki.dlang.org/Compilers#Comparison,others)) ) ) ) From 6814f5878b42ee360b6ef6281a0e7e94cda6033a Mon Sep 17 00:00:00 2001 From: Titouan Vervack Date: Wed, 3 May 2017 23:34:49 +0200 Subject: [PATCH 23/78] Fixed typo --- spec/contracts.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/contracts.dd b/spec/contracts.dd index a5ccc645cc..421236e2e4 100644 --- a/spec/contracts.dd +++ b/spec/contracts.dd @@ -238,7 +238,7 @@ assert(&s); // check that struct S invariant holds ------ $(P Invariants contain assert expressions, and so when they fail, - they throw a $(D AssertError)s. + they throw $(D AssertError)s. Class invariants are inherited, that is, any class invariant is implicitly anded with the invariants of its base classes.) From 2e1ec1de3c50ad0f67c5bdb33ddc7f6cce886c7c Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Sat, 6 May 2017 12:25:58 +0200 Subject: [PATCH 24/78] Remove SH64 predefined version condition. --- spec/version.dd | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/version.dd b/spec/version.dd index e5550068c2..35ea2e1520 100644 --- a/spec/version.dd +++ b/spec/version.dd @@ -291,7 +291,6 @@ $(H3 $(LEGACY_LNAME2 PredefinedVersions, predefined-versions, Predefined Version $(TROW $(ARGS $(D HPPA)) , $(ARGS The HP PA-RISC architecture, 32-bit)) $(TROW $(ARGS $(D HPPA64)) , $(ARGS The HP PA-RISC architecture, 64-bit)) $(TROW $(ARGS $(D SH)) , $(ARGS The SuperH architecture, 32-bit)) - $(TROW $(ARGS $(D SH64)) , $(ARGS The SuperH architecture, 64-bit)) $(TROW $(ARGS $(D Alpha)) , $(ARGS The Alpha architecture)) $(TROW $(ARGS $(D Alpha_SoftFloat)) , $(ARGS The Alpha soft float ABI)) $(TROW $(ARGS $(D Alpha_HardFloat)) , $(ARGS The Alpha hard float ABI)) From 7e0799ff72e4ecf5624d53d82d772a04bdb30ccb Mon Sep 17 00:00:00 2001 From: "AlQurashi, Abdullah" Date: Sat, 6 May 2017 22:07:59 +0300 Subject: [PATCH 25/78] added arabiaweather to orgs-using-d --- images/orgs-using-d/arabiaweather.png | Bin 0 -> 11019 bytes orgs-using-d.dd | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 images/orgs-using-d/arabiaweather.png diff --git a/images/orgs-using-d/arabiaweather.png b/images/orgs-using-d/arabiaweather.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc22af111a4b836f45118a0c85a08f3aae2a6dc GIT binary patch literal 11019 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 Date: Wed, 10 May 2017 22:12:42 +0000 Subject: [PATCH 26/78] Fix Issue 17391 - SECURITY: XSS through DDOC comments Add a documentation note about the security considerations of embeddable HTML in DDoc. --- dcompiler.dd | 4 +++- spec/ddoc.dd | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dcompiler.dd b/dcompiler.dd index e3715e4513..38354b89d6 100644 --- a/dcompiler.dd +++ b/dcompiler.dd @@ -424,7 +424,9 @@ dmd -cov -unittest myprog.d ) $(SWITCH $(SWNAME -D), - generate $(LINK2 spec/ddoc.html, documentation) from source + $(P Generate $(LINK2 spec/ddoc.html, documentation) from source.) + + $(P Note: mind the $(LINK2 spec/ddoc.html#security, security considerations).) ) $(SWITCH $(SWNAME -Dd)$(I docdir), diff --git a/spec/ddoc.dd b/spec/ddoc.dd index 8788b9d295..0954f7b86d 100644 --- a/spec/ddoc.dd +++ b/spec/ddoc.dd @@ -1033,6 +1033,16 @@ $(P generated by Ddoc. ) +$(H2 $(LNAME2 security, Security considerations)) + +$(P + Note that DDoc comments may embed raw HTML, including + $(LT)script$(GT) tags. Be careful when publishing or distributing + rendered DDoc HTML generated from untrusted sources, as this may + allow $(LINK2 https://en.wikipedia.org/wiki/Cross-site_scripting, + cross-site scripting). +) + $(H2 Links to D documentation generators) $(P From 6e1bdb195d97e5b6ce064ee1affc2fc125cf05db Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 11 May 2017 00:59:47 +0200 Subject: [PATCH 27/78] Ensure that the directory phobos-stable exists The current repository layout assumes that the latest, stable phobos (e.g. ../phobos-2.074.0) exists. For now, this is automatically ensured before the Makefile targets are evaluated. --- posix.mak | 2 ++ 1 file changed, 2 insertions(+) diff --git a/posix.mak b/posix.mak index 217028ccca..a03803bcad 100644 --- a/posix.mak +++ b/posix.mak @@ -55,6 +55,8 @@ PHOBOS_STABLE_DIR_GENERATED=$(GENERATED)/phobos-release # Makefile dependencies and rules PHOBOS_FILES := $(shell find $(PHOBOS_DIR) -name '*.d' -o -name '*.mak' -o -name '*.ddoc') PHOBOS_FILES_GENERATED := $(subst $(PHOBOS_DIR), $(PHOBOS_DIR_GENERATED), $(PHOBOS_FILES)) +$(shell [ ! -d $(PHOBOS_DIR) ] && git clone --depth=1 ${GIT_HOME}/phobos $(PHOBOS_DIR)) +$(shell [ ! -d $(PHOBOS_STABLE_DIR) ] && git clone -b v${LATEST} --depth=1 ${GIT_HOME}/phobos $(PHOBOS_STABLE_DIR)) PHOBOS_STABLE_FILES := $(shell find $(PHOBOS_STABLE_DIR) -name '*.d' -o -name '*.mak' -o -name '*.ddoc') PHOBOS_STABLE_FILES_GENERATED := $(subst $(PHOBOS_STABLE_DIR), $(PHOBOS_STABLE_DIR_GENERATED), $(PHOBOS_STABLE_FILES)) ################################################################################ From 76d95f920911baa5b100504043bbf6b67970794b Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Thu, 11 May 2017 11:53:34 +0000 Subject: [PATCH 28/78] index.dd: Update DConf news --- index.dd | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/index.dd b/index.dd index fcbdac302c..273248b389 100644 --- a/index.dd +++ b/index.dd @@ -85,9 +85,14 @@ $(DIVC boxes, $(DIVC row, $(TOUR newspaper-o, News, $(P $(LINK2 http://dconf.org/2017/index.html, DConf 2017) - is coming up: May 4-7 in Berlin, Germany. $(BR) - $(LINK2 http://dconf.org/2017/registration.html, Secure your seat) - before it's sold out! + has successfully concluded! + ) + $(P + Whether you were with us in Berlin or watching from + home, we thank everyone for participating. You can + review the conference through $(LINK2 + http://youtube.com/playlist?list=PL3jwVPmk_PRxo23yyoc0Ip_cP3-rCm7eB, + this YouTube playlist). ) $(P Stay updated with $(LINK2 http://arsdnet.net/this-week-in-d, From 737dd480a3008b5f80f87d521623493cac4f5d02 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Sat, 13 May 2017 22:56:38 +0000 Subject: [PATCH 29/78] posix.mak: Fix default target The default target of a Makefile is usually the first defined non-pattern target. The intended default target of dlang.org's posix.mak is the 'all' target, however this was broken in 44dd86f9a22bffbc057e76a2cf861037f8f34760 by introducing a non-pattern target among the pattern targets (in order to specialize building error pages as necessary to fix relative links to resources). Move the non-pattern rules block (which includes the intended default target, 'all') above the pattern rules block to fix the intended default target. --- posix.mak | 104 +++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/posix.mak b/posix.mak index 217028ccca..06b23dc64d 100644 --- a/posix.mak +++ b/posix.mak @@ -185,58 +185,6 @@ $(PREMADE) $(STYLES) $(IMAGES) $(JAVASCRIPT)) ALL_FILES = $(ALL_FILES_BUT_SITEMAP) $(DOC_OUTPUT_DIR)/sitemap.html -################################################################################ -# Pattern rulez -################################################################################ - -# NOTE: Depending on the version of make, order matters here. Therefore, put -# sub-directories before their parents. - -$(DOC_OUTPUT_DIR)/changelog/%.html : changelog/%_pre.dd $(CHANGELOG_PRE_DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_PRE_DDOC) $< - -$(DOC_OUTPUT_DIR)/changelog/%.html : changelog/%.dd $(CHANGELOG_DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_DDOC) $< - -$(DOC_OUTPUT_DIR)/spec/%.html : spec/%.dd $(SPEC_DDOC) $(DMD) - $(DMD) -c -o- -Df$@ $(SPEC_DDOC) $< - -$(DOC_OUTPUT_DIR)/404.html : 404.dd $(DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(DDOC) errorpage.ddoc $< - -$(DOC_OUTPUT_DIR)/%.html : %.dd $(DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(DDOC) $< - -$(DOC_OUTPUT_DIR)/%.verbatim : %_pre.dd verbatim.ddoc $(DMD) - $(DMD) -c -o- -Df$@ verbatim.ddoc $< - -$(DOC_OUTPUT_DIR)/%.verbatim : %.dd verbatim.ddoc $(DMD) - $(DMD) -c -o- -Df$@ verbatim.ddoc $< - -$(DOC_OUTPUT_DIR)/%.php : %.php.dd $(DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(DDOC) $< - -$(DOC_OUTPUT_DIR)/css/% : css/% - @mkdir -p $(dir $@) -ifeq (1,$(CSS_MINIFY)) - curl -X POST -fsS --data-urlencode 'input@$<' http://cssminifier.com/raw >$@ -else - cp $< $@ -endif - -$(DOC_OUTPUT_DIR)/%.css : %.css.dd $(DMD) - $(DMD) -c -o- -Df$@ $< - -$(DOC_OUTPUT_DIR)/% : % - @mkdir -p $(dir $@) - cp $< $@ - -$(DOC_OUTPUT_DIR)/dmd-%.html : %.ddoc dcompiler.dd $(DDOC) $(DMD) - $(DMD) -conf= -c -o- -Df$@ $(DDOC) dcompiler.dd $< - -$(DOC_OUTPUT_DIR)/dmd-%.verbatim : %.ddoc dcompiler.dd verbatim.ddoc $(DMD) - $(DMD) -c -o- -Df$@ verbatim.ddoc dcompiler.dd $< - ################################################################################ # Rulez ################################################################################ @@ -298,6 +246,58 @@ rsync : all kindle pdf rsync-only : rsync -avzO --chmod=u=rwX,g=rwX,o=rX --delete $(RSYNC_FILTER) $(DOC_OUTPUT_DIR)/ $(REMOTE_DIR)/ +################################################################################ +# Pattern rulez +################################################################################ + +# NOTE: Depending on the version of make, order matters here. Therefore, put +# sub-directories before their parents. + +$(DOC_OUTPUT_DIR)/changelog/%.html : changelog/%_pre.dd $(CHANGELOG_PRE_DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_PRE_DDOC) $< + +$(DOC_OUTPUT_DIR)/changelog/%.html : changelog/%.dd $(CHANGELOG_DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_DDOC) $< + +$(DOC_OUTPUT_DIR)/spec/%.html : spec/%.dd $(SPEC_DDOC) $(DMD) + $(DMD) -c -o- -Df$@ $(SPEC_DDOC) $< + +$(DOC_OUTPUT_DIR)/404.html : 404.dd $(DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(DDOC) errorpage.ddoc $< + +$(DOC_OUTPUT_DIR)/%.html : %.dd $(DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(DDOC) $< + +$(DOC_OUTPUT_DIR)/%.verbatim : %_pre.dd verbatim.ddoc $(DMD) + $(DMD) -c -o- -Df$@ verbatim.ddoc $< + +$(DOC_OUTPUT_DIR)/%.verbatim : %.dd verbatim.ddoc $(DMD) + $(DMD) -c -o- -Df$@ verbatim.ddoc $< + +$(DOC_OUTPUT_DIR)/%.php : %.php.dd $(DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(DDOC) $< + +$(DOC_OUTPUT_DIR)/css/% : css/% + @mkdir -p $(dir $@) +ifeq (1,$(CSS_MINIFY)) + curl -X POST -fsS --data-urlencode 'input@$<' http://cssminifier.com/raw >$@ +else + cp $< $@ +endif + +$(DOC_OUTPUT_DIR)/%.css : %.css.dd $(DMD) + $(DMD) -c -o- -Df$@ $< + +$(DOC_OUTPUT_DIR)/% : % + @mkdir -p $(dir $@) + cp $< $@ + +$(DOC_OUTPUT_DIR)/dmd-%.html : %.ddoc dcompiler.dd $(DDOC) $(DMD) + $(DMD) -conf= -c -o- -Df$@ $(DDOC) dcompiler.dd $< + +$(DOC_OUTPUT_DIR)/dmd-%.verbatim : %.ddoc dcompiler.dd verbatim.ddoc $(DMD) + $(DMD) -c -o- -Df$@ verbatim.ddoc dcompiler.dd $< + ################################################################################ # Ebook ################################################################################ From f9f509d0f00640d75b3f0fcf9754385ab06bb9fc Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Wed, 17 May 2017 20:07:50 +0000 Subject: [PATCH 30/78] Add high-resolution logo for OpenGraph Use the old logo for now, but the image can be substituted with a newer logo in the future. --- images/dlogo_2015.svg | 216 +++++++++++++++++++++++++++++++++++++ images/dlogo_opengraph.png | Bin 0 -> 84458 bytes posix.mak | 1 + 3 files changed, 217 insertions(+) create mode 100644 images/dlogo_2015.svg create mode 100644 images/dlogo_opengraph.png diff --git a/images/dlogo_2015.svg b/images/dlogo_2015.svg new file mode 100644 index 0000000000..f2492bc3f7 --- /dev/null +++ b/images/dlogo_2015.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/images/dlogo_opengraph.png b/images/dlogo_opengraph.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1aa3668120a57cd5d27f1a3d2d9f290b074eb5 GIT binary patch literal 84458 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 literal 0 HcmV?d00001 diff --git a/posix.mak b/posix.mak index 217028ccca..44d525c76a 100644 --- a/posix.mak +++ b/posix.mak @@ -118,6 +118,7 @@ IMAGES=favicon.ico $(ORGS_USING_D) $(addprefix images/, \ $(addsuffix .png, archlinux_logo apple_logo centos_logo chocolatey_logo \ d3 debian_logo dlogo fedora_logo freebsd_logo gentoo_logo homebrew_logo \ opensuse_logo ubuntu_logo windows_logo pattern github-ribbon \ + dlogo_opengraph \ $(addprefix ddox/, alias class enum enummember function \ inherited interface module package private property protected \ struct template variable)) \ From f575f4ca5184a822f8e8ff7491eb9c45d545d85a Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Wed, 17 May 2017 20:11:19 +0000 Subject: [PATCH 31/78] Add OpenGraph meta tags to the front page --- index.dd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/index.dd b/index.dd index 273248b389..1977dc4fc3 100644 --- a/index.dd +++ b/index.dd @@ -434,6 +434,7 @@ Macros: FRONTPAGE_ORG=$(DIVC frontpage-orgs-cell dont-highlight-link donthyphenate, $(LINK2 $2, $(FRONTPAGE_ORG_IMG $3)) $(H3 $1) $(P $(I $4 ))) _= Single word inline CSS needs to be escaped _= C_A=$1:$2; + META_DESCRIPTION=D is a systems programming language with C-like syntax and static typing. EXTRA_HEADERS=$(T style, .why-d-icon { padding-right: 0.2em; @@ -467,3 +468,10 @@ Macros: margin-bottom: -0.5em; } ) + $(COMMENT index.html only for now, until we can figure out + how to generate a URL to the current page for og:url) + + + + + From aace249b971bd9dde3e76c37fc824a874d3ed4d4 Mon Sep 17 00:00:00 2001 From: Andrei Alexandrescu Date: Mon, 22 May 2017 08:51:54 -0400 Subject: [PATCH 32/78] Explain behavior of member=expr inside constructors --- spec/struct.dd | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/spec/struct.dd b/spec/struct.dd index 5e69d3a7f6..c0c912622f 100644 --- a/spec/struct.dd +++ b/spec/struct.dd @@ -348,6 +348,96 @@ $(SECTION3 $(LEGACY_LNAME2 Struct-Constructor, struct-constructor, Struct Constr } ------ +$(P Inside a constructor, the first occurrence (in lexical order) of assignments +of the form $(CODE member = expression;) are handled differently than usual +assignments. The first such assignment in lexical order is converted to a +constructor call for the member's type. Example:) + +------ +import std.stdio; + +struct A +{ + this(int x) { writef("A.this(%s)", x); } +} + +struct B +{ + A a; + this(int x) + { + write("[= "); + a = x; + writeln(" =]"); + // a = x; does not compile here, it already occurred lexically. + } +} + +void main(string[] args) +{ + auto b = B(10); + // b.a = 10; does not compile here, A does not define opAssign(int). +} +------ + +$(P The program above prints the line $(CODE "[= A.this(10) =]"). Anywhere else +attempting to assign an integer to an object of type `A` would count as an +assignment (and is not compilable because `A` does not define `opAssign(int)`).) + +$(P Finding the first assignment in lexical order is flow-sensitive upon the +`if` statement. Consider a change to struct `B` in the previous example as +follows:) + +------ +struct B +{ + A a; + this(int x) + { + if (x < 0) + a = -x; + else + a = x; + } +} +------ + +$(P This code issues a constructor call on each branch of the `if` statement. +However, such flow sensitivity is limited. There is no static or dynamic +analysis of coverage of the `if` statement. For example:) + +------ +struct B +{ + A a; + this(int x) + { + if (false) a = 0; // constructor call even if never covered + a = x; // error, cannot assign + } +} +------ + +$(P Also, member assignments inside loops are never considered constructors, +even if it can be determined statically that the loop executes at most once. +Example:) + +------ +struct B +{ + A a; + this(int x) + { + foreach (i; 0 .. x ? 0 : 1) a = i; // error, cannot assign + } +} +------ + +$(P If an exception is thrown at any point from within a constructor, +destructors are called for all members, in reverse lexical order of their +declaration. Members that have not been explicitly initialized in the +constructor will have their `.init` values upon destruction.) + $(P A constructor qualifier allows the object to be constructed with that specific qualifier. ) From 9b4b83d45dc7638213ccc1261ffc25b5fd4ed404 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Sat, 13 May 2017 23:07:24 +0000 Subject: [PATCH 33/78] dpl-docs: Disable SSL As SSL is not necessary to for anything dpl-docs is currently doing, disable it. This fixes building dlang.org on systems with OpenSSL 1.1.0 or newer, such as Arch Linux, which introduced breaking API changes that currently cause linking errors for Vibe.d apps not built with version=VibeNoSSL. --- dpl-docs/dub.json | 2 +- dpl-docs/dub.selections.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dpl-docs/dub.json b/dpl-docs/dub.json index 4f523cdb43..3870d2ca27 100644 --- a/dpl-docs/dub.json +++ b/dpl-docs/dub.json @@ -3,5 +3,5 @@ "dependencies": { "ddox": "~>0.15.0" }, - "versions": ["VibeCustomMain"] + "versions": ["VibeCustomMain", "VibeNoSSL"] } diff --git a/dpl-docs/dub.selections.json b/dpl-docs/dub.selections.json index 461d91224a..e56873d3b2 100644 --- a/dpl-docs/dub.selections.json +++ b/dpl-docs/dub.selections.json @@ -9,7 +9,6 @@ "libev": "5.0.0+4.04", "libevent": "2.0.2+2.0.16", "memutils": "0.4.8", - "openssl": "1.1.4+1.0.1g", "vibe-d": "0.7.30" } } From 45793f8fba144c851998f44de4f975e2f7a6bf56 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Wed, 24 May 2017 23:12:48 -0700 Subject: [PATCH 34/78] add __traits(getParameterStorageClasses(f, i) --- spec/traits.dd | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/spec/traits.dd b/spec/traits.dd index d07dfe9bf4..83a40a0def 100644 --- a/spec/traits.dd +++ b/spec/traits.dd @@ -44,6 +44,7 @@ $(GNAME TraitsKeyword): $(GBLINK getFunctionAttributes) $(GBLINK getMember) $(GBLINK getOverloads) + $(GBLINK getParameterStorageClasses) $(GBLINK getPointerBitmap) $(GBLINK getProtection) $(GBLINK getVirtualFunctions) @@ -567,6 +568,28 @@ int() 2 ) +$(H2 $(GNAME getParameterStorageClasses)) + + $(P + Takes two arguments. + The first must either be a function symbol, or a type + that is a function, delegate or a function pointer. + The second is an integer identifying which parameter, where the first parameter is + 0. + It returns a tuple of strings representing the storage classes of that parameter. + ) + +--- +ref int foo(return ref const int* p, scope int* a, out int b, lazy int c); + +static assert(__traits(getParameterStorageClasses, foo, 0)[0] == "return"); +static assert(__traits(getParameterStorageClasses, foo, 0)[1] == "ref"); + +static assert(__traits(getParameterStorageClasses, foo, 1)[0] == "scope"); +static assert(__traits(getParameterStorageClasses, foo, 2)[0] == "out"); +static assert(__traits(getParameterStorageClasses, typeof(&foo), 3)[0] == "lazy"); +--- + $(H2 $(GNAME getPointerBitmap)) $(P The argument is a type. From 909fe36fce4c6f9e74a381dae4291d1a9e087891 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 23 May 2017 19:02:15 -0700 Subject: [PATCH 35/78] document __traits(getFunctionVariadicStyle, f) --- spec/traits.dd | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/spec/traits.dd b/spec/traits.dd index d07dfe9bf4..930936b56b 100644 --- a/spec/traits.dd +++ b/spec/traits.dd @@ -42,6 +42,7 @@ $(GNAME TraitsKeyword): $(GBLINK getAliasThis) $(GBLINK getAttributes) $(GBLINK getFunctionAttributes) + $(GBLINK getFunctionVariadicStyle) $(GBLINK getMember) $(GBLINK getOverloads) $(GBLINK getPointerBitmap) @@ -442,6 +443,43 @@ tuple((Foo)) ) ) +$(SECTION2 $(GNAME getFunctionVariadicStyle), + $(P + Takes one argument which must either be a function symbol, or a type + that is a function, delegate or a function pointer. + + It returns a string identifying the kind of + $(LINK2 function.html#variadic, variadic arguments) that are supported. + ) + + $(TABLE2 getFunctionVariadicStyle, + $(THEAD string returned, kind, access, example) + $(TROW $(D "none"), not a variadic function,  , $(D void foo();)) + $(TROW $(D "argptr"), D style variadic function, $(D _argptr) and $(D _arguments), $(D void bar(...))) + $(TROW $(D "stdarg"), C style variadic function, $(LINK2 $(ROOT_DIR)phobos/core_stdc_stdarg.html, $(D core.stdc.stdarg)), $(D extern (C) void abc(int, ...))) + $(TROW $(D "typesafe"), typesafe variadic function, array on stack, $(D void def(int[] ...))) + ) + +--- +import core.stdc.stdarg; + +void novar() {} +extern(C) void cstyle(int, ...) {} +extern(C++) void cppstyle(int, ...) {} +void dstyle(...) {} +void typesafe(int[]...) {} + +static assert(__traits(getFunctionVariadicStyle, novar) == "none"); +static assert(__traits(getFunctionVariadicStyle, cstyle) == "stdarg"); +static assert(__traits(getFunctionVariadicStyle, cppstyle) == "stdarg"); +static assert(__traits(getFunctionVariadicStyle, dstyle) == "argptr"); +static assert(__traits(getFunctionVariadicStyle, typesafe) == "typesafe"); + +static assert(__traits(getFunctionVariadicStyle, (int[] a...) {}) == "typesafe"); +static assert(__traits(getFunctionVariadicStyle, typeof(cstyle)) == "stdarg"); +--- +) + $(SECTION2 $(GNAME getFunctionAttributes), $(P Takes one argument which must either be a function symbol, function literal, From 0fb416dbfd536ee8e8d09171c4771fe6f8418075 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sun, 28 May 2017 13:23:19 +0200 Subject: [PATCH 36/78] Set bottom subnav to a single pix --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index ab2fe2e8f6..05b0a6799f 100644 --- a/css/style.css +++ b/css/style.css @@ -382,7 +382,7 @@ span#search-submit span /* hide 'go' */ { background: #F5F5F5; border: 0 solid #CCC; - border-width: 0 1px; + border-width: 0 1px 1px; padding-left: 1em; padding-right: 1em; width: 15em; From da87ad59509c7cf80d07de8246c6bf3bcfc7aec5 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 18:11:44 +0200 Subject: [PATCH 37/78] Add DMD to the release pages of Ddoc and Ddox --- posix.mak | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/posix.mak b/posix.mak index d3a483dd53..dde6b2d4a5 100644 --- a/posix.mak +++ b/posix.mak @@ -40,7 +40,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_REL=$(DMD_STABLE_DIR)/src/dmd +DMD_REL=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} @@ -216,10 +216,10 @@ ${GENERATED}/${LATEST}.ddoc : mkdir -p $(dir $@) echo "LATEST=${LATEST}" >$@ -${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) +${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) mkdir -p $(dir $@) - $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ - $(addprefix --dump , object std etc core) >$@ + $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ + $(addprefix --dump , object std etc core ddmd) >$@ ${GENERATED}/modlist-prerelease.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_DIR) $(PHOBOS_DIR) mkdir -p $(dir $@) @@ -372,7 +372,7 @@ $(DMD_REL) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_STABLE_DIR) -f posix.mak html \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos" \ DOCSRC="$(realpath .)" @@ -437,16 +437,15 @@ phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prereleas html phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_REL) $(STD_DDOC) \ - druntime-release + druntime-release dmd-release ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(DMD_REL) \ + DMD=$(realpath ${DMD_REL}) \ DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ DRUNTIME_PATH="$(realpath ${DRUNTIME_DIR})" \ - DMD="$(realpath ${DMD})" \ DOCSRC="$(realpath .)" \ - VERSION="$(realpath ${DMD_DIR}/VERSION)" \ + VERSION="$(realpath ${DMD_STABLE_DIR}/VERSION)" \ html phobos-prerelease-verbatim : ${PHOBOS_FILES_GENERATED} ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim @@ -505,13 +504,17 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ +docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs + find ${DMD_STABLE_DIR}/src -name '*.d' | \ + sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ + > .release-files.txt find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d > .release-files.txt + sed -e /unittest.d/d -e /gcstub/d >> .release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt - ${DMD_REL} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ + ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ + -version=MARS -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt ${DPL_DOCS} filter docs.json --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) From 7e635f7fff13af61493aaba9df54e464c524c59a Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Sun, 5 Mar 2017 08:53:06 +0100 Subject: [PATCH 38/78] Fix DMDSRC and allow a PROJECT_SOURCE_DIR to be set by DMD --- dlang.org.ddoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 5667b38727..7f0782a572 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -136,7 +136,7 @@ DDOCKEYVAL2=$(DIVC keyval $1, $(SPANC key key$1, $2:) $(DIVC val val$1, $(TAIL $ DDSUBLINK=$(LINK2 $(ROOT_DIR)$1.html#$2, $3) _= -DMDSRC=$(HTTPS github.com/D-Programming-Language/dmd/blob/master/src/$0, $0) +DMDSRC=$(HTTPS github.com/dlang/dmd/blob/master/src/dmd/$0, $0) DOT_PREFIXED=.$1$(DOT_PREFIXED $+) DOT_PREFIXED_SKIP=$(DOT_PREFIXED $+) DRUNTIMESRC=$(HTTPS github.com/dlang/druntime/blob/master/src/$0, $0) @@ -282,7 +282,7 @@ $(DIVID tools, $(DIV, ) ) $(DIVC tip smallprint, - Improve this page + Improve this page $(DIV, Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. @@ -486,4 +486,6 @@ _= YELLOW=$(SPANC yellow, $0) YES=$(CHECKMARK) + +PROJECT_SOURCE_DIR= _= From dc1c2b33f7954df8d5202b92995fe88beae92f4a Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Sun, 5 Mar 2017 08:57:52 +0100 Subject: [PATCH 39/78] Fix DMD source links for DDox --- dpl-docs/views/layout.dt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dpl-docs/views/layout.dt b/dpl-docs/views/layout.dt index 3be1eaf5d5..90f745929a 100644 --- a/dpl-docs/views/layout.dt +++ b/dpl-docs/views/layout.dt @@ -165,6 +165,8 @@ html(lang='en-US') - if( modname ) - if( modname.startsWith("core.") ) - project = "druntime", path_prefix = "src/"; + - else if( modname.startsWith("dmd.") || modname.startsWith("ddmd.") ) + - project = "dmd", path_prefix = "src/"; - else - project = "phobos", path_prefix = ""; - if (info.docGroups.length >= 1 && !noExactSourceCodeLinks) From 695fea1f2789d45bdfd62bdbf0c3fae6dd89195c Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 00:18:46 +0200 Subject: [PATCH 40/78] Deprecation: .sort and .reverse props were removed in 2.075 --- deprecate.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deprecate.dd b/deprecate.dd index 784871a84d..c1e076a8c5 100644 --- a/deprecate.dd +++ b/deprecate.dd @@ -16,7 +16,7 @@ $(SPEC_S Deprecated Features, $(TROW $(DEPLINK scope for allocating classes on the stack), future,  ,  ,  ) $(TROW $(DEPLINK Imaginary and complex types), future,  ,  ,  ) $(TROW $(DEPLINK Implicit catch statement), 2.072, 2.072, future, future ) - $(TROW $(DEPLINK .sort and .reverse properties for arrays), ?, 2.072;,  ,  ) + $(TROW $(DEPLINK .sort and .reverse properties for arrays), ?, 2.072;, 2.075;, 2.075) $(TROW $(DEPLINK C-style array pointers), ?, 2.072;,  ,  ) $(TROW $(DEPLINK Floating point NCEG operators), ?, 2.066, 2.072,  ) $(TROW $(DEPLINK clear), 2.060, 2.066,  , 2.068 ) From 58e2743ed12b207c85bd7d9f359722ea09279570 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 02:58:15 +0200 Subject: [PATCH 41/78] Add labels to spec --- spec/arrays.dd | 2 +- spec/class.dd | 4 ++-- spec/cpp_interface.dd | 14 +++++++------- spec/ddoc.dd | 28 ++++++++++++++-------------- spec/iasm.dd | 4 ++-- spec/memory-safe-d.dd | 4 ++-- spec/operatoroverloading.dd | 18 +++++++++--------- spec/pragma.dd | 2 +- spec/property.dd | 6 +++--- spec/struct.dd | 2 +- spec/template.dd | 4 ++-- 11 files changed, 44 insertions(+), 44 deletions(-) diff --git a/spec/arrays.dd b/spec/arrays.dd index 1564a70b7a..3afef37456 100644 --- a/spec/arrays.dd +++ b/spec/arrays.dd @@ -889,7 +889,7 @@ import std.stdio; writefln("the string is '%s'", str); --------- -$(H3 Void Arrays) +$(H3 $(LNAME2 void_arrays, Void Arrays)) $(P There is a special type of array which acts as a wildcard that can hold arrays of any kind, declared as $(D void[]). Void arrays are used for diff --git a/spec/class.dd b/spec/class.dd index 19a10b4306..c3b18cdbf1 100644 --- a/spec/class.dd +++ b/spec/class.dd @@ -811,7 +811,7 @@ class Foo } ------ -$(H3 Shared Static Constructors) +$(H3 $(LNAME2 shared_static_constructors, Shared Static Constructors)) $(GRAMMAR $(GNAME SharedStaticConstructor): @@ -823,7 +823,7 @@ $(GNAME SharedStaticConstructor): and are intended for initializing any shared global data. ) -$(H3 Shared Static Destructors) +$(H3 $(LNAME2 shared_static_destructors, Shared Static Destructors)) $(GRAMMAR $(GNAME SharedStaticDestructor): diff --git a/spec/cpp_interface.dd b/spec/cpp_interface.dd index 7278fc3247..9b1b653982 100644 --- a/spec/cpp_interface.dd +++ b/spec/cpp_interface.dd @@ -8,7 +8,7 @@ $(SPEC_S Interfacing to C++, through a $(DDLINK spec/interfaceToC, Interfacing to C, C interface) or a COM interface.) -$(H2 The General Idea) +$(H2 $(LNAME2 general_idea, The General Idea)) $(P Being 100% compatible with C++ means more or less adding a fully functional C++ compiler front end to D. @@ -45,7 +45,7 @@ $(H2 $(LNAME2 global-functions, Global Functions)) $(P C++ global functions, including those in namespaces, can be declared and called in D, or defined in D and called in C++.) -$(H3 Calling C++ Global Functions from D) +$(H3 $(LNAME2 calling_cpp_global_from_d, Calling C++ Global Functions from D)) $(P Given a C++ function in a C++ source file:) @@ -113,7 +113,7 @@ k = 3 ) -$(H3 Calling Global D Functions From C++) +$(H3 $(LNAME2 calling_global_d_functions_from_cpp, Calling Global D Functions From C++)) $(P To make a D function accessible from C++, give it C++ linkage:) @@ -186,8 +186,8 @@ $(H2 $(LNAME2 classes, Classes)) $(P Unlike classes and interfaces with D linkage, $(CODE extern (C++)) classes and interfaces are not rooted in $(CODE Object) and cannot be used with $(CODE typeid).) - - $(P D structs and classes have different semantics whereas C++ structs and + + $(P D structs and classes have different semantics whereas C++ structs and classes are basically the same. The use of a D struct or class depends on the C++ implementation and not on the used C++ keyword. When mapping a D $(CODE class) onto a C++ $(CODE struct), @@ -205,7 +205,7 @@ class Bar } --- -$(H3 Using C++ Classes From D) +$(H3 $(LNAME2 using_cpp_classes_from_d, Using C++ Classes From D)) $(P The following example shows binding of a pure virtual function, its implementation in a derived class, a non-virtual member function, and a @@ -315,7 +315,7 @@ instead disabled on the D side; an alternative would be to reimplement the constructor in D. See the $(DDSUBLINK spec/cpp_interface, lifetime-management, section below on lifetime management) for more information.) -$(H3 Using D Classes From C++) +$(H3 $(LNAME2 using_d_classes_from_cpp, Using D Classes From C++)) $(P Given D code like:) diff --git a/spec/ddoc.dd b/spec/ddoc.dd index 0954f7b86d..47b8a6a12c 100644 --- a/spec/ddoc.dd +++ b/spec/ddoc.dd @@ -202,7 +202,7 @@ a line immediately followed by a ':'. This name forms the section name. The section name is not case sensitive. ) -$(H4 Summary) +$(H4 $(LNAME2 summary, Summary)) $(P The first section is the $(I Summary), and does not have a section name. @@ -211,7 +211,7 @@ While the summary can be any length, try to keep it to one line. The $(I Summary) section is optional. ) -$(H4 Description) +$(H4 $(LNAME2 description, Description)) $(P The next unnamed section is the $(I Description). @@ -446,9 +446,9 @@ $(DD The syntax is $(B /c/string/), where $(B c) ------------------------------------ ) -$(H2 Highlighting) +$(H2 $(LNAME2 highlighting, Highlighting)) -$(H4 Embedded Comments) +$(H4 $(LNAME2 embedded_comments, Embedded Comments)) $(P The documentation comments can themselves be commented using @@ -456,7 +456,7 @@ $(P nest. ) -$(H4 Embedded Code) +$(H4 $(LNAME2 embedded_code, Embedded Code)) $(P D code can be embedded using lines beginning with at least three @@ -485,7 +485,7 @@ $(P so that $(D_COMMENT /* ... */) can be used inside the code section. ) -$(H4 Inline Code) +$(H4 $(LNAME2 inline_code, Inline Code)) $(P Inline code can be written between backtick characters ($(BACKTICK)), similarly @@ -514,7 +514,7 @@ $(P void bar() {} --- -$(H4 Embedded HTML) +$(H4 $(LNAME2 embedded_html, Embedded HTML)) $(P HTML can be embedded into the documentation comments, and it will @@ -535,7 +535,7 @@ best to avoid using it where practical. */ ------------------------------------ -$(H4 Emphasis) +$(H4 $(LNAME2 emphasis, Emphasis)) $(P Identifiers in documentation comments that are function parameters or are @@ -548,7 +548,7 @@ To prevent unintended emphasis of an identifier, it can be preceded by an underscore ($(UNDERSCORE)). The underscore will be stripped from the output. ) -$(H4 Character Entities) +$(H4 $(LNAME2 character_entities, Character Entities)) $(P Some characters have special meaning @@ -567,7 +567,7 @@ $(P special character is not immediately followed by a $(HASH) or a letter. ) -$(H4 No Documentation) +$(H4 $(LNAME2 no_documentation, No Documentation)) $(P No documentation is generated for the following constructs, @@ -582,7 +582,7 @@ $(P $(LI Class info, type info, and module info) ) -$(H2 Macros) +$(H2 $(LNAME2 macros, Macros)) $(P The documentation comment processor includes a simple macro @@ -979,7 +979,7 @@ $(H3 $(LNAME2 macro_def_ddocgenerated, Macro Definitions Generated by Ddoc)) ) ) -$(H2 Using Ddoc to generate examples from unit tests) +$(H2 $(LNAME2 using_ddoc_to_generate_examples, Using Ddoc to generate examples from unit tests)) $(P Ddoc can automatically generate usage examples for declarations @@ -1005,7 +1005,7 @@ unittest $(DPLLINK unittest.html#documented-unittests, documented unit tests). ) -$(H2 Using Ddoc for other Documentation) +$(H2 $(LNAME2 using_ddoc_for_other_documentation, Using Ddoc for other Documentation)) $(P Ddoc is primarily designed for use in producing documentation @@ -1043,7 +1043,7 @@ $(P cross-site scripting). ) -$(H2 Links to D documentation generators) +$(H2 $(LNAME2 links_to_d_documentation_generators, Links to D documentation generators)) $(P A list of current D documentation generators which use Ddoc diff --git a/spec/iasm.dd b/spec/iasm.dd index cec6a94596..3780ce5b0f 100644 --- a/spec/iasm.dd +++ b/spec/iasm.dd @@ -187,7 +187,7 @@ $(GNAME Register64): $(D YMM8) $(D YMM9) $(D YMM10) $(D YMM11) $(D YMM12) $(D YMM13) $(D YMM14) $(D YMM15) ) -$(H3 Special Cases) +$(H3 $(LNAME2 special_cases, Special Cases)) $(DL $(DT $(D lock), $(D rep), $(D repe), $(D repne), $(D repnz), $(D repz)) @@ -1072,7 +1072,7 @@ $(H3 $(LNAME2 simd, SIMD)) $(P SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX are supported.) $(COMMENT -$(H3 Other) +$(H3 $(LNAME2 other, Other)) $(P AES, CMUL, FSGSBASE, RDRAND, FP16C and FMA are supported.) ) diff --git a/spec/memory-safe-d.dd b/spec/memory-safe-d.dd index 74571eeda9..e49fcac764 100644 --- a/spec/memory-safe-d.dd +++ b/spec/memory-safe-d.dd @@ -21,7 +21,7 @@ $(SPEC_S Memory Safety, ) ) -$(H3 Usage) +$(H3 $(LNAME2 usage, Usage)) $(P Memory safety can be enabled on a per-function basis using the $(DDSUBLINK spec/function, safe-functions, $(D @safe) attribute). @@ -36,7 +36,7 @@ $(H3 Usage) -release) mode. ) -$(H3 Limitations) +$(H3 $(LNAME2 limitations, Limitations)) $(P Memory safety does not imply that code is portable, uses only sound programming practices, is free of byte order dependencies, diff --git a/spec/operatoroverloading.dd b/spec/operatoroverloading.dd index 55a29bc3aa..c97e783801 100644 --- a/spec/operatoroverloading.dd +++ b/spec/operatoroverloading.dd @@ -85,7 +85,7 @@ int foo(S s) } --- -$(H3 Postincrement $(I e)$(D ++) and Postdecrement $(I e)$(D --) Operators) +$(H3 $(LNAME2 postincrement_postdecrement_operators, Postincrement $(I e)$(D ++) and Postdecrement $(I e)$(D --) Operators)) $(P These are not directly overloadable, but instead are rewritten in terms of the ++$(I e) and --$(I e) prefix operators: @@ -101,7 +101,7 @@ $(H3 Postincrement $(I e)$(D ++) and Postdecrement $(I e)$(D --) Operators) $(ARGS $(D $(LPAREN)auto t =) $(I e)$(D , ++)$(I e)$(D , t$(RPAREN)))) ) -$(H3 Overloading Index Unary Operators) +$(H3 $(LNAME2 index_unary_operators, Overloading Index Unary Operators)) $(TABLE2 Overloadable Index Unary Operators, $(THEAD $(I op), $(I rewrite)) @@ -130,7 +130,7 @@ $(H3 Overloading Index Unary Operators) ) ) -$(H3 Overloading Slice Unary Operators) +$(H3 $(LNAME2 slice_unary_operators, Overloading Slice Unary Operators)) $(TABLE2 Overloadable Slice Unary Operators, $(THEAD $(I op), $(I rewrite)) @@ -202,7 +202,7 @@ $(H3 Overloading Slice Unary Operators) $(H2 $(LEGACY_LNAME2 Cast, cast, Cast Operator Overloading)) - $(P To define how one type can be cast to another, define the + $(P To define how one type can be cast to another, define the `opCast` template method, which is used as follows:) $(TABLE2 Cast Operators, $(THEAD $(I op), $(I rewrite)) @@ -216,7 +216,7 @@ $(H2 $(LEGACY_LNAME2 Cast, cast, Cast Operator Overloading)) expression, except in the case of boolean operations (see next section)) -$(H3 Boolean Operations) +$(H3 $(LNAME2 boolean_operators, Boolean Operations)) $(P Notably absent from the list of overloaded unary operators is the ! logical negation operator. More obscurely absent is a unary operator @@ -571,7 +571,7 @@ $(H2 $(LEGACY_LNAME2 Assignment, assignment, Assignment Operator Overloading)) c = 1; // Rewritten to c.opAssign(1); --- -$(H3 Index Assignment Operator Overloading) +$(H3 $(LNAME2 index_assignment_operator, Index Assignment Operator Overloading)) $(P If the left hand side of an assignment is an index operation on a struct or class instance, @@ -593,7 +593,7 @@ void test() } ------- -$(H3 Slice Assignment Operator Overloading) +$(H3 $(LNAME2 slice_assignment_operator, Slice Assignment Operator Overloading)) $(P If the left hand side of an assignment is a slice operation on a struct or class instance, it can be overloaded by implementing an $(D @@ -653,7 +653,7 @@ a $(METACODE op)= b a.opOpAssign!($(DOUBLEQUOTE $(METACODE op)))(b) --- -$(H3 Index Op Assignment Operator Overloading) +$(H3 $(LNAME2 index_op_assignment, Index Op Assignment Operator Overloading)) $(P If the left hand side of an $(I op)= is an index expression on a struct or class instance and $(D opIndexOpAssign) is a member:) @@ -668,7 +668,7 @@ a[$(METACODE $(ARGUMENTS))] $(METACODE op)= c a.opIndexOpAssign!($(DOUBLEQUOTE $(METACODE op)))(c, $(METACODE $(ARGUMENTS))) --- -$(H3 Slice Op Assignment Operator Overloading) +$(H3 $(LNAME2 slice_op_assignment, Slice Op Assignment Operator Overloading)) $(P If the left hand side of an $(I op)= is a slice expression on a struct or class instance and $(D opIndexOpAssign) is a member:) diff --git a/spec/pragma.dd b/spec/pragma.dd index ebc5a8a814..98915238ff 100644 --- a/spec/pragma.dd +++ b/spec/pragma.dd @@ -158,7 +158,7 @@ pragma(startaddress, foo); ) ) -$(H3 Vendor Specific Pragmas) +$(H3 $(LNAME2 vendor_specific_pragmas, Vendor Specific Pragmas)) $(P Vendor specific pragma $(I Identifier)s can be defined if they are prefixed by the vendor's trademarked name, in a similar manner diff --git a/spec/property.dd b/spec/property.dd index 60f9921d0d..ad6499da52 100644 --- a/spec/property.dd +++ b/spec/property.dd @@ -65,7 +65,7 @@ $(THEAD Property, Description) $(TROW $(RELATIVE_LINK2 classinfo, $(D .classinfo)), Information about the dynamic type of the class) ) -$(SECTION3 $(LNAME2 init, .init) Property, +$(SECTION3 $(LNAME2 init, .init Property), $(P $(D .init) produces a constant expression that is the default initializer. If applied to a type, it is the default initializer @@ -144,7 +144,7 @@ void main() ) ) -$(SECTION3 $(LNAME2 stringof, .stringof) Property, +$(SECTION3 $(LNAME2 stringof, .stringof Property), $(P $(D .stringof) produces a constant string that is the source representation of its prefix. @@ -226,7 +226,7 @@ $(SECTION3 $(LNAME2 alignof, .alignof Property), ) ) -$(SECTION3 $(LNAME2 classinfo, .classinfo) Property, +$(SECTION3 $(LNAME2 classinfo, .classinfo Property), $(P $(CODE .classinfo) provides information about the dynamic type of a class object. diff --git a/spec/struct.dd b/spec/struct.dd index 5e69d3a7f6..5b86a62d1a 100644 --- a/spec/struct.dd +++ b/spec/struct.dd @@ -289,7 +289,7 @@ $(TROW $(D .sizeof), Size in bytes of struct) $(TROW $(D .alignof), Size boundary struct needs to be aligned on) $(TROW $(D .tupleof), Gets type tuple of fields)) -$(H3 Struct Field Properties) +$(H3 $(LNAME2 struct_field_properties, Struct Field Properties)) $(TABLE2 Struct Field Properties, $(THEAD Name, Description) diff --git a/spec/template.dd b/spec/template.dd index 80c22f239c..f94c6d3b1f 100644 --- a/spec/template.dd +++ b/spec/template.dd @@ -235,7 +235,7 @@ $(H2 $(LNAME2 instantiation_scope, Instantiation Scope)) values are evaluated in the scope of the $(I TemplateDeclaration). ) -$(H2 Argument Deduction) +$(H2 $(LNAME2 argument_deduction, Argument Deduction)) $(P The types of template parameters are deduced for a particular template instantiation by comparing the template argument with @@ -312,7 +312,7 @@ $(H2 Argument Deduction) ------ ) -$(H2 Template Type Parameters) +$(H2 $(LNAME2 template_type_parameters, Template Type Parameters)) $(GRAMMAR $(GNAME TemplateTypeParameter): From 0548d3af1b8cc8f16056613cab0787678e936294 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 03:31:03 +0200 Subject: [PATCH 42/78] Move generated docs{,-prerelease}.json to $GENERATED --- .gitignore | 2 -- posix.mak | 45 +++++++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 0b30bb3735..b9718d5bca 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,6 @@ css/cssmenu.css *.min.* deleteme.* -docs-prerelease.json -docs.json .dub/ dpl-docs/dpl-docs modlist-release.ddoc diff --git a/posix.mak b/posix.mak index dde6b2d4a5..f56832b0e9 100644 --- a/posix.mak +++ b/posix.mak @@ -47,6 +47,7 @@ PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} ################################################################################ # Automatically generated directories GENERATED=.generated +G=$(GENERATED) PHOBOS_DIR_GENERATED=$(GENERATED)/phobos-prerelease PHOBOS_STABLE_DIR_GENERATED=$(GENERATED)/phobos-release # The assert_writeln_magic tool transforms all source files from Phobos. Hence @@ -470,24 +471,24 @@ ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim : verbatim.ddoc \ apidocs-prerelease : ${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml ${DOC_OUTPUT_DIR}/library-prerelease/.htaccess apidocs-release : ${DOC_OUTPUT_DIR}/library/sitemap.xml ${DOC_OUTPUT_DIR}/library/.htaccess -apidocs-serve : docs-prerelease.json +apidocs-serve : $G/docs-prerelease.json ${DPL_DOCS} serve-html --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ - --git-target=master --web-file-dir=. docs-prerelease.json + --git-target=master --web-file-dir=. $< -${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : docs-prerelease.json +${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : $G/docs-prerelease.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=master $(DPL_DOCS_PATH_RUN_FLAGS) \ - docs-prerelease.json ${DOC_OUTPUT_DIR}/library-prerelease + $< ${DOC_OUTPUT_DIR}/library-prerelease -${DOC_OUTPUT_DIR}/library/sitemap.xml : docs.json +${DOC_OUTPUT_DIR}/library/sitemap.xml : $G/docs.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=v${LATEST} $(DPL_DOCS_PATH_RUN_FLAGS) \ - docs.json ${DOC_OUTPUT_DIR}/library + $< ${DOC_OUTPUT_DIR}/library ${DOC_OUTPUT_DIR}/library/.htaccess : dpl_release_htaccess @mkdir -p $(dir $@) @@ -504,40 +505,40 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ +$G/docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DMD_STABLE_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ - > .release-files.txt + > $G/.release-files.txt find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d >> .release-files.txt + sed -e /unittest.d/d -e /gcstub/d >> $G/.release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ - sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt + sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ - -version=MARS -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ - -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt - ${DPL_DOCS} filter docs.json --min-protection=Protected \ + -version=MARS -version=CoreDdoc -version=StdDdoc -Df$G/.release-dummy.html \ + -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt + ${DPL_DOCS} filter $@ --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) - rm .release-files.txt .release-dummy.html + rm $G/.release-files.txt $G/.release-dummy.html # DDox tries to generate the docs for all `.d` files. However for dmd this is tricky, # because the `{mach, elf, mscoff}` are platform dependent. # Thus the need to exclude these files (and the `objc_glue.d` file). -docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ +$G/docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ ${PHOBOS_FILES_GENERATED} | dpl-docs find ${DMD_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d ${DMD_EXCLUDE} \ - > .prerelease-files.txt + > $G/.prerelease-files.txt find ${DRUNTIME_DIR}/src -name '*.d' | sed -e '/gcstub/d' \ - -e /unittest/d >> .prerelease-files.txt + -e /unittest/d >> $G/.prerelease-files.txt find ${PHOBOS_DIR_GENERATED} -name '*.d' | sed -e /unittest.d/d \ - -e /windows/d | sort >> .prerelease-files.txt + -e /windows/d | sort >> $G/.prerelease-files.txt ${DMD} -J$(DMD_DIR)/res -J$(dir $(DMD)) -c -o- -version=MARS -version=CoreDdoc \ - -version=StdDdoc -Df.prerelease-dummy.html \ - -Xfdocs-prerelease.json -I${PHOBOS_DIR_GENERATED} @.prerelease-files.txt - ${DPL_DOCS} filter docs-prerelease.json --min-protection=Protected \ + -version=StdDdoc -Df$G/.prerelease-dummy.html \ + -Xf$@ -I${PHOBOS_DIR_GENERATED} @$G/.prerelease-files.txt + ${DPL_DOCS} filter $@ --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_RELEASE) - rm .prerelease-files.txt .prerelease-dummy.html + rm $G/.prerelease-files.txt $G/.prerelease-dummy.html ################################################################################ # binary targets for DDOX From 3647a5f312d456c502c2d42e29e403ed3501278d Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 02:42:39 +0200 Subject: [PATCH 43/78] Add labels to spec/statement.dd --- spec/statement.dd | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/spec/statement.dd b/spec/statement.dd index 87206c2a75..81aebd1920 100644 --- a/spec/statement.dd +++ b/spec/statement.dd @@ -458,7 +458,7 @@ $(P in the $(PS0). ) -$(H4 Foreach over Arrays) +$(H4 $(LNAME2 foreach_over_arrays, Foreach over Arrays)) $(P If the aggregate is a static or dynamic array, there @@ -505,7 +505,7 @@ foreach (auto n; arr) // error, auto is redundant writeln(n); -------------- -$(H4 Foreach over Arrays of Characters) +$(H4 $(LNAME2 foreach_over_arrays_of_characters, Foreach over Arrays of Characters)) $(P If the aggregate expression is a static or dynamic array of $(D char)s, $(D wchar)s, or $(D dchar)s, then the $(I Type) of @@ -560,7 +560,7 @@ $(CONSOLE 'y' ) -$(H4 Foreach over Associative Arrays) +$(H4 $(LNAME2 foreach_over_associative_arrays, Foreach over Associative Arrays)) $(P If the aggregate expression is an associative array, there can be one or two variables declared. If one, then the variable @@ -586,7 +586,7 @@ foreach (string s, double d; a) } -------------- -$(H4 Foreach over Structs and Classes with opApply) +$(H4 $(LNAME2 foreach_over_struct_and_classes, Foreach over Structs and Classes with opApply)) $(P If the aggregate expression is a struct or class object, the $(D foreach) is defined by the @@ -703,8 +703,8 @@ $(CONSOLE -------------- $(P It is important to make sure that, if $(D opApply) catches any exceptions, that those - exceptions did not originate from the delegate passed to $(I opApply). The user would expect - exceptions thrown from a `foreach` body to both terminate the loop, and propagate outside + exceptions did not originate from the delegate passed to $(I opApply). The user would expect + exceptions thrown from a `foreach` body to both terminate the loop, and propagate outside the `foreach` body. ) @@ -777,7 +777,7 @@ $(H4 $(LEGACY_LNAME2 foreach_with_ranges, foreach-with-ranges, Foreach over Stru } --- -$(H4 Foreach over Delegates) +$(H4 $(LNAME2 foreach_over_delegates, Foreach over Delegates)) $(P If $(I ForeachAggregate) is a delegate, the type signature of the delegate is of the same as for $(D opApply). This enables @@ -820,7 +820,7 @@ void main() that is confusing to read. Therefore, using $(D foreach_reverse) with a delegate is now deprecated, and will be rejected in the future.) -$(H4 Foreach over Tuples) +$(H4 $(LNAME2 foreach_over_tuples, Foreach over Tuples)) $(P If the aggregate expression is a tuple, there @@ -866,7 +866,7 @@ long double ) -$(H4 Foreach Ref Parameters) +$(H4 $(LNAME2 foreach_ref_parameters, Foreach Ref Parameters)) $(P $(D ref) can be used to update the original elements: ) @@ -900,7 +900,7 @@ $(CONSOLE the type of the $(I ForeachAggregate). ) -$(H4 Foreach Restrictions) +$(H4 $(LNAME2 foreach_restrictions, Foreach Restrictions)) $(P The aggregate itself must not be resized, reallocated, free'd, reassigned or destructed @@ -975,7 +975,7 @@ foo0123456789 ) -$(H4 Break and Continue out of Foreach) +$(H4 $(LNAME2 break_and_continue_out_of_foreach, Break and Continue out of Foreach)) $(P A $(GLINK BreakStatement) in the body of the foreach will exit the @@ -1699,7 +1699,7 @@ $(CONSOLE may not exit with a throw, goto, break, continue, or return; nor may it be entered with a goto. -$(H4 Catching C++ Class Objects) +$(H4 $(LNAME2 catching_cpp_class_objects, Catching C++ Class Objects)) $(P On many platforms, catching C++ class objects is supported. From 7b1e803bc1489573f70da214e173dd5e282f8ea5 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Mon, 22 May 2017 21:27:00 -0700 Subject: [PATCH 44/78] Issue 17419 - add __traits(getLinkage, s) to the the linkage of symbol s --- spec/traits.dd | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/spec/traits.dd b/spec/traits.dd index 930936b56b..0fca617035 100644 --- a/spec/traits.dd +++ b/spec/traits.dd @@ -43,6 +43,7 @@ $(GNAME TraitsKeyword): $(GBLINK getAttributes) $(GBLINK getFunctionAttributes) $(GBLINK getFunctionVariadicStyle) + $(GBLINK getLinkage) $(GBLINK getMember) $(GBLINK getOverloads) $(GBLINK getPointerBitmap) @@ -531,6 +532,33 @@ pragma(msg, __traits(getFunctionAttributes, (int x) @trusted { return x * 2; })) --- ) +$(H2 $(GNAME getLinkage)) + + $(P Takes one argument, which is a declaration symbol, or the type of a function, + delegate, or pointer to function. + Returns a string representing the $(LINK2 attribute.html#LinkageAttribute, LinkageAttribute) + of the declaration. + The string is one of: + ) + + $(UL + $(LI $(D "D")) + $(LI $(D "C")) + $(LI $(D "C++")) + $(LI $(D "Windows")) + $(LI $(D "Pascal")) + $(LI $(D "Objective-C")) + $(LI $(D "System")) + ) + +--- +extern (C) int fooc(); +alias aliasc = fooc; + +static assert(__traits(getLinkage, fooc) == "C"); +static assert(__traits(getLinkage, aliasc) == "C"); +--- + $(H2 $(GNAME getMember)) $(P Takes two arguments, the second must be a string. From cb9cf687e2c0496dcc5e523ea886fbaa2cd86b43 Mon Sep 17 00:00:00 2001 From: Laeeth Isharc Date: Thu, 25 May 2017 06:29:38 +0100 Subject: [PATCH 45/78] Update orgs-using-d.dd --- orgs-using-d.dd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/orgs-using-d.dd b/orgs-using-d.dd index 9b0e05fd6a..39af0f5cf4 100644 --- a/orgs-using-d.dd +++ b/orgs-using-d.dd @@ -62,6 +62,7 @@ $(DIVC orgs-using-d center, $(DORG eBay, https://ebay.com, ebay.jpg, One of the world’s largest marketplaces, Large scale data mining tools. + $(HTTPS dlang.org/blog/2017/05/24/faster-command-line-tools-in-d/, Command line tools in D) $(LINK_ROW $(FA_GITHUB eBay/tsv-utils-dlang) ) @@ -112,7 +113,7 @@ $(DIVC orgs-using-d center, $(DORG GNEX, https://globalnet-ex.com, gnex.png, Digital Marketing Solutions Company., $(LINK_ROW - $(FA_GITHUB gnexltd) $(FA_SEPARATOR) + $(FA_GITHUB gnexltd) $(FA_SEPARATOR) $(FA_HIRING globalnet-ex.com/employment/engineer) ) ) @@ -142,7 +143,7 @@ $(DIVC orgs-using-d center, ) $(DORG Sociomantic, https://www.sociomantic.com, sociomantic.png, Real-time personalized advertising, - Key infrastructure in D - main sponsor of D conference 2016. + Key infrastructure in D - main sponsor of D conference 2016 and 2017. $(LINK_ROW $(FA_TALK dconf.org/2016/talks/lucarella.html, DConf talk) $(FA_SEPARATOR) $(FA_HIRING www.sociomantic.com/jobs/d-software-developer) From 1468d0c20be4a5b2b958c1885588a387f4e93e05 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 02:33:17 +0200 Subject: [PATCH 46/78] Add labels to spec/expressions.dd --- spec/expression.dd | 82 +++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/spec/expression.dd b/spec/expression.dd index 1a90ff3475..6936e51746 100644 --- a/spec/expression.dd +++ b/spec/expression.dd @@ -49,7 +49,7 @@ $(GNAME CommaExpression): operand, and the result is the result of the right operand. ) -$(H3 Assign Expressions) +$(H3 $(LNAME2 assign_expressions, Assign Expressions)) $(GRAMMAR $(GNAME AssignExpression): @@ -78,7 +78,7 @@ $(GNAME AssignExpression): $(P The left operand must be an lvalue.) -$(H4 Assignment Operator Expressions) +$(H4 $(LNAME2 assignment_operator_expressions, Assignment Operator Expressions)) $(P Assignment operator expressions, such as: @@ -101,7 +101,7 @@ $(H4 Assignment Operator Expressions) $(LI the left operand of $(D >>>=) does not undergo integral promotions before shifting) ) -$(H3 Conditional Expressions) +$(H3 $(LNAME2 conditional_expressions, Conditional Expressions)) $(GRAMMAR $(GNAME ConditionalExpression): @@ -126,7 +126,7 @@ $(GNAME ConditionalExpression): the result type of the conditional expression. ) -$(H3 OrOr Expressions) +$(H3 $(LNAME2 oror_expressions, OrOr Expressions)) $(GRAMMAR $(GNAME OrOrExpression): @@ -154,7 +154,7 @@ $(GNAME OrOrExpression): expression is the right operand converted to type $(D bool). ) -$(H3 AndAnd Expressions) +$(H3 $(LNAME2 andand_expressions, AndAnd Expressions)) $(GRAMMAR $(GNAME AndAndExpression): @@ -182,7 +182,7 @@ $(GNAME AndAndExpression): expression is the right operand converted to type $(D bool). ) -$(H3 Bitwise Expressions) +$(H3 $(LNAME2 bitwise_expressions, Bitwise Expressions)) $(P Bit wise expressions perform a bitwise operation on their operands. Their operands must be integral types. @@ -190,7 +190,7 @@ $(H3 Bitwise Expressions) operation is done. ) -$(H4 Or Expressions) +$(H4 $(LNAME2 or_expressions, Or Expressions)) $(GRAMMAR $(GNAME OrExpression): @@ -200,7 +200,7 @@ $(GNAME OrExpression): $(P The operands are OR'd together.) -$(H4 Xor Expressions) +$(H4 $(LNAME2 xor_expressions, Xor Expressions)) $(GRAMMAR $(GNAME XorExpression): @@ -210,7 +210,7 @@ $(GNAME XorExpression): $(P The operands are XOR'd together.) -$(H4 And Expressions) +$(H4 $(LNAME2 and_expressions, And Expressions)) $(GRAMMAR $(GNAME AndExpression): @@ -220,7 +220,7 @@ $(GNAME AndExpression): $(P The operands are AND'd together.) -$(H3 Compare Expressions) +$(H3 $(LNAME2 compare_expressions, Compare Expressions)) $(GRAMMAR $(GNAME CmpExpression): @@ -231,7 +231,7 @@ $(GNAME CmpExpression): $(GLINK InExpression) ) -$(H3 Equality Expressions) +$(H3 $(LNAME2 equality_expressions, Equality Expressions)) $(GRAMMAR $(GNAME EqualExpression): @@ -306,7 +306,7 @@ $(GNAME EqualExpression): matching, and all the elements are equal. ) -$(H4 Identity Expressions) +$(H4 $(LNAME2 identity_expressions, Identity Expressions)) $(GRAMMAR $(GNAME IdentityExpression): @@ -341,7 +341,7 @@ $(GNAME IdentityExpression): $(P The identity operator $(D is) cannot be overloaded. ) -$(H3 Relational Expressions) +$(H3 $(LNAME2 relation_expressions, Relational Expressions)) $(GRAMMAR $(GNAME RelExpression): @@ -381,7 +381,7 @@ $(GNAME RelExpression): longer array. ) -$(H4 Integer comparisons) +$(H4 $(LNAME2 integer_comparisons, Integer comparisons)) $(P Integer comparisons happen when both operands are integral types. @@ -465,7 +465,7 @@ $(H4 $(LEGACY_LNAME2 class_comparisons, class-comparisons, Class comparisons)) --- ) -$(H3 In Expressions) +$(H3 $(LNAME2 in_expressions, In Expressions)) $(GRAMMAR $(GNAME InExpression): @@ -495,7 +495,7 @@ $(GNAME InExpression): operation. ) -$(H3 Shift Expressions) +$(H3 $(LNAME2 shift_expressions, Shift Expressions)) $(GRAMMAR $(GNAME ShiftExpression): @@ -525,7 +525,7 @@ $(GNAME ShiftExpression): ------------- ) -$(H3 Add Expressions) +$(H3 $(LNAME2 add_expressions, Add Expressions)) $(GRAMMAR $(GNAME AddExpression): @@ -577,7 +577,7 @@ $(GNAME AddExpression): $(P Add expressions for floating point operands are not associative. ) -$(H3 Cat Expressions) +$(H3 $(LNAME2 cat_expressions, Cat Expressions)) $(GRAMMAR $(GNAME CatExpression): @@ -592,7 +592,7 @@ $(GNAME CatExpression): and then the concatenation is performed. ) -$(H3 Mul Expressions) +$(H3 $(LNAME2 mul_expressions, Mul Expressions)) $(GRAMMAR $(GNAME MulExpression): @@ -647,7 +647,7 @@ $(GNAME UnaryExpression): $(GLINK PowExpression) ) -$(H4 Complement Expressions) +$(H4 $(LNAME2 complement_expressions, Complement Expressions)) $(GRAMMAR $(GNAME ComplementExpression): @@ -662,7 +662,7 @@ $(GNAME ComplementExpression): prior to the complement operation. ) -$(H4 New Expressions) +$(H4 $(LNAME2 new_expressions, New Expressions)) $(GRAMMAR $(GNAME NewExpression): @@ -741,7 +741,7 @@ $(GNAME ArgumentList): or using the class specific allocator. ) -$(H4 Delete Expressions) +$(H4 $(LNAME2 delete_expressions, Delete Expressions)) $(GRAMMAR $(GNAME DeleteExpression): @@ -783,7 +783,7 @@ $(GNAME DeleteExpression): is called. ) -$(H4 Cast Expressions) +$(H4 $(LNAME2 cast_expressions, Cast Expressions)) $(GRAMMAR $(GNAME CastExpression): @@ -944,7 +944,7 @@ $(GNAME CastExpression): ---- ) -$(H3 Pow Expressions) +$(H3 $(LNAME2 pow_expressions, Pow Expressions)) $(GRAMMAR $(GNAME PowExpression): @@ -956,7 +956,7 @@ $(GNAME PowExpression): right operand. ) -$(H3 Postfix Expressions) +$(H3 $(LNAME2 postfix_expressions, Postfix Expressions)) $(GRAMMAR $(GNAME PostfixExpression): @@ -972,7 +972,7 @@ $(GNAME PostfixExpression): $(GLINK SliceExpression) ) -$(H3 Index Expressions) +$(H3 $(LNAME2 index_expressions, Index Expressions)) $(GRAMMAR $(GNAME IndexExpression): @@ -1002,7 +1002,7 @@ $(GNAME IndexExpression): It is an error if $(I n) is out of bounds of the $(I ExpressionTuple). ) -$(H3 Slice Expressions) +$(H3 $(LNAME2 slice_expressions, Slice Expressions)) $(GRAMMAR $(GNAME SliceExpression): @@ -1108,7 +1108,7 @@ $(GNAME Slice): bounds are out of range. ) -$(H3 Primary Expressions) +$(H3 $(LNAME2 primary_expressions, Primary Expressions)) $(GRAMMAR $(GNAME PrimaryExpression): @@ -1145,7 +1145,7 @@ $(GNAME PrimaryExpression): $(GLINK2 traits, SpecialKeyword) ) -$(H4 .Identifier) +$(H4 $(LNAME2 identifier, .Identifier)) $(P $(IDENTIFIER) is looked up at module scope, rather than the current lexically nested scope. @@ -1213,7 +1213,7 @@ $(H4 $(LNAME2 null, null)) but no longer exact. ) -$(H4 true, false) +$(H4 $(LNAME2 true_false, true, false)) $(P These are of type $(D bool) and when cast to another integral type become the values 1 and 0, @@ -1230,7 +1230,7 @@ $(H4 $(LEGACY_LNAME2 CharacterLiteral, character-literal, Character Literals)) will fit into. ) -$(H4 String Literals) +$(H4 $(LNAME2 string_literals, String Literals)) $(GRAMMAR $(GNAME StringLiterals): @@ -1283,7 +1283,7 @@ $(GNAME StringLiterals): string literal. ) -$(H4 Array Literals) +$(H4 $(LNAME2 array_literals, Array Literals)) $(GRAMMAR $(GNAME ArrayLiteral): @@ -1380,7 +1380,7 @@ $(GNAME ArrayLiteral): In other words, casting literal expression will change the literal type. ) -$(H4 Associative Array Literals) +$(H4 $(LNAME2 associative_array_literals, Associative Array Literals)) $(GRAMMAR $(GNAME AssocArrayLiteral): @@ -1425,7 +1425,7 @@ $(GNAME ValueExpression): are inserted as arguments in place of the tuple. ) -$(H4 Function Literals) +$(H4 $(LNAME2 function_literals, Function Literals)) $(GRAMMAR $(GNAME FunctionLiteral): @@ -1584,7 +1584,7 @@ $(GNAME FunctionLiteralBody): function, a function literal cannot. ) -$(H4 Lambdas) +$(H4 $(LNAME2 lambdas, Lambdas)) $(GRAMMAR $(GNAME Lambda): @@ -1630,7 +1630,7 @@ $(GNAME Lambda): --- ) -$(H4 Uniform construction syntax for built-in scalar types) +$(H4 $(LNAME2 uniform_construction_syntax, Uniform construction syntax for built-in scalar types)) $(P The implicit conversions of built-in scalar types can be explicitly represented by using function call syntax. For example: @@ -1653,7 +1653,7 @@ $(H4 Uniform construction syntax for built-in scalar types) ) -$(H4 Assert Expressions) +$(H4 $(LNAME2 assert_expressions, Assert Expressions)) $(GRAMMAR $(GNAME AssertExpression): @@ -1725,7 +1725,7 @@ Error: AssertError Failure test.d(3) an error message ) ) -$(H4 Mixin Expressions) +$(H4 $(LNAME2 mixin_expressions, Mixin Expressions)) $(GRAMMAR $(GNAME MixinExpression): @@ -1745,7 +1745,7 @@ $(GNAME MixinExpression): --- ) -$(H4 Import Expressions) +$(H4 $(LNAME2 import_expressions, Import Expressions)) $(GRAMMAR $(GNAME ImportExpression): @@ -1778,7 +1778,7 @@ $(GNAME ImportExpression): --- ) -$(H4 Typeid Expressions) +$(H4 $(LNAME2 typeid_expressions, Typeid Expressions)) $(GRAMMAR $(GNAME TypeidExpression): @@ -1817,7 +1817,7 @@ $(GNAME TypeidExpression): --- ) -$(H4 IsExpression) +$(H4 $(LNAME2 is_expression, IsExpression)) $(GRAMMAR $(GNAME IsExpression): From 64e53a26c88698773acc8676c6dea77bab25e38d Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 16:21:28 +0200 Subject: [PATCH 47/78] Deprecate.dd: clear error column for sort/remove deprecation --- deprecate.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deprecate.dd b/deprecate.dd index c1e076a8c5..0571b35547 100644 --- a/deprecate.dd +++ b/deprecate.dd @@ -16,7 +16,7 @@ $(SPEC_S Deprecated Features, $(TROW $(DEPLINK scope for allocating classes on the stack), future,  ,  ,  ) $(TROW $(DEPLINK Imaginary and complex types), future,  ,  ,  ) $(TROW $(DEPLINK Implicit catch statement), 2.072, 2.072, future, future ) - $(TROW $(DEPLINK .sort and .reverse properties for arrays), ?, 2.072;, 2.075;, 2.075) + $(TROW $(DEPLINK .sort and .reverse properties for arrays), ?, 2.072,  , 2.075) $(TROW $(DEPLINK C-style array pointers), ?, 2.072;,  ,  ) $(TROW $(DEPLINK Floating point NCEG operators), ?, 2.066, 2.072,  ) $(TROW $(DEPLINK clear), 2.060, 2.066,  , 2.068 ) From 23d4c1c549e5f96d8fb73710dc4721fe8a8f2c95 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 16:28:02 +0200 Subject: [PATCH 48/78] Add labels to SECTION2 in spec/cpp_interface --- spec/cpp_interface.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/cpp_interface.dd b/spec/cpp_interface.dd index 9b1b653982..d4432d0bb4 100644 --- a/spec/cpp_interface.dd +++ b/spec/cpp_interface.dd @@ -750,7 +750,7 @@ $(H2 $(LNAME2 exception-handling, Exception Handling)) directly in C++ code (but they will be throwable indirectly by calling into a D function with C++ linkage).) -$(SECTION2 Comparing D Immutable and Const with C++ Const, +$(SECTION2 $(LNAME2 comparing-d-immutable-and-const-with-cpp-const, Comparing D Immutable and Const with C++ Const), $(TABLE_SPECIAL $(ARGS Const, Immutable Comparison), $(THEAD Feature, D, C++98) From 353c40738b186c6b6350637d24e80b3d179f74e4 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 18:13:34 +0200 Subject: [PATCH 49/78] Rename DMD_REL to DMD_STABLE --- posix.mak | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/posix.mak b/posix.mak index f56832b0e9..761e28ff15 100644 --- a/posix.mak +++ b/posix.mak @@ -40,7 +40,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_REL=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd +DMD_STABLE=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} @@ -369,7 +369,7 @@ ${DMD_DIR} ${DRUNTIME_DIR} ${PHOBOS_DIR} ${TOOLS_DIR} ${INSTALLER_DIR}: $(DMD) : ${DMD_DIR} ${MAKE} --directory=${DMD_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 -$(DMD_REL) : ${DMD_STABLE_DIR} +$(DMD_STABLE) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) @@ -405,9 +405,9 @@ druntime-prerelease : ${DRUNTIME_DIR} $(DMD) $(STD_DDOC_PRE) DOCDIR=${DOC_OUTPUT_DIR}/phobos-prerelease \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC_PRE))" -druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_REL) $(STD_DDOC) +druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_STABLE) $(STD_DDOC) ${MAKE} --directory=${DRUNTIME_STABLE_DIR} -f posix.mak target doc \ - DMD=$(DMD_REL) \ + DMD=$(DMD_STABLE) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC))" @@ -437,10 +437,10 @@ phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prereleas VERSION="$(realpath ${DMD_DIR}/VERSION)" \ html -phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_REL) $(STD_DDOC) \ +phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) \ druntime-release dmd-release ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(realpath ${DMD_REL}) \ + DMD=$(realpath ${DMD_STABLE}) \ DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ @@ -505,7 +505,7 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -$G/docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ +$G/docs.json : ${DMD} ${DMD_STABLE} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DMD_STABLE_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ @@ -514,7 +514,7 @@ $G/docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ sed -e /unittest.d/d -e /gcstub/d >> $G/.release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt - ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ + ${DMD_STABLE} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_STABLE)) -c -o- -version=CoreDdoc \ -version=MARS -version=CoreDdoc -version=StdDdoc -Df$G/.release-dummy.html \ -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt ${DPL_DOCS} filter $@ --min-protection=Protected \ From 2b0ca63b8439343a3052e3f52b080c70e252f464 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 17:15:12 +0200 Subject: [PATCH 50/78] Ignore empty files (i.e. from publictests) in the assert-rewrite pipeline --- assert_writeln_magic.d | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assert_writeln_magic.d b/assert_writeln_magic.d index b770c113ff..e386ac81f1 100755 --- a/assert_writeln_magic.d +++ b/assert_writeln_magic.d @@ -188,6 +188,9 @@ void parseFile(string fileName, string destFile) warningf("%s is empty", inFile.name); ubyte[] sourceCode = uninitializedArray!(ubyte[])(to!size_t(inFile.size)); + if (sourceCode.length == 0) + return; + inFile.rawRead(sourceCode); LexerConfig config; auto cache = StringCache(StringCache.defaultBucketCount); From a76812bced92331236ce2942d626587297d14865 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 17:15:38 +0200 Subject: [PATCH 51/78] Upgrade DUB dependencies for dpl-docs --- dpl-docs/dub.selections.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dpl-docs/dub.selections.json b/dpl-docs/dub.selections.json index e56873d3b2..40f28fb8c7 100644 --- a/dpl-docs/dub.selections.json +++ b/dpl-docs/dub.selections.json @@ -4,11 +4,11 @@ "ddox": "0.15.18", "experimental_allocator": "2.70.0-b1", "hyphenate": "1.1.1", - "libasync": "0.7.9", - "libdparse": "0.7.0-beta.2", + "libasync": "0.8.3", + "libdparse": "0.7.0", "libev": "5.0.0+4.04", "libevent": "2.0.2+2.0.16", - "memutils": "0.4.8", - "vibe-d": "0.7.30" + "memutils": "0.4.9", + "vibe-d": "0.7.31" } } From d02045747db953d021649f222e07c71c0705dbb0 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 17:16:02 +0200 Subject: [PATCH 52/78] Fix Issue 17469 - View source code for object.d is broken --- dpl-docs/views/layout.dt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpl-docs/views/layout.dt b/dpl-docs/views/layout.dt index 90f745929a..128556c474 100644 --- a/dpl-docs/views/layout.dt +++ b/dpl-docs/views/layout.dt @@ -163,7 +163,7 @@ html(lang='en-US') - string project = "dlang.org"; - string path_prefix, line_suffix, filename; - if( modname ) - - if( modname.startsWith("core.") ) + - if( modname.startsWith("core.") || modname.startsWith("object")) - project = "druntime", path_prefix = "src/"; - else if( modname.startsWith("dmd.") || modname.startsWith("ddmd.") ) - project = "dmd", path_prefix = "src/"; From 189888442a346bfc974eed0de978763e0d50ac00 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Wed, 7 Jun 2017 23:33:19 +0000 Subject: [PATCH 53/78] Revert "Rename DMD_REL to DMD_STABLE" This reverts commit 353c40738b186c6b6350637d24e80b3d179f74e4. --- posix.mak | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/posix.mak b/posix.mak index 503f958e83..ac8c62fc30 100644 --- a/posix.mak +++ b/posix.mak @@ -40,7 +40,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_STABLE=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd +DMD_REL=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} @@ -371,7 +371,7 @@ ${DMD_DIR} ${DRUNTIME_DIR} ${PHOBOS_DIR} ${TOOLS_DIR} ${INSTALLER_DIR}: $(DMD) : ${DMD_DIR} ${MAKE} --directory=${DMD_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 -$(DMD_STABLE) : ${DMD_STABLE_DIR} +$(DMD_REL) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) @@ -407,9 +407,9 @@ druntime-prerelease : ${DRUNTIME_DIR} $(DMD) $(STD_DDOC_PRE) DOCDIR=${DOC_OUTPUT_DIR}/phobos-prerelease \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC_PRE))" -druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_STABLE) $(STD_DDOC) +druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_REL) $(STD_DDOC) ${MAKE} --directory=${DRUNTIME_STABLE_DIR} -f posix.mak target doc \ - DMD=$(DMD_STABLE) \ + DMD=$(DMD_REL) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC))" @@ -439,10 +439,10 @@ phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prereleas VERSION="$(realpath ${DMD_DIR}/VERSION)" \ html -phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) \ +phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_REL) $(STD_DDOC) \ druntime-release dmd-release ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(realpath ${DMD_STABLE}) \ + DMD=$(realpath ${DMD_REL}) \ DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ @@ -507,7 +507,7 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -$G/docs.json : ${DMD} ${DMD_STABLE} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ +$G/docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DMD_STABLE_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ @@ -516,7 +516,7 @@ $G/docs.json : ${DMD} ${DMD_STABLE} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ sed -e /unittest.d/d -e /gcstub/d >> $G/.release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt - ${DMD_STABLE} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_STABLE)) -c -o- -version=CoreDdoc \ + ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ -version=MARS -version=CoreDdoc -version=StdDdoc -Df$G/.release-dummy.html \ -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt ${DPL_DOCS} filter $@ --min-protection=Protected \ From 05ebca4cb5d9433b353fac3fd517d1aced598912 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Wed, 7 Jun 2017 23:33:34 +0000 Subject: [PATCH 54/78] Revert "Move generated docs{,-prerelease}.json to $GENERATED" This reverts commit 0548d3af1b8cc8f16056613cab0787678e936294. --- .gitignore | 2 ++ posix.mak | 45 ++++++++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index b9718d5bca..0b30bb3735 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,8 @@ css/cssmenu.css *.min.* deleteme.* +docs-prerelease.json +docs.json .dub/ dpl-docs/dpl-docs modlist-release.ddoc diff --git a/posix.mak b/posix.mak index ac8c62fc30..31f3fb00b1 100644 --- a/posix.mak +++ b/posix.mak @@ -47,7 +47,6 @@ PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} ################################################################################ # Automatically generated directories GENERATED=.generated -G=$(GENERATED) PHOBOS_DIR_GENERATED=$(GENERATED)/phobos-prerelease PHOBOS_STABLE_DIR_GENERATED=$(GENERATED)/phobos-release # The assert_writeln_magic tool transforms all source files from Phobos. Hence @@ -473,24 +472,24 @@ ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim : verbatim.ddoc \ apidocs-prerelease : ${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml ${DOC_OUTPUT_DIR}/library-prerelease/.htaccess apidocs-release : ${DOC_OUTPUT_DIR}/library/sitemap.xml ${DOC_OUTPUT_DIR}/library/.htaccess -apidocs-serve : $G/docs-prerelease.json +apidocs-serve : docs-prerelease.json ${DPL_DOCS} serve-html --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ - --git-target=master --web-file-dir=. $< + --git-target=master --web-file-dir=. docs-prerelease.json -${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : $G/docs-prerelease.json +${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : docs-prerelease.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=master $(DPL_DOCS_PATH_RUN_FLAGS) \ - $< ${DOC_OUTPUT_DIR}/library-prerelease + docs-prerelease.json ${DOC_OUTPUT_DIR}/library-prerelease -${DOC_OUTPUT_DIR}/library/sitemap.xml : $G/docs.json +${DOC_OUTPUT_DIR}/library/sitemap.xml : docs.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=v${LATEST} $(DPL_DOCS_PATH_RUN_FLAGS) \ - $< ${DOC_OUTPUT_DIR}/library + docs.json ${DOC_OUTPUT_DIR}/library ${DOC_OUTPUT_DIR}/library/.htaccess : dpl_release_htaccess @mkdir -p $(dir $@) @@ -507,40 +506,40 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -$G/docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ +docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DMD_STABLE_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ - > $G/.release-files.txt + > .release-files.txt find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d >> $G/.release-files.txt + sed -e /unittest.d/d -e /gcstub/d >> .release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ - sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt + sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ - -version=MARS -version=CoreDdoc -version=StdDdoc -Df$G/.release-dummy.html \ - -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt - ${DPL_DOCS} filter $@ --min-protection=Protected \ + -version=MARS -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ + -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt + ${DPL_DOCS} filter docs.json --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) - rm $G/.release-files.txt $G/.release-dummy.html + rm .release-files.txt .release-dummy.html # DDox tries to generate the docs for all `.d` files. However for dmd this is tricky, # because the `{mach, elf, mscoff}` are platform dependent. # Thus the need to exclude these files (and the `objc_glue.d` file). -$G/docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ +docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ ${PHOBOS_FILES_GENERATED} | dpl-docs find ${DMD_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d ${DMD_EXCLUDE} \ - > $G/.prerelease-files.txt + > .prerelease-files.txt find ${DRUNTIME_DIR}/src -name '*.d' | sed -e '/gcstub/d' \ - -e /unittest/d >> $G/.prerelease-files.txt + -e /unittest/d >> .prerelease-files.txt find ${PHOBOS_DIR_GENERATED} -name '*.d' | sed -e /unittest.d/d \ - -e /windows/d | sort >> $G/.prerelease-files.txt + -e /windows/d | sort >> .prerelease-files.txt ${DMD} -J$(DMD_DIR)/res -J$(dir $(DMD)) -c -o- -version=MARS -version=CoreDdoc \ - -version=StdDdoc -Df$G/.prerelease-dummy.html \ - -Xf$@ -I${PHOBOS_DIR_GENERATED} @$G/.prerelease-files.txt - ${DPL_DOCS} filter $@ --min-protection=Protected \ + -version=StdDdoc -Df.prerelease-dummy.html \ + -Xfdocs-prerelease.json -I${PHOBOS_DIR_GENERATED} @.prerelease-files.txt + ${DPL_DOCS} filter docs-prerelease.json --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_RELEASE) - rm $G/.prerelease-files.txt $G/.prerelease-dummy.html + rm .prerelease-files.txt .prerelease-dummy.html ################################################################################ # binary targets for DDOX From f0d43256bd0df1b11864cf0f8a18eefdac037417 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Wed, 7 Jun 2017 23:33:42 +0000 Subject: [PATCH 55/78] Revert "Add DMD to the release pages of Ddoc and Ddox" This reverts commit da87ad59509c7cf80d07de8246c6bf3bcfc7aec5. --- posix.mak | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/posix.mak b/posix.mak index 31f3fb00b1..d9fbe39e15 100644 --- a/posix.mak +++ b/posix.mak @@ -40,7 +40,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_REL=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd +DMD_REL=$(DMD_STABLE_DIR)/src/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} @@ -218,10 +218,10 @@ ${GENERATED}/${LATEST}.ddoc : mkdir -p $(dir $@) echo "LATEST=${LATEST}" >$@ -${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) +${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) mkdir -p $(dir $@) - $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ - $(addprefix --dump , object std etc core ddmd) >$@ + $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ + $(addprefix --dump , object std etc core) >$@ ${GENERATED}/modlist-prerelease.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_DIR) $(PHOBOS_DIR) mkdir -p $(dir $@) @@ -374,7 +374,7 @@ $(DMD_REL) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_STABLE_DIR) -f posix.mak html \ + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos" \ DOCSRC="$(realpath .)" @@ -439,15 +439,16 @@ phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prereleas html phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_REL) $(STD_DDOC) \ - druntime-release dmd-release + druntime-release ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(realpath ${DMD_REL}) \ + DMD=$(DMD_REL) \ DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ DRUNTIME_PATH="$(realpath ${DRUNTIME_DIR})" \ + DMD="$(realpath ${DMD})" \ DOCSRC="$(realpath .)" \ - VERSION="$(realpath ${DMD_STABLE_DIR}/VERSION)" \ + VERSION="$(realpath ${DMD_DIR}/VERSION)" \ html phobos-prerelease-verbatim : ${PHOBOS_FILES_GENERATED} ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim @@ -506,17 +507,13 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -docs.json : ${DMD} ${DMD_REL} ${DMD_STABLE_DIR} ${DRUNTIME_STABLE_DIR} \ +docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs - find ${DMD_STABLE_DIR}/src -name '*.d' | \ - sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ - > .release-files.txt find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d >> .release-files.txt + sed -e /unittest.d/d -e /gcstub/d > .release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt - ${DMD_REL} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_REL)) -c -o- -version=CoreDdoc \ - -version=MARS -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ + ${DMD_REL} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt ${DPL_DOCS} filter docs.json --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) From d5dadfde1be1f3cc107ff13fd25e2ce0c0343989 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 8 Jun 2017 04:47:27 +0200 Subject: [PATCH 56/78] Add new __traits to the D grammar spec --- spec/grammar.dd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/grammar.dd b/spec/grammar.dd index 7f923bbfcd..102c44c52e 100644 --- a/spec/grammar.dd +++ b/spec/grammar.dd @@ -481,6 +481,7 @@ $(GNAME TraitsKeyword): $(TRAITS_LINK2 isFinalFunction) $(TRAITS_LINK2 isStaticFunction) $(TRAITS_LINK2 isOverrideFunction) + $(TRAITS_LINK2 isTemplate) $(TRAITS_LINK2 isRef) $(TRAITS_LINK2 isOut) $(TRAITS_LINK2 isLazy) @@ -489,8 +490,11 @@ $(GNAME TraitsKeyword): $(TRAITS_LINK2 getAliasThis) $(TRAITS_LINK2 getAttributes) $(TRAITS_LINK2 getFunctionAttributes) + $(TRAITS_LINK2 getFunctionVariadicStyle) + $(TRAITS_LINK2 getLinkage) $(TRAITS_LINK2 getMember) $(TRAITS_LINK2 getOverloads) + $(TRAITS_LINK2 getParameterStorageClasses) $(TRAITS_LINK2 getPointerBitmap) $(TRAITS_LINK2 getProtection) $(TRAITS_LINK2 getVirtualFunctions) From 0c589a595cffd6a9b7f682371695afb54b54e310 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Mon, 5 Jun 2017 18:13:34 +0200 Subject: [PATCH 57/78] Rename DMD_REL to DMD_STABLE v2 --- posix.mak | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/posix.mak b/posix.mak index d9fbe39e15..f9d812904d 100644 --- a/posix.mak +++ b/posix.mak @@ -40,7 +40,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_REL=$(DMD_STABLE_DIR)/src/dmd +DMD_STABLE=$(DMD_STABLE_DIR)/src/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} @@ -370,7 +370,7 @@ ${DMD_DIR} ${DRUNTIME_DIR} ${PHOBOS_DIR} ${TOOLS_DIR} ${INSTALLER_DIR}: $(DMD) : ${DMD_DIR} ${MAKE} --directory=${DMD_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 -$(DMD_REL) : ${DMD_STABLE_DIR} +$(DMD_STABLE) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) @@ -406,9 +406,9 @@ druntime-prerelease : ${DRUNTIME_DIR} $(DMD) $(STD_DDOC_PRE) DOCDIR=${DOC_OUTPUT_DIR}/phobos-prerelease \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC_PRE))" -druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_REL) $(STD_DDOC) +druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_STABLE) $(STD_DDOC) ${MAKE} --directory=${DRUNTIME_STABLE_DIR} -f posix.mak target doc \ - DMD=$(DMD_REL) \ + DMD=$(DMD_STABLE) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC))" @@ -438,10 +438,10 @@ phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prereleas VERSION="$(realpath ${DMD_DIR}/VERSION)" \ html -phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_REL) $(STD_DDOC) \ +phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) \ druntime-release ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(DMD_REL) \ + DMD=$(DMD_STABLE) \ DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ @@ -507,13 +507,13 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ +docs.json : ${DMD_STABLE} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ sed -e /unittest.d/d -e /gcstub/d > .release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt - ${DMD_REL} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ + ${DMD_STABLE} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt ${DPL_DOCS} filter docs.json --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) From 12fbc71715cfc38ae794280e8af456e23314faab Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Wed, 7 Jun 2017 03:31:03 +0200 Subject: [PATCH 58/78] Move generated docs{,-prerelease}.json to $GENERATED v2 --- .gitignore | 2 -- posix.mak | 41 +++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 0b30bb3735..b9718d5bca 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,6 @@ css/cssmenu.css *.min.* deleteme.* -docs-prerelease.json -docs.json .dub/ dpl-docs/dpl-docs modlist-release.ddoc diff --git a/posix.mak b/posix.mak index d9fbe39e15..e318ae30e2 100644 --- a/posix.mak +++ b/posix.mak @@ -47,6 +47,7 @@ PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} ################################################################################ # Automatically generated directories GENERATED=.generated +G=$(GENERATED) PHOBOS_DIR_GENERATED=$(GENERATED)/phobos-prerelease PHOBOS_STABLE_DIR_GENERATED=$(GENERATED)/phobos-release # The assert_writeln_magic tool transforms all source files from Phobos. Hence @@ -473,24 +474,24 @@ ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim : verbatim.ddoc \ apidocs-prerelease : ${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml ${DOC_OUTPUT_DIR}/library-prerelease/.htaccess apidocs-release : ${DOC_OUTPUT_DIR}/library/sitemap.xml ${DOC_OUTPUT_DIR}/library/.htaccess -apidocs-serve : docs-prerelease.json +apidocs-serve : $G/docs-prerelease.json ${DPL_DOCS} serve-html --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ - --git-target=master --web-file-dir=. docs-prerelease.json + --git-target=master --web-file-dir=. $< -${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : docs-prerelease.json +${DOC_OUTPUT_DIR}/library-prerelease/sitemap.xml : $G/docs-prerelease.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=master $(DPL_DOCS_PATH_RUN_FLAGS) \ - docs-prerelease.json ${DOC_OUTPUT_DIR}/library-prerelease + $< ${DOC_OUTPUT_DIR}/library-prerelease -${DOC_OUTPUT_DIR}/library/sitemap.xml : docs.json +${DOC_OUTPUT_DIR}/library/sitemap.xml : $G/docs.json @mkdir -p $(dir $@) ${DPL_DOCS} generate-html --file-name-style=lowerUnderscored --std-macros=html.ddoc --std-macros=dlang.org.ddoc --std-macros=std.ddoc --std-macros=macros.ddoc --std-macros=std-ddox.ddoc \ --override-macros=std-ddox-override.ddoc --package-order=std \ --git-target=v${LATEST} $(DPL_DOCS_PATH_RUN_FLAGS) \ - docs.json ${DOC_OUTPUT_DIR}/library + $< ${DOC_OUTPUT_DIR}/library ${DOC_OUTPUT_DIR}/library/.htaccess : dpl_release_htaccess @mkdir -p $(dir $@) @@ -507,36 +508,36 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ +$G/docs.json : ${DMD_REL} ${DRUNTIME_STABLE_DIR} \ ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d > .release-files.txt + sed -e /unittest.d/d -e /gcstub/d > $G/.release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ - sed -e /unittest.d/d -e /windows/d | sort >> .release-files.txt + sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt ${DMD_REL} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ - -Xfdocs.json -I${PHOBOS_STABLE_DIR_GENERATED} @.release-files.txt - ${DPL_DOCS} filter docs.json --min-protection=Protected \ + -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt + ${DPL_DOCS} filter $@ --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) - rm .release-files.txt .release-dummy.html + rm -f $G/.release-files.txt $G/.release-dummy.html # DDox tries to generate the docs for all `.d` files. However for dmd this is tricky, # because the `{mach, elf, mscoff}` are platform dependent. # Thus the need to exclude these files (and the `objc_glue.d` file). -docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ +$G/docs-prerelease.json : ${DMD} ${DMD_DIR} ${DRUNTIME_DIR} \ ${PHOBOS_FILES_GENERATED} | dpl-docs find ${DMD_DIR}/src -name '*.d' | \ sed -e /mscoff/d -e /objc_glue.d/d ${DMD_EXCLUDE} \ - > .prerelease-files.txt + > $G/.prerelease-files.txt find ${DRUNTIME_DIR}/src -name '*.d' | sed -e '/gcstub/d' \ - -e /unittest/d >> .prerelease-files.txt + -e /unittest/d >> $G/.prerelease-files.txt find ${PHOBOS_DIR_GENERATED} -name '*.d' | sed -e /unittest.d/d \ - -e /windows/d | sort >> .prerelease-files.txt + -e /windows/d | sort >> $G/.prerelease-files.txt ${DMD} -J$(DMD_DIR)/res -J$(dir $(DMD)) -c -o- -version=MARS -version=CoreDdoc \ - -version=StdDdoc -Df.prerelease-dummy.html \ - -Xfdocs-prerelease.json -I${PHOBOS_DIR_GENERATED} @.prerelease-files.txt - ${DPL_DOCS} filter docs-prerelease.json --min-protection=Protected \ + -version=StdDdoc -Df$G/.prerelease-dummy.html \ + -Xf$@ -I${PHOBOS_DIR_GENERATED} @$G/.prerelease-files.txt + ${DPL_DOCS} filter $@ --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_RELEASE) - rm .prerelease-files.txt .prerelease-dummy.html + rm -f $G/.prerelease-files.txt $G/.prerelease-dummy.html ################################################################################ # binary targets for DDOX From 4129e45951a56c90a7245b41d0ca01c23fa8206d Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 9 Jun 2017 09:51:19 +0200 Subject: [PATCH 59/78] Unify DDoc Makefile build variables --- posix.mak | 110 ++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 58 deletions(-) diff --git a/posix.mak b/posix.mak index ba5506ea90..8e5ed75b84 100644 --- a/posix.mak +++ b/posix.mak @@ -10,6 +10,7 @@ # include osmodel.mak +PWD=$(shell pwd) # Latest released version ifeq (,${LATEST}) @@ -19,19 +20,19 @@ endif NEXT_VERSION:=$(shell bash -c 'version=$$(cat VERSION);a=($${version//./ });a[1]="10\#$${a[1]}";((a[1]++)); a[2]=0; echo $${a[0]}.0$${a[1]}.$${a[2]};' ) # DLang directories -DMD_DIR=../dmd -PHOBOS_DIR=../phobos -DRUNTIME_DIR=../druntime -TOOLS_DIR=../tools -INSTALLER_DIR=../installer -DUB_DIR=../dub-${DUB_VER} +DMD_DIR=$(PWD)/../dmd +PHOBOS_DIR=$(PWD)/../phobos +DRUNTIME_DIR=$(PWD)/../druntime +TOOLS_DIR=$(PWD)/../tools +INSTALLER_DIR=$(PWD)/../installer +DUB_DIR=$(PWD)/../dub-${DUB_VER} # External binaries DMD=$(DMD_DIR)/generated/$(OS)/release/$(MODEL)/dmd DUB=${DUB_DIR}/bin/dub # External directories -DOC_OUTPUT_DIR:=$(shell pwd)/web +DOC_OUTPUT_DIR:=$(PWD)/web GIT_HOME=https://github.com/dlang DPL_DOCS_PATH=dpl-docs DPL_DOCS=$(DPL_DOCS_PATH)/dpl-docs @@ -106,6 +107,31 @@ else CHANGELOG_VERSION_STABLE := "v${LATEST}..upstream/stable" endif +################################################################################ +# Ddoc build variables +################################################################################ +DDOC_VARS_STABLE=\ + DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos" \ + STDDOC="$(addprefix $(PWD)/, $(STD_DDOC))" \ + DMD="$(DMD_STABLE)" \ + DRUNTIME_PATH="${DRUNTIME_DIR}" \ + DOCSRC="$(PWD)" \ + VERSION="${DMD_DIR}/VERSION" + +DDOC_VARS=\ + DMD="${DMD}" \ + DRUNTIME_PATH="${DRUNTIME_DIR}" \ + DOCSRC="$(PWD)" \ + VERSION="${DMD_DIR}/VERSION" + +DDOC_VARS_HTML=$(DDOC_VARS) \ + DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos-prerelease" \ + STDDOC="$(addprefix $(PWD)/, $(STD_DDOC_PRE))" + +DDOC_VARS_VERBATIM=$(DDOC_VARS) \ + DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim" \ + STDDOC="$(PWD)/verbatim.ddoc" + ################################################################################ # Resources ################################################################################ @@ -355,14 +381,14 @@ dlangspec.verbatim.txt : $(DMD) verbatim.ddoc dlangspec-consolidated.d # Git rules ################################################################################ -../%-${LATEST} : - git clone -b v${LATEST} --depth=1 ${GIT_HOME}/$* $@ +$(PWD)/%-${LATEST} : + git clone -b v${LATEST} --depth=1 ${GIT_HOME}/$(notdir $*) $@ -../%-${DUB_VER} : - git clone --depth=1 -b v${DUB_VER} ${GIT_HOME}/$* $@ +$(PWD)/%-${DUB_VER} : + git clone --depth=1 -b v${DUB_VER} ${GIT_HOME}/$(notdir $*) $@ ${DMD_DIR} ${DRUNTIME_DIR} ${PHOBOS_DIR} ${TOOLS_DIR} ${INSTALLER_DIR}: - git clone --depth=1 ${GIT_HOME}/$(@F) $@ + git clone --depth=1 ${GIT_HOME}/$(notdir $(@F)) $@ ################################################################################ # dmd compiler, latest released build and current build @@ -375,48 +401,39 @@ $(DMD_STABLE) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ - STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ - DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos" \ - DOCSRC="$(realpath .)" + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html $(DDOC_VARS_STABLE) dmd-prerelease : $(STD_DDOC_PRE) $(DMD_DIR) $(DMD) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ - STDDOC="$(addprefix `pwd`/, $(STD_DDOC_PRE))" \ - DOCSRC="$(realpath .)" \ - DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos-prerelease" + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html $(DDOC_VARS_HTML) dmd-prerelease-verbatim : $(STD_DDOC_PRE) $(DMD_DIR) \ ${DOC_OUTPUT_DIR}/phobos-prerelease/mars.verbatim ${DOC_OUTPUT_DIR}/phobos-prerelease/mars.verbatim: verbatim.ddoc mkdir -p $(dir $@) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html \ - DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim" \ - STDDOC="`pwd`/verbatim.ddoc" \ - DOCSRC="$(realpath .)" + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html $(DDOC_VARS_VERBATIM) $(call CHANGE_SUFFIX,html,verbatim,${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim) mv ${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim/* $(dir $@) rm -r ${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim ################################################################################ # druntime, latest released build and current build +# TODO: remove DOCDIR and DOCFMT once they have been removed at Druntime ################################################################################ druntime-prerelease : ${DRUNTIME_DIR} $(DMD) $(STD_DDOC_PRE) - ${MAKE} --directory=${DRUNTIME_DIR} -f posix.mak target doc \ + ${MAKE} --directory=${DRUNTIME_DIR} -f posix.mak target doc $(DDOC_VARS_HTML) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos-prerelease \ DOCFMT="$(addprefix `pwd`/, $(STD_DDOC_PRE))" druntime-release : ${DRUNTIME_STABLE_DIR} $(DMD_STABLE) $(STD_DDOC) - ${MAKE} --directory=${DRUNTIME_STABLE_DIR} -f posix.mak target doc \ - DMD=$(DMD_STABLE) \ + ${MAKE} --directory=${DRUNTIME_STABLE_DIR} -f posix.mak target doc $(DDOC_VARS_STABLE) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos \ - DOCFMT="$(addprefix `pwd`/, $(STD_DDOC))" + DOCFMT="$(addprefix `pwd`/, $(STD_DDOC))" druntime-prerelease-verbatim : ${DRUNTIME_DIR} \ ${DOC_OUTPUT_DIR}/phobos-prerelease/object.verbatim ${DOC_OUTPUT_DIR}/phobos-prerelease/object.verbatim : $(DMD) - ${MAKE} --directory=${DRUNTIME_DIR} -f posix.mak target doc \ + ${MAKE} --directory=${DRUNTIME_DIR} -f posix.mak target doc $(DDOC_VARS_VERBATIM) \ DOCDIR=${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim \ DOCFMT="`pwd`/verbatim.ddoc" mkdir -p $(dir $@) @@ -430,40 +447,17 @@ ${DOC_OUTPUT_DIR}/phobos-prerelease/object.verbatim : $(DMD) .PHONY: phobos-prerelease phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prerelease - ${MAKE} --directory=${PHOBOS_DIR_GENERATED} -f posix.mak \ - STDDOC="$(addprefix `pwd`/, $(STD_DDOC_PRE))" \ - DOC_OUTPUT_DIR="${DOC_OUTPUT_DIR}/phobos-prerelease" \ - DRUNTIME_PATH="$(realpath ${DRUNTIME_DIR})" \ - DMD="$(realpath ${DMD})" \ - DOCSRC="$(realpath .)" \ - VERSION="$(realpath ${DMD_DIR}/VERSION)" \ - html - -phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) \ - druntime-release - ${MAKE} --directory=${PHOBOS_STABLE_DIR_GENERATED} -f posix.mak \ - DMD=$(DMD_STABLE) \ - DRUNTIME_PATH=${DRUNTIME_STABLE_DIR} \ - DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos \ - STDDOC="$(addprefix `pwd`/, $(STD_DDOC))" \ - DRUNTIME_PATH="$(realpath ${DRUNTIME_DIR})" \ - DMD="$(realpath ${DMD})" \ - DOCSRC="$(realpath .)" \ - VERSION="$(realpath ${DMD_DIR}/VERSION)" \ - html + $(MAKE) --directory=$(PHOBOS_DIR_GENERATED) -f posix.mak html $(DDOC_VARS_HTML) + +phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) druntime-release + $(MAKE) --directory=$(PHOBOS_STABLE_DIR_GENERATED) -f posix.mak html $(DDOC_VARS_STABLE) phobos-prerelease-verbatim : ${PHOBOS_FILES_GENERATED} ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim : verbatim.ddoc \ ${DOC_OUTPUT_DIR}/phobos-prerelease/object.verbatim \ ${DOC_OUTPUT_DIR}/phobos-prerelease/mars.verbatim - ${MAKE} --directory=${PHOBOS_DIR_GENERATED} -f posix.mak \ - STDDOC="`pwd`/verbatim.ddoc" \ - DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim \ - DRUNTIME_PATH="$(realpath ${DRUNTIME_DIR})" \ - DMD="$(realpath ${DMD})" \ - DOCSRC="$(realpath .)" \ - VERSION="$(realpath ${DMD_DIR}/VERSION)" \ - html + ${MAKE} --directory=${PHOBOS_DIR_GENERATED} -f posix.mak html $(DDOC_VARS_VERBATIM) \ + DOC_OUTPUT_DIR=${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim $(call CHANGE_SUFFIX,html,verbatim,${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim) mv ${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim/* $(dir $@) rm -r ${DOC_OUTPUT_DIR}/phobos-prerelease-verbatim From 57c3e9beeac1c0833f3495af14a57a77cec4320f Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 9 Jun 2017 18:06:04 +0200 Subject: [PATCH 60/78] Use generated/$(OS)/release/$(MODEL)/dmd as a location for the DMD binary --- posix.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posix.mak b/posix.mak index 8e5ed75b84..f8cc5aaaaf 100644 --- a/posix.mak +++ b/posix.mak @@ -41,7 +41,7 @@ TMP?=/tmp # Last released versions DMD_STABLE_DIR=${DMD_DIR}-${LATEST} -DMD_STABLE=$(DMD_STABLE_DIR)/src/dmd +DMD_STABLE=$(DMD_STABLE_DIR)/generated/$(OS)/release/$(MODEL)/dmd DRUNTIME_STABLE_DIR=${DRUNTIME_DIR}-${LATEST} PHOBOS_STABLE_DIR=${PHOBOS_DIR}-${LATEST} From 0dcad053ebd0a385a4dab3f0be51efcd1475ed01 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 9 Jun 2017 18:07:03 +0200 Subject: [PATCH 61/78] Add ddmd to the library's left menu --- posix.mak | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/posix.mak b/posix.mak index f8cc5aaaaf..8f84357b12 100644 --- a/posix.mak +++ b/posix.mak @@ -245,10 +245,10 @@ ${GENERATED}/${LATEST}.ddoc : mkdir -p $(dir $@) echo "LATEST=${LATEST}" >$@ -${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) +${GENERATED}/modlist-${LATEST}.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) mkdir -p $(dir $@) - $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ - $(addprefix --dump , object std etc core) >$@ + $(STABLE_RDMD) modlist.d $(DRUNTIME_STABLE_DIR) $(PHOBOS_STABLE_DIR) $(DMD_STABLE_DIR) $(MOD_EXCLUDES_RELEASE) \ + $(addprefix --dump , object std etc core ddmd) >$@ ${GENERATED}/modlist-prerelease.ddoc : modlist.d ${STABLE_DMD} $(DRUNTIME_DIR) $(PHOBOS_DIR) mkdir -p $(dir $@) From abf0c63a06789ed3e6f0f7dd37ad52920396fae8 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 9 Jun 2017 18:13:24 +0200 Subject: [PATCH 62/78] Ddoc: enable DMD at the release pages --- posix.mak | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/posix.mak b/posix.mak index 8f84357b12..b60a1a1bb8 100644 --- a/posix.mak +++ b/posix.mak @@ -400,8 +400,8 @@ $(DMD) : ${DMD_DIR} $(DMD_STABLE) : ${DMD_STABLE_DIR} ${MAKE} --directory=${DMD_STABLE_DIR}/src -f posix.mak AUTO_BOOTSTRAP=1 -dmd-release : $(STD_DDOC) $(DMD_DIR) $(DMD) - $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html $(DDOC_VARS_STABLE) +dmd-release : $(STD_DDOC) $(DMD_STABLE_DIR) $(DMD_STABLE) + $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_STABLE_DIR) -f posix.mak html $(DDOC_VARS_STABLE) dmd-prerelease : $(STD_DDOC_PRE) $(DMD_DIR) $(DMD) $(MAKE) AUTO_BOOTSTRAP=1 --directory=$(DMD_DIR) -f posix.mak html $(DDOC_VARS_HTML) @@ -449,7 +449,8 @@ ${DOC_OUTPUT_DIR}/phobos-prerelease/object.verbatim : $(DMD) phobos-prerelease : ${PHOBOS_FILES_GENERATED} $(STD_DDOC_PRE) druntime-prerelease $(MAKE) --directory=$(PHOBOS_DIR_GENERATED) -f posix.mak html $(DDOC_VARS_HTML) -phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) druntime-release +phobos-release : ${PHOBOS_STABLE_FILES_GENERATED} $(DMD_STABLE) $(STD_DDOC) \ + druntime-release dmd-release $(MAKE) --directory=$(PHOBOS_STABLE_DIR_GENERATED) -f posix.mak html $(DDOC_VARS_STABLE) phobos-prerelease-verbatim : ${PHOBOS_FILES_GENERATED} ${DOC_OUTPUT_DIR}/phobos-prerelease/index.verbatim From b91c964299b76ae5541f4913f1999a1810beb68c Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 9 Jun 2017 18:13:33 +0200 Subject: [PATCH 63/78] Ddox: enable DMD at the release pages --- posix.mak | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/posix.mak b/posix.mak index b60a1a1bb8..93d5462972 100644 --- a/posix.mak +++ b/posix.mak @@ -503,13 +503,17 @@ else DMD_EXCLUDE += -e /scanmach/d -e /libmach/d endif -$G/docs.json : ${DMD_STABLE} ${DRUNTIME_STABLE_DIR} \ - ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs +$G/docs.json : ${DMD_STABLE} ${DMD_STABLE_DIR} \ + ${DRUNTIME_STABLE_DIR} ${PHOBOS_STABLE_FILES_GENERATED} | dpl-docs + find ${DMD_STABLE_DIR}/src -name '*.d' | \ + sed -e /mscoff/d -e /objc_glue.d/d -e /objc.d/d ${DMD_EXCLUDE} \ + > $G/.release-files.txt find ${DRUNTIME_STABLE_DIR}/src -name '*.d' | \ - sed -e /unittest.d/d -e /gcstub/d > $G/.release-files.txt + sed -e /unittest.d/d -e /gcstub/d >> $G/.release-files.txt find ${PHOBOS_STABLE_DIR_GENERATED} -name '*.d' | \ sed -e /unittest.d/d -e /windows/d | sort >> $G/.release-files.txt - ${DMD_STABLE} -c -o- -version=CoreDdoc -version=StdDdoc -Df.release-dummy.html \ + ${DMD_STABLE} -J$(DMD_STABLE_DIR)/res -J$(dir $(DMD_STABLE)) -c -o- -version=CoreDdoc \ + -version=MARS -version=CoreDdoc -version=StdDdoc -Df$G/.release-dummy.html \ -Xf$@ -I${PHOBOS_STABLE_DIR_GENERATED} @$G/.release-files.txt ${DPL_DOCS} filter $@ --min-protection=Protected \ --only-documented $(MOD_EXCLUDES_PRERELEASE) From a09d8444c3ca45f43d4a5714fb6064925242ba98 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Sat, 10 Jun 2017 11:39:59 +0200 Subject: [PATCH 64/78] Add documentation for uClibc and musl C libraries. --- spec/version.dd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/version.dd b/spec/version.dd index 35ea2e1520..08dcbfd46d 100644 --- a/spec/version.dd +++ b/spec/version.dd @@ -254,6 +254,8 @@ $(H3 $(LEGACY_LNAME2 PredefinedVersions, predefined-versions, Predefined Version $(TROW $(ARGS $(D CRuntime_DigitalMars)) , $(ARGS DigitalMars C runtime)) $(TROW $(ARGS $(D CRuntime_Glibc)) , $(ARGS Glibc C runtime)) $(TROW $(ARGS $(D CRuntime_Microsoft)) , $(ARGS Microsoft C runtime)) + $(TROW $(ARGS $(D CRuntime_Musl)) , $(ARGS musl C runtime)) + $(TROW $(ARGS $(D CRuntime_UClibc)) , $(ARGS uClibc C runtime)) $(TROW $(ARGS $(D X86)) , $(ARGS Intel and AMD 32-bit processors)) $(TROW $(ARGS $(D X86_64)) , $(ARGS Intel and AMD 64-bit processors)) $(TROW $(ARGS $(D ARM)) , $(ARGS The ARM architecture (32-bit) (AArch32 et al))) From d3569b3ff44d51f5ed47b1a78f4327cd07324d05 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:43:15 +0200 Subject: [PATCH 65/78] Fix trailing whitespace --- changelog/2.072.0.dd | 6 +++--- changelog/2.073.0.dd | 2 +- foundation.dd | 4 ++-- spec/statement.dd | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/changelog/2.072.0.dd b/changelog/2.072.0.dd index e25e6ca4cf..d74649824f 100644 --- a/changelog/2.072.0.dd +++ b/changelog/2.072.0.dd @@ -372,13 +372,13 @@ $(BUGSTITLE Library Changes, or program may malfunction due to changed call order of module static construction/destruction. In order to preserve the program behaviour without the need to specify `--DRT-oncycle` command line argument, it is possible to instruct the linker by declaring the following array in the source code:) - + --- extern(C) __gshared string[] rt_options = [ "oncycle=ignore" ]; --- - + ($P For more information, please consult the D language specification, section Overriding Cycle Detection Abort in chapter 4 - and chapter 28.7 Configuring the Garbage Collector.) + and chapter 28.7 Configuring the Garbage Collector.) ) $(LI $(LNAME2 std-digest-murmurhash, Implementation of `std.digest.murmurhash`). diff --git a/changelog/2.073.0.dd b/changelog/2.073.0.dd index a6acd42dda..536c85cd88 100644 --- a/changelog/2.073.0.dd +++ b/changelog/2.073.0.dd @@ -37,7 +37,7 @@ $(BUGSTITLE Compiler changes, $(LI $(LNAME2 mscrtlib-option,New command line option $(B -mscrtlib=$(I libname)) for Windows MS-COFF object files.) $(P If building MS-COFF object files with -m64 or -m32mscoff, this option - specifies the reference to the C runtime library $(I libname) that is + specifies the reference to the C runtime library $(I libname) that is embedded into the object file containing `main`, `DllMain` or `WinMain` for automatic linking. The default is $(TT libcmt) (release version with static linkage), the other usual alternatives are diff --git a/foundation.dd b/foundation.dd index 52aa4c6e01..5852a782a4 100644 --- a/foundation.dd +++ b/foundation.dd @@ -63,8 +63,8 @@ $(H3 Official contacts) $(P The D Language Foundation has been incorporated with the state of Washington, USA. The employer ID is 47-5352856.) -$(P To contact the D Language Foundation, please direct emails to -$(LINK2 mailto:foundation@dlang.org, foundation@dlang.org) and other correspondence to +$(P To contact the D Language Foundation, please direct emails to +$(LINK2 mailto:foundation@dlang.org, foundation@dlang.org) and other correspondence to 6830 NE Bothell Way, Suite C-162, Kenmore WA 98028.) ) diff --git a/spec/statement.dd b/spec/statement.dd index 87206c2a75..5b3c60893b 100644 --- a/spec/statement.dd +++ b/spec/statement.dd @@ -703,8 +703,8 @@ $(CONSOLE -------------- $(P It is important to make sure that, if $(D opApply) catches any exceptions, that those - exceptions did not originate from the delegate passed to $(I opApply). The user would expect - exceptions thrown from a `foreach` body to both terminate the loop, and propagate outside + exceptions did not originate from the delegate passed to $(I opApply). The user would expect + exceptions thrown from a `foreach` body to both terminate the loop, and propagate outside the `foreach` body. ) From eae2ed4075709164d7d2de1682970f9b1c1a2d9a Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:43:57 +0200 Subject: [PATCH 66/78] Fix Issue 17501 - Runnable unittest problem with AST rewrite --- assert_writeln_magic.d | 105 +++++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 15 deletions(-) diff --git a/assert_writeln_magic.d b/assert_writeln_magic.d index e386ac81f1..56c608c593 100755 --- a/assert_writeln_magic.d +++ b/assert_writeln_magic.d @@ -43,14 +43,13 @@ private string formatNode(T)(const T t) return writer.data; } -class TestVisitor : ASTVisitor +class TestVisitor(Out) : ASTVisitor { import dparse.lexer : tok, Token; - this(string fileName, string destFile) + this(Out fl) { - this.fileName = fileName; - fl = FileLines(fileName, destFile); + this.fl = fl; } alias visit = ASTVisitor.visit; @@ -77,6 +76,10 @@ class TestVisitor : ASTVisitor if (inFunctionCall) return; + // only look at `a == b` within the AssertExpression + if (typeid(expr.assertion) != typeid(CmpExpression)) + return; + lastAssert = expr; inAssert = true; expr.accept(this); @@ -172,15 +175,26 @@ private: Rebindable!(const AssertExpression) lastAssert; Rebindable!(const EqualExpression) lastEqualExpression; - string fileName; - FileLines fl; + Out fl; } -void parseFile(string fileName, string destFile) +void parseString(Visitor)(ubyte[] sourceCode, string fileName, Visitor visitor) { import dparse.lexer; import dparse.parser : parseModule; import dparse.rollback_allocator : RollbackAllocator; + + LexerConfig config; + auto cache = StringCache(StringCache.defaultBucketCount); + const(Token)[] tokens = getTokensForParser(sourceCode, config, &cache).array; + + RollbackAllocator rba; + auto m = parseModule(tokens, fileName, &rba); + visitor.visit(m); +} + +void parseFile(string fileName, string destFile) +{ import std.array : uninitializedArray; auto inFile = File(fileName); @@ -192,14 +206,9 @@ void parseFile(string fileName, string destFile) return; inFile.rawRead(sourceCode); - LexerConfig config; - auto cache = StringCache(StringCache.defaultBucketCount); - const(Token)[] tokens = getTokensForParser(sourceCode, config, &cache).array; - - RollbackAllocator rba; - auto m = parseModule(tokens, fileName, &rba); - auto visitor = new TestVisitor(fileName, destFile); - visitor.visit(m); + auto fl = FileLines(fileName, destFile); + auto visitor = new TestVisitor!(typeof(fl))(fl); + parseString(sourceCode, fileName, visitor); delete visitor; } @@ -211,6 +220,7 @@ string rebasePath(string path, string oldBase, string newBase) return buildPath(newBase, path.absolutePath.relativePath(oldBase.absolutePath)); } +version(unittest) { void main(){} } else void main(string[] args) { import std.file; @@ -324,3 +334,68 @@ struct FileLines lines[i] = line; } } + +version(unittest) +{ + struct FileLinesMock + { + string[] lines; + string opIndex(size_t i) { return lines[i]; } + void opIndexAssign(string line, size_t i) { + lines[i] = line; + } + } + auto runTest(string sourceCode) + { + import std.string : representation; + auto mock = FileLinesMock(sourceCode.split("\n")); + auto visitor = new TestVisitor!(typeof(mock))(mock); + parseString(sourceCode.representation.dup, "testmodule", visitor); + delete visitor; + return mock; + } +} + + +unittest +{ + "Running tests for assert_writeln_magic".writeln; + + // purposefully not indented + string testCode = q{ +unittest +{ +assert(equal(splitter!(a => a == ' ')("hello world"), [ "hello", "", "world" ])); +assert(equal(splitter!(a => a == 0)(a), w)); +} + }; + auto res = runTest(testCode); + assert(res.lines[3 .. $ - 2] == [ + "assert(equal(splitter!(a => a == ' ')(\"hello world\"), [ \"hello\", \"\", \"world\" ]));", + "assert(equal(splitter!(a => a == 0)(a), w));" + ]); +} + +unittest +{ + string testCode = q{ +unittest +{ +assert(1 == 2); +assert(foo() == "bar"); +assert(foo() == bar); +assert(arr == [0, 1, 2]); +assert(r.back == 1); +} + }; + auto res = runTest(testCode); + assert(res.lines[3 .. $ - 2] == [ + "writeln(1); // 2", + "writeln(foo()); // \"bar\"", + "writeln(foo()); // bar", + "writeln(arr); // [0, 1, 2]", + "writeln(r.back); // 1", + ]); + + "Successfully ran tests for assert_writeln_magic".writeln; +} From a2004ee6fa78cc78907cb686e8498e4ffe616da5 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:44:56 +0200 Subject: [PATCH 67/78] Add assert_writeln_magic unittest to the Makefile test target --- posix.mak | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/posix.mak b/posix.mak index 93d5462972..80094810fd 100644 --- a/posix.mak +++ b/posix.mak @@ -594,6 +594,11 @@ $(ASSERT_WRITELN_BIN): assert_writeln_magic.d $(DUB) $(DUB) build --single --compiler=$(STABLE_DMD) $< @mv ./assert_writeln_magic $@ +$(ASSERT_WRITELN_BIN)_test: assert_writeln_magic.d $(DUB) + @mkdir -p $(dir $@) + $(DUB) build --single --compiler=$(STABLE_DMD) --build=unittest $< + @mv ./assert_writeln_magic $@ + $(PHOBOS_FILES_GENERATED): $(PHOBOS_DIR_GENERATED)/%: $(PHOBOS_DIR)/% $(DUB) $(ASSERT_WRITELN_BIN) @mkdir -p $(dir $@) @if [ $(subst .,, $(suffix $@)) == "d" ] && [ "$@" != "$(PHOBOS_DIR_GENERATED)/index.d" ] ; then \ @@ -610,9 +615,12 @@ $(PHOBOS_STABLE_FILES_GENERATED): $(PHOBOS_STABLE_DIR_GENERATED)/%: $(PHOBOS_STA # Style tests ################################################################################ -test: +test: $(ASSERT_WRITELN_BIN)_test @echo "Searching for trailing whitespace" - if [[ $$(find . -type f -name "*.dd" -exec egrep -l " +$$" {} \;) ]] ; then $$(exit 1); fi + @echo "Check for trailing whitespace" + grep -n '[[:blank:]]$$' $$(find . -type f -name "*.dd") ; test $$? -eq 1 + @echo "Executing assert_writeln_magic tests" + $< ################################################################################ # Changelog generation From 1f66c69d2171e215c3f02b88f0d79a14dd41cc46 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:47:45 +0200 Subject: [PATCH 68/78] Use Travis to check the target --- .travis.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..ea290e21c8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +dist: trusty +sudo: false + +language: d +os: + - linux +d: + - dmd + - dmd-beta + - dmd-nightly + - ldc + - ldc-beta + +script: + - make -f posix.mak test From cf67d169c4989b7c8f15dbe15ee8ca0d7cb060f7 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:49:48 +0200 Subject: [PATCH 69/78] Add STABLE_DMD as dependency to the assert_writeln targets --- posix.mak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posix.mak b/posix.mak index 80094810fd..9605b5a873 100644 --- a/posix.mak +++ b/posix.mak @@ -589,12 +589,12 @@ d.tag : chmgen.d $(STABLE_DMD) $(ALL_FILES) phobos-release druntime-release ASSERT_WRITELN_BIN = $(GENERATED)/assert_writeln_magic -$(ASSERT_WRITELN_BIN): assert_writeln_magic.d $(DUB) +$(ASSERT_WRITELN_BIN): assert_writeln_magic.d $(DUB) $(STABLE_DMD) @mkdir -p $(dir $@) $(DUB) build --single --compiler=$(STABLE_DMD) $< @mv ./assert_writeln_magic $@ -$(ASSERT_WRITELN_BIN)_test: assert_writeln_magic.d $(DUB) +$(ASSERT_WRITELN_BIN)_test: assert_writeln_magic.d $(DUB) $(STABLE_DMD) @mkdir -p $(dir $@) $(DUB) build --single --compiler=$(STABLE_DMD) --build=unittest $< @mv ./assert_writeln_magic $@ From 4f7e8d8c9297ceb02cf48c0bfa01f7f00decb9a2 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 02:55:17 +0200 Subject: [PATCH 70/78] Upgrade DUB build target to use $DMD instead of $DC --- posix.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posix.mak b/posix.mak index 9605b5a873..1f16c07d63 100644 --- a/posix.mak +++ b/posix.mak @@ -560,7 +560,7 @@ ${STABLE_DMD}: unzip -qd ${STABLE_DMD_ROOT} $${TMPFILE}.zip && rm $${TMPFILE}.zip ${DUB}: ${DUB_DIR} ${STABLE_DMD} - cd ${DUB_DIR} && DC="$(abspath ${STABLE_DMD}) -conf=$(abspath ${STABLE_DMD_CONF})" ./build.sh + cd ${DUB_DIR} && DMD="${STABLE_DMD}" ./build.sh ################################################################################ # chm help files From 1cfece0693f5a73336eb0b6189c2470f5b33720f Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 05:18:36 +0200 Subject: [PATCH 71/78] Use only one instance for the Travis build --- .travis.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ea290e21c8..a7e6fc3870 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,6 @@ sudo: false language: d os: - linux -d: - - dmd - - dmd-beta - - dmd-nightly - - ldc - - ldc-beta script: - make -f posix.mak test From cc7880723c224d8b11428f1f157b80cbb69054fa Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 08:15:35 +0200 Subject: [PATCH 72/78] Fix Issue 8107 - Float literals are not specified as they are implemented --- spec/lex.dd | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/lex.dd b/spec/lex.dd index 9cfd1dc0aa..511b03b069 100644 --- a/spec/lex.dd +++ b/spec/lex.dd @@ -923,6 +923,16 @@ $(GNAME LeadingDecimal): It is not an error if the literal is rounded to fit into the significant digits of the type. ) + $(P If a floating literal has a $(B .) and a type suffix, at least one + digit must be in-between:) + +--------- +1f; // OK +1.f; // forbidden +1d; // OK +1.d; // forbidden +1.; // OK, int +--------- $(P Complex literals are not tokens, but are assembled from real and imaginary expressions during semantic analysis: From 999cbfbc20ee06254984a39096c8d548628ffbad Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 11:06:48 +0200 Subject: [PATCH 73/78] Fix invalid undefined Ddoc macros --- faq.dd | 2 +- forum-template.dd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/faq.dd b/faq.dd index a803a26717..50dd5d4a81 100644 --- a/faq.dd +++ b/faq.dd @@ -118,7 +118,7 @@ $(ITEM shared_synchronized, What does shared have to do with synchronization?) $(ITEM shared_memory_barriers, What does shared have to do with memory barriers?) - $(Currently the compiler does not insert memory barriers around shared variables. + $(P Currently the compiler does not insert memory barriers around shared variables. ) $(ITEM casting_to_shared, What are the semantics of casting FROM unshared TO shared?) diff --git a/forum-template.dd b/forum-template.dd index 679a59f5b4..2bdab08b75 100644 --- a/forum-template.dd +++ b/forum-template.dd @@ -32,7 +32,7 @@ $(DIVID footernav, $(A /, Forum index) | $(A /help#about, About this forum) ) -$(DIVCID smallprint, copyright, $(COPYRIGHT)) +$(DIVCID smallprint, copyright, $(COPYRIGHT_FOUNDATION)) _= SUBNAV= From d1fbda322bfe99adaff11f8778a6e0b50ccfe269 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 13:39:27 +0200 Subject: [PATCH 74/78] Allow runnable examples anywhere --- dlang.org.ddoc | 2 ++ index.dd | 6 ++++-- js/run.js | 10 ++++------ spec/module.dd | 12 ++++++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/dlang.org.ddoc b/dlang.org.ddoc index 7f0782a572..a137aae38d 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -351,6 +351,8 @@ _= RELATIVE_LINK2=$(ALOCAL $1, $+) _= +RUNNABLE_EXAMPLE=$(DIVC runnable-examples, $1) + SAMPLESRC=$(SPANC sample_src, $(AHTTPS github.com/dlang/dmd/blob/master/samples/$0, /dmd/samples/d/$0)) SCINI=$(TC pre, scini notranslate, $0) SCRIPTLOAD= diff --git a/index.dd b/index.dd index 1977dc4fc3..75c5fedd41 100644 --- a/index.dd +++ b/index.dd @@ -29,6 +29,7 @@ $(DIVC intro, $(DIV, $(DIV, ) ) $(DIVID your-code-here-default, +$(RUNNABLE_EXAMPLE ---- // Round floating point numbers import std.algorithm, std.conv, std.functional, @@ -49,6 +50,7 @@ void main() } ---- ) +) $(EXTRA_EXAMPLE ---- // Sort lines @@ -418,8 +420,8 @@ Macros: TAG=<$1>$+ TAG2=<$1 $2>$3 D=$0 - EXAMPLE=$(TAG2 a, id="a$1-control" class="example-control", )$(TAG2 div, id="a$1" class="example-box", $2) - EXTRA_EXAMPLE= + EXAMPLE=$(TAG2 a, id="a$1-control" class="example-control", )$(TAG2 div, id="a$1" class="example-box", $(RUNNABLE_EXAMPLE $2)) + EXTRA_EXAMPLE= LAYOUT_PREFIX= LAYOUT_SUFFIX= $(SCRIPTLOAD $(ROOT_DIR)js/platform-downloads.js, data-latest="$(LATEST)") diff --git a/js/run.js b/js/run.js index 63a82ed5d4..e3dc0bcdb5 100644 --- a/js/run.js +++ b/js/run.js @@ -335,17 +335,15 @@ $(document).ready(function() var currentPage = $(location).attr('pathname'); - if ($('body')[0].id != "Home") - return; - - $('pre[class~=d_code]').each(function(index) + $('.runnable-examples').each(function(index) { - var stripedText = $(this).text().replace(/\s/gm,''); + var el = $(this).children().first(); + var stripedText = el.text().replace(/\s/gm,''); var md5sum = MD5(stripedText); var stdin = ""; var args = ""; - var currentExample = $(this); + var currentExample = el; var orig = currentExample.html(); if (typeof mainPage !== 'undefined' && md5sum in mainPage) diff --git a/spec/module.dd b/spec/module.dd index 3efab02bc1..67d301cd1b 100644 --- a/spec/module.dd +++ b/spec/module.dd @@ -224,6 +224,7 @@ $(H3 $(LNAME2 name_lookup, Symbol Name Lookup)) $(P The simplest form of importing is to just list the modules being imported:) +$(RUNNABLE_EXAMPLE --------- module myapp.main; @@ -239,6 +240,7 @@ class Foo : BaseClass } } --------- +) $(P When a symbol name is used unqualified, a two-phase lookup will happen. First, the module scope will be searched, starting from the innermost @@ -383,6 +385,7 @@ $(H3 $(LNAME2 renamed_imports, Renamed Imports)) all references to the module's symbols must be qualified with:) +$(RUNNABLE_EXAMPLE --- import io = std.stdio; @@ -393,6 +396,7 @@ void main() writeln("hello!"); // error, writeln is undefined } --- +) $(P Renamed imports are handy when dealing with very long import names.) @@ -402,6 +406,7 @@ $(H3 $(LNAME2 selective_imports, Selective Imports)) $(P Specific symbols can be exclusively imported from a module and bound into the current namespace:) +$(RUNNABLE_EXAMPLE --- import std.stdio : writeln, foo = write; @@ -414,6 +419,7 @@ void main() fwritefln(stdout, "abc"); // error, fwritefln undefined } --- +) $(P $(D static) cannot be used with selective imports.) @@ -421,6 +427,7 @@ $(H3 $(LNAME2 renamed_selective_imports, Renamed and Selective Imports)) $(P When renaming and selective importing are combined:) +$(RUNNABLE_EXAMPLE ------------ import io = std.stdio : foo = writeln; @@ -437,12 +444,14 @@ void main() // foo is not a member of io } -------------- +) $(H3 $(LNAME2 scoped_imports, Scoped Imports)) $(P Import declarations may be used at any scope. For example:) +$(RUNNABLE_EXAMPLE -------------- void main() { @@ -450,6 +459,7 @@ void main() writeln("bar"); } -------------- +) $(P The imports are looked up to satisfy any unresolved symbols at that scope. Imported symbols may hide symbols from outer scopes.) @@ -461,6 +471,7 @@ void main() at function scope cannot be forward referenced. ) +$(RUNNABLE_EXAMPLE -------------- void main() { @@ -477,6 +488,7 @@ void main() std.stdio.writeln("bar"); // error, std is undefined } -------------- +) From 44cbc937104d2c1529bc020f5856b8ab47366453 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Thu, 15 Jun 2017 15:52:54 +0200 Subject: [PATCH 75/78] Remove the MD5-hashing approach to save STDIN and ARGS --- css/style.css | 6 + dlang.org.ddoc | 2 + index.dd | 16 ++- js/run-main-website.js | 22 ---- js/run.js | 254 +++-------------------------------------- posix.mak | 2 +- 6 files changed, 43 insertions(+), 259 deletions(-) delete mode 100644 js/run-main-website.js diff --git a/css/style.css b/css/style.css index 8ca6bcdcd3..da7b53632d 100644 --- a/css/style.css +++ b/css/style.css @@ -1723,6 +1723,12 @@ input.resetButton{display: none} .d_example_buttons { text-align: left; } +.runnable-examples-stdin { + display: none; +} +.runnable-examples-args { + display: none; +} /* Runnable-examples css -end */ .page-contents diff --git a/dlang.org.ddoc b/dlang.org.ddoc index a137aae38d..c918c167fc 100644 --- a/dlang.org.ddoc +++ b/dlang.org.ddoc @@ -352,6 +352,8 @@ RELATIVE_LINK2=$(ALOCAL $1, $+) _= RUNNABLE_EXAMPLE=$(DIVC runnable-examples, $1) +RUNNABLE_EXAMPLE_STDIN=$0 +RUNNABLE_EXAMPLE_ARGS=$0 SAMPLESRC=$(SPANC sample_src, $(AHTTPS github.com/dlang/dmd/blob/master/samples/$0, /dmd/samples/d/$0)) SCINI=$(TC pre, scini notranslate, $0) diff --git a/index.dd b/index.dd index 75c5fedd41..4e8ab3e473 100644 --- a/index.dd +++ b/index.dd @@ -30,6 +30,7 @@ $(DIVC intro, $(DIV, $(DIV, ) $(DIVID your-code-here-default, $(RUNNABLE_EXAMPLE +$(RUNNABLE_EXAMPLE_STDIN 2.4 plus 2.4 equals 5 for sufficiently large values of 2.) ---- // Round floating point numbers import std.algorithm, std.conv, std.functional, @@ -52,6 +53,15 @@ void main() ) ) $(EXTRA_EXAMPLE +$(RUNNABLE_EXAMPLE_STDIN +Mercury +Venus +Earth +Mars +Jupiter +Saturn +Uranus +Neptune) ---- // Sort lines import std.stdio, std.array, std.algorithm; @@ -227,6 +237,11 @@ void main() $(P Built-in linear and associative arrays, slices, and ranges make daily programming simple and pleasant for tasks, both small and large. $(EXAMPLE 3, +$(RUNNABLE_EXAMPLE_STDIN +The D programming language +Modern convenience. +Modeling power. +Native efficiency.) ---- #!/usr/bin/env rdmd import std.range, std.stdio; @@ -425,7 +440,6 @@ Macros: LAYOUT_PREFIX= LAYOUT_SUFFIX= $(SCRIPTLOAD $(ROOT_DIR)js/platform-downloads.js, data-latest="$(LATEST)") - $(SCRIPTLOAD $(ROOT_DIR)js/run-main-website.js) $(SCRIPTLOAD //arsdnet.net/this-week-in-d/twid-latest.js) LAYOUT_TITLE= TOUR=$(DIVC item, $(SECTION4 $(LINK2 $1, $(TC i, fa fa-$2 big-icon)$3), $4)) diff --git a/js/run-main-website.js b/js/run-main-website.js deleted file mode 100644 index 76a32787de..0000000000 --- a/js/run-main-website.js +++ /dev/null @@ -1,22 +0,0 @@ -/** -Runnable examples functionality - -Copyright: 2012 by Digital Mars - -License: http://boost.org/LICENSE_1_0.txt, Boost License 1.0 - -Authors: Damian Ziemba -*/ -var mainPage = new Array(); - -// Top rotation - sort lines -mainPage["f34e2dd1777620887b1899e48463d82b"] = ["Mercury\nVenus\nEarth\nMars\nJupiter\nSaturn\nUranus\nNeptune"]; - -// Top rotation - round floating point numbers -mainPage["c308dda4f09440aa35d857241991f55e"] = ["2.4 plus 2.4 equals 5 for sufficiently large values of 2."]; - -// Automatic memory management makes for safe... -mainPage["54f2095e83f8ef851a711db0a29b0e26"] = null; - -// Built-in linear and associative arrays, slices, and ranges make... -mainPage["6c843684c0231b847f933e6d7b5a697a"] = ["The D programming language.\nModern convenience.\nModeling power.\nNative efficiency."]; diff --git a/js/run.js b/js/run.js index e3dc0bcdb5..58845d385c 100644 --- a/js/run.js +++ b/js/run.js @@ -37,222 +37,10 @@ void main(string[] args) { [end here] ------ -Go to http://dpaste.dzfl.pl/md5sum, paste your example to Source box and click "Compute". -Copy generated md5sum. Open run-main-website.js file and add following - -mainPage["yourMd5Sum"] = ["standard input is has 0 position", "standard args has 1 position"]; - -Save, reload website and see if standard input and/or standard arguments are displayed in your example form. - TL;DR All examples are replaced with custom form by default. You need to do additional work only if you wan't your example to have deafault standard input or default standard arguments. - -*/ - -/** -Taken from http://www.webtoolkit.info/javascript-md5.html */ -var MD5 = function (string) { - - function RotateLeft(lValue, iShiftBits) { - return (lValue<>>(32-iShiftBits)); - } - - function AddUnsigned(lX,lY) { - var lX4,lY4,lX8,lY8,lResult; - lX8 = (lX & 0x80000000); - lY8 = (lY & 0x80000000); - lX4 = (lX & 0x40000000); - lY4 = (lY & 0x40000000); - lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF); - if (lX4 & lY4) { - return (lResult ^ 0x80000000 ^ lX8 ^ lY8); - } - if (lX4 | lY4) { - if (lResult & 0x40000000) { - return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); - } else { - return (lResult ^ 0x40000000 ^ lX8 ^ lY8); - } - } else { - return (lResult ^ lX8 ^ lY8); - } - } - - function F(x,y,z) { return (x & y) | ((~x) & z); } - function G(x,y,z) { return (x & z) | (y & (~z)); } - function H(x,y,z) { return (x ^ y ^ z); } - function I(x,y,z) { return (y ^ (x | (~z))); } - - function FF(a,b,c,d,x,s,ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - }; - - function GG(a,b,c,d,x,s,ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - }; - - function HH(a,b,c,d,x,s,ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - }; - - function II(a,b,c,d,x,s,ac) { - a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); - return AddUnsigned(RotateLeft(a, s), b); - }; - - function ConvertToWordArray(string) { - var lWordCount; - var lMessageLength = string.length; - var lNumberOfWords_temp1=lMessageLength + 8; - var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64; - var lNumberOfWords = (lNumberOfWords_temp2+1)*16; - var lWordArray=Array(lNumberOfWords-1); - var lBytePosition = 0; - var lByteCount = 0; - while ( lByteCount < lMessageLength ) { - lWordCount = (lByteCount-(lByteCount % 4))/4; - lBytePosition = (lByteCount % 4)*8; - lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<>>29; - return lWordArray; - }; - - function WordToHex(lValue) { - var WordToHexValue="",WordToHexValue_temp="",lByte,lCount; - for (lCount = 0;lCount<=3;lCount++) { - lByte = (lValue>>>(lCount*8)) & 255; - WordToHexValue_temp = "0" + lByte.toString(16); - WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2); - } - return WordToHexValue; - }; - - function Utf8Encode(string) { - string = string.replace(/\r\n/g,"\n"); - var utftext = ""; - - for (var n = 0; n < string.length; n++) { - - var c = string.charCodeAt(n); - - if (c < 128) { - utftext += String.fromCharCode(c); - } - else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } - else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - - } - - return utftext; - }; - - var x=Array(); - var k,AA,BB,CC,DD,a,b,c,d; - var S11=7, S12=12, S13=17, S14=22; - var S21=5, S22=9 , S23=14, S24=20; - var S31=4, S32=11, S33=16, S34=23; - var S41=6, S42=10, S43=15, S44=21; - - string = Utf8Encode(string); - - x = ConvertToWordArray(string); - - a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; - - for (k=0;k 0) { - var elements = mainPage[md5sum]; - - if (elements == null) - return; // this example is not runnable online - - if (elements[0] != null) - stdin = elements[0]; - - if (elements[1] != null) - args = elements[1]; + stdin = '
Standard input
' + + '
'; + } + if (args.length > 0) + { + args = '
Command line arguments
' + + '
'; } + var currentExample = el; + var orig = currentExample.html(); + currentExample.replaceWith( '
'+orig+'
' + '
' + '' - + '
Standard input
' - + '
' - + '
Command line arguments
' - + '
' + + stdin + args + '
Application output
Running...
' + '' - + '' - + '' + + (args.length > 0 ? '' : '') + + (stdin.length > 0 ? '' : '') + '' + '
' ); diff --git a/posix.mak b/posix.mak index 1f16c07d63..9d86800353 100644 --- a/posix.mak +++ b/posix.mak @@ -157,7 +157,7 @@ IMAGES=favicon.ico $(ORGS_USING_D) $(addprefix images/, \ JAVASCRIPT=$(addsuffix .js, $(addprefix js/, \ codemirror-compressed dlang ddox listanchors platform-downloads run \ - run_examples run-main-website show_contributors jquery-1.7.2.min)) + run_examples show_contributors jquery-1.7.2.min)) STYLES=$(addsuffix .css, $(addprefix css/, \ style print codemirror ddox)) From 084a7e2e035adb210aad000e7270078ef0719ea5 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 16 Jun 2017 03:31:56 +0200 Subject: [PATCH 76/78] Frontpage: D foundation -> D Language Foundation --- index.dd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.dd b/index.dd index 1977dc4fc3..78c55e8dc6 100644 --- a/index.dd +++ b/index.dd @@ -129,7 +129,7 @@ $(DIVC boxes, Browse the $(LINK2 https://wiki.dlang.org/, wiki) where among other things you can find the $(LINK2 https://wiki.dlang.org/Vision/2017H1, high-level vision) - of the $(LINK2 $(ROOT_DIR)foundation.html, D foundation). + of the $(LINK2 $(ROOT_DIR)foundation.html, D Language Foundation). ) ) $(TOUR book, Documentation, From 945a898036d881b7d512d4d029419e537b7f6a66 Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 16 Jun 2017 03:37:41 +0200 Subject: [PATCH 77/78] Use a OS-independent link to the DMD manual --- code_coverage.dd | 4 ++-- index.dd | 2 +- spec/pragma.dd | 4 ++-- spec/unittest.dd | 2 +- spec/version.dd | 12 ++++++------ 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code_coverage.dd b/code_coverage.dd index 5fc0d79d0f..cb60037072 100644 --- a/code_coverage.dd +++ b/code_coverage.dd @@ -65,7 +65,7 @@ and is integrated into gcc.) $(P The D code coverage analyser is built in as part of the D compiler. Therefore, it is always in perfect synchronization with the language implementation. It's implemented by establishing a counter for each -line in each module compiled with the $(DDSUBLINK dmd-windows,switch-cov, $(B -cov)) switch. +line in each module compiled with the $(DDSUBLINK dmd,switch-cov, $(B -cov)) switch. Code is inserted at the beginning of each statement to increment the corresponding counter. When the program finishes, the runtime collects all @@ -215,7 +215,7 @@ $(H3 Controlling the Coverage Analyser) $(COMMENT The behavior of the coverage analyser can be controlled through the $(DRUNTIMESRC rt/cover.d) module.) -$(P When the $(DDSUBLINK dmd-windows,switch-cov, $(B -cov)) switch is thrown, +$(P When the $(DDSUBLINK dmd,switch-cov, $(B -cov)) switch is thrown, the $(DDSUBLINK spec/version, PredefinedVersions, version identifier) $(B D_Coverage) is defined.) diff --git a/index.dd b/index.dd index 1977dc4fc3..bb5d32f0eb 100644 --- a/index.dd +++ b/index.dd @@ -137,7 +137,7 @@ $(DIVC boxes, $(LINK2 $(ROOT_DIR)spec/spec.html, language) and for $(LINK2 $(ROOT_DIR)phobos/index.html, phobos), D's standard library. The - $(LINK2 $(ROOT_DIR)dmd-windows.html, DMD manual) tells you how + $(LINK2 $(ROOT_DIR)dmd.html, DMD manual) tells you how to use the compiler. Read $(LINK2 $(ROOT_DIR)articles.html, various articles) to deepen your understanding. diff --git a/spec/pragma.dd b/spec/pragma.dd index 98915238ff..6820cb625b 100644 --- a/spec/pragma.dd +++ b/spec/pragma.dd @@ -82,7 +82,7 @@ $(H3 $(LEGACY_LNAME2 Predefined-Pragmas, predefined-pragmas, Predefined Pragmas) pragma(inline) --- Sets the behavior to match the default behavior set by the compiler switch - $(DDSUBLINK dmd-windows, switch-inline, $(TT -inline)). + $(DDSUBLINK dmd, switch-inline, $(TT -inline)). ) $(LI --- @@ -94,7 +94,7 @@ pragma(inline, false) --- pragma(inline, true) --- - If a function cannot be inlined with the $(DDSUBLINK dmd-windows, switch-inline, $(TT -inline)) + If a function cannot be inlined with the $(DDSUBLINK dmd, switch-inline, $(TT -inline)) switch, an error message is issued. This is expected to be improved in the future to causing functions to always be inlined regardless of compiler switch settings. Whether a compiler can inline a particular function or not is implementation defined. diff --git a/spec/unittest.dd b/spec/unittest.dd index e58f583537..ecb8a06976 100644 --- a/spec/unittest.dd +++ b/spec/unittest.dd @@ -30,7 +30,7 @@ unittest following it. ) - $(P A compiler switch, such as $(DDSUBLINK dmd-windows, switch-unittest, $(B -unittest)) + $(P A compiler switch, such as $(DDSUBLINK dmd, switch-unittest, $(B -unittest)) for $(B dmd), will cause the unittest test code to be compiled and incorporated into the resulting executable. The unittest code gets run after diff --git a/spec/version.dd b/spec/version.dd index 08dcbfd46d..e22a69b694 100644 --- a/spec/version.dd +++ b/spec/version.dd @@ -109,7 +109,7 @@ else ------ $(P The $(D version(unittest)) is satisfied if and only if the code is - compiled with unit tests enabled (the $(DDSUBLINK dmd-windows, switch-unittest, $(TT -unittest)) option on $(TT dmd)). + compiled with unit tests enabled (the $(DDSUBLINK dmd, switch-unittest, $(TT -unittest)) option on $(TT dmd)). ) @@ -301,13 +301,13 @@ $(H3 $(LEGACY_LNAME2 PredefinedVersions, predefined-versions, Predefined Version $(TROW $(ARGS $(D ELFv1)) , $(ARGS The Executable and Linkable Format v1)) $(TROW $(ARGS $(D ELFv2)) , $(ARGS The Executable and Linkable Format v2)) $(TROW $(ARGS $(D D_Coverage)) , $(ARGS $(DDLINK code_coverage, Code coverage analysis, Code coverage analysis) instrumentation - (command line switch $(DDSUBLINK dmd-windows, switch-cov, $(TT -cov))) is being generated)) + (command line switch $(DDSUBLINK dmd, switch-cov, $(TT -cov))) is being generated)) $(TROW $(ARGS $(D D_Ddoc)) , $(ARGS $(DDLINK spec/ddoc, Embedded Documentation, Ddoc) documentation - (command line switch $(DDSUBLINK dmd-windows, switch-D, $(TT -D))) is being generated)) + (command line switch $(DDSUBLINK dmd, switch-D, $(TT -D))) is being generated)) $(TROW $(ARGS $(D D_InlineAsm_X86)) , $(ARGS $(DDLINK spec/iasm, Inline Assembler, Inline assembler) for X86 is implemented)) $(TROW $(ARGS $(D D_InlineAsm_X86_64)) , $(ARGS $(DDLINK spec/iasm, Inline Assembler, Inline assembler) for X86-64 is implemented)) $(TROW $(ARGS $(D D_LP64)) , $(ARGS $(B Pointers) are 64 bits - (command line switch $(DDSUBLINK dmd-windows, switch-m64, $(TT -m64))). (Do not confuse this with C's LP64 model))) + (command line switch $(DDSUBLINK dmd, switch-m64, $(TT -m64))). (Do not confuse this with C's LP64 model))) $(TROW $(ARGS $(D D_X32)) , $(ARGS Pointers are 32 bits, but words are still 64 bits (x32 ABI) (This can be defined in parallel to $(D X86_64)))) $(TROW $(ARGS $(D D_HardFloat)) , $(ARGS The target hardware has a floating point unit)) $(TROW $(ARGS $(D D_SoftFloat)) , $(ARGS The target hardware does not have a floating point unit)) @@ -316,10 +316,10 @@ $(H3 $(LEGACY_LNAME2 PredefinedVersions, predefined-versions, Predefined Version $(TROW $(ARGS $(D D_SIMD)) , $(ARGS $(DDLINK spec/simd, simd, Vector extensions) (via $(D __simd)) are supported)) $(TROW $(ARGS $(D D_Version2)) , $(ARGS This is a D version 2 compiler)) $(TROW $(ARGS $(D D_NoBoundsChecks)) , $(ARGS Array bounds checks are disabled - (command line switch $(DDSUBLINK dmd-windows, switch-boundscheck, $(TT -boundscheck=off))))) + (command line switch $(DDSUBLINK dmd, switch-boundscheck, $(TT -boundscheck=off))))) $(TROW $(ARGS $(D D_ObjectiveC)) , $(ARGS The target supports interfacing with Objective-C)) $(TROW $(ARGS $(D unittest)) , $(ARGS $(DDLINK spec/unittest, Unit Tests, Unit tests) are enabled - (command line switch $(DDSUBLINK dmd-windows, switch-unittest, $(TT -unittest))))) + (command line switch $(DDSUBLINK dmd, switch-unittest, $(TT -unittest))))) $(TROW $(ARGS $(D assert)) , $(ARGS Checks are being emitted for $(GLINK2 expression, AssertExpression)s)) $(TROW $(ARGS $(D none)) , $(ARGS Never defined; used to just disable a section of code)) $(TROW $(ARGS $(D all)) , $(ARGS Always defined; used as the opposite of $(D none))) From 2d1846be185ad55098077f6ab753ba3a786bf2d1 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Sat, 17 Jun 2017 11:06:46 +0200 Subject: [PATCH 78/78] revert/comment out #1658 for now - as we're going to revert it temporarily for 2.075 --- spec/struct.dd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/struct.dd b/spec/struct.dd index e85dfbfbb7..c01a5b896c 100644 --- a/spec/struct.dd +++ b/spec/struct.dd @@ -348,6 +348,7 @@ $(SECTION3 $(LEGACY_LNAME2 Struct-Constructor, struct-constructor, Struct Constr } ------ +$(COMMENT $(P Inside a constructor, the first occurrence (in lexical order) of assignments of the form $(CODE member = expression;) are handled differently than usual assignments. The first such assignment in lexical order is converted to a @@ -437,6 +438,7 @@ $(P If an exception is thrown at any point from within a constructor, destructors are called for all members, in reverse lexical order of their declaration. Members that have not been explicitly initialized in the constructor will have their `.init` values upon destruction.) +) $(P A constructor qualifier allows the object to be constructed with that specific qualifier.