diff --git a/Build/Build.CI2.train b/Build/Build.CI2.train
index fc35117..bd6e709 100644
--- a/Build/Build.CI2.train
+++ b/Build/Build.CI2.train
@@ -65,6 +65,63 @@ compileGoBaseLibrary();
zipName = expand("$(CIReleaseFolder)/GoBaseLibrary.zip");
zip.compress(zipName, "../Bin", "*.*", true);
+zipIslandMac = expand("$(CIReleaseFolder)/Island-macOS-Go.zip");
+zip.compress(zipIslandMac, "../Bin/Island", "macOS/*.*", true);
+
+var temp_ios = "../Bin/temp_ios";
+folder.create(temp_ios);
+file.copy(path.combine("../Bin/Island/iOS/", "*.*"), path.combine(temp_ios, "iOS"), true);
+file.copy(path.combine("../Bin/Island/iOS Simulator/", "*.*"), path.combine(temp_ios, "iOS Simulator"), true);
+file.copy(path.combine("../Bin/Island/Mac Catalyst/", "*.*"), path.combine(temp_ios, "Mac Catalyst"), true);
+zipIslandiOS = expand("$(CIReleaseFolder)/Island-iOS-Go.zip");
+zip.compress(zipIslandiOS, temp_ios, "*.*", true);
+folder.remove(temp_ios);
+//zip.compress(zipIslandiOS, "../Bin", "iOS/*/Go.*;iOS\ Simulator/*/Go.*;Mac\ Catalyst/*/Go.*", true);
+
+var temp_tvos = "../Bin/temp_tvos";
+folder.create(temp_tvos);
+file.copy(path.combine("../Bin/Island/tvOS/", "*.*"), path.combine(temp_tvos, "tvOS"), true);
+file.copy(path.combine("../Bin/Island/tvOS Simulator/", "*.*"), path.combine(temp_tvos, "tvOS Simulator"), true);
+zipIslandtvOS = expand("$(CIReleaseFolder)/Island-tvOS-Go.zip");
+zip.compress(zipIslandtvOS, temp_tvos, "*.*", true);
+folder.remove(temp_tvos);
+//zip.compress(zipIslandtvOS, "../Bin", "tvOS/*/Go.*;tvOS\ Simulator/*/Go.*", true);
+
+var temp_watchos = "../Bin/temp_watchos";
+folder.create(temp_watchos);
+file.copy(path.combine("../Bin/Island/watchOS/", "*.*"), path.combine(temp_watchos, "watchOS"), true);
+file.copy(path.combine("../Bin/Island/watchOS Simulator/", "*.*"), path.combine(temp_watchos, "watchOS Simulator"), true);
+zipIslandwatchOS = expand("$(CIReleaseFolder)/Island-watchOS-Go.zip");
+zip.compress(zipIslandwatchOS, temp_watchos, "*.*", true);
+folder.remove(temp_watchos);
+//zip.compress(zipIslandwatchOS, "../Bin", "watchOS/*/Go.*;watchOS\ Simulator/*/Go.*", true);
+
+zipIslandAndroid = expand("$(CIReleaseFolder)/Island-Android-Go.zip");
+zip.compress(zipIslandAndroid, "../Bin/Island", "Android/*.*", true);
+
+zipIslandUbuntu = expand("$(CIReleaseFolder)/Island-Ubuntu-Go.zip");
+zip.compress(zipIslandUbuntu, "../Bin/Island", "Ubuntu/*.*", true);
+
+zipIslandWindows = expand("$(CIReleaseFolder)/Island-Windows-Go.zip");
+zip.compress(zipIslandWindows, "../Bin/Island", "Windows/*.*", true);
+
+zipEchoes = expand("$(CIReleaseFolder)/Echoes-Go.zip");
+zip.compress(zipEchoes, "../Bin/Echoes", "*.*", true);
+
+zipCooper = expand("$(CIReleaseFolder)/Cooper-Go.zip");
+zip.compress(zipCooper, "../Bin/Cooper", "*.*", true);
+
+
var s3 = getSharedS3Bucket();
s3.uploadFile(zipName, ciSharedPrefix);
+s3.uploadFile(zipIslandMac, ciSharedPrefix);
+s3.uploadFile(zipIslandiOS, ciSharedPrefix);
+s3.uploadFile(zipIslandtvOS, ciSharedPrefix);
+s3.uploadFile(zipIslandwatchOS, ciSharedPrefix);
+s3.uploadFile(zipIslandAndroid, ciSharedPrefix);
+s3.uploadFile(zipIslandUbuntu, ciSharedPrefix);
+s3.uploadFile(zipIslandWindows, ciSharedPrefix);
+s3.uploadFile(zipEchoes, ciSharedPrefix);
+s3.uploadFile(zipCooper, ciSharedPrefix);
+
diff --git a/Source/Gold/Complex.pas b/Source/Gold/Complex.pas
index 0553d75..05642f5 100644
--- a/Source/Gold/Complex.pas
+++ b/Source/Gold/Complex.pas
@@ -72,12 +72,12 @@
exit new complex64(r := x.r, i := x.i);
end;
- operator Equal(a, b: complex128): Boolean;
+ operator Equal(a, b: complex64): Boolean;
begin
exit (a.r = b.r) and (a.i = b.i);
end;
- operator NotEqual(a, b: complex128): Boolean;
+ operator NotEqual(a, b: complex64): Boolean;
begin
exit (a.r <> b.r) or (a.i <> b.i);
end;
diff --git a/Source/Gold/Gold.elements b/Source/Gold/Gold.elements
index 80952a4..23e3593 100644
--- a/Source/Gold/Gold.elements
+++ b/Source/Gold/Gold.elements
@@ -8,7 +8,7 @@
H0;W63;W3;H10;H11;H7;H8;H6;H14;H16
Release
True
- .NETFramework4.5
+ .NETFramework4.8
go
True
@@ -41,7 +41,6 @@
Island
Windows
- i386
StaticLibrary
@@ -56,6 +55,7 @@
macOS
POSIX;math_big_pure_go
StaticLibrary
+ arm64;x86_64
Island
@@ -86,7 +86,7 @@
StaticLibrary
-
+
..\GoldAspect\Bin\Debug\GoldAspect.dll
{631D3965-3D71-4DFD-9864-EBF841EA6192}
..\GoldAspect\GoldAspect.elements
@@ -313,7 +313,7 @@
-
+
diff --git a/Source/Gold/Gold.pas b/Source/Gold/Gold.pas
index 1af252f..85bb106 100644
--- a/Source/Gold/Gold.pas
+++ b/Source/Gold/Gold.pas
@@ -832,6 +832,11 @@ CloneHelper = class
if v is T then
exit (T(v), true);
+
+ if v is IMemory then begin
+ if IMemory(v).GetValue is T then
+ exit (IMemory(v).GetValue as T, true);
+ end;
{$IFDEF ISLAND}
if VTCheck.IsVT then
exit (typeOf(T).Instantiate as T, false);
diff --git a/Source/Gold/Net.pas b/Source/Gold/Net.pas
index 20d88ca..9b4d485 100644
--- a/Source/Gold/Net.pas
+++ b/Source/Gold/Net.pas
@@ -830,7 +830,7 @@
// Network and address parameters passed to Control method are not
// necessarily the ones passed to Dial. For example, passing "tcp" to Dial
// will cause the Control function to be called with "tcp4" or "tcp6".
- Control: method(network, address: string; c: go.syscall.RawConn): go.builtin.error; // Go 1.11
+ Control: delegate(network, address: string; c: go.syscall.RawConn): go.builtin.error; // Go 1.11
method Dial(network, address: string): tuple of (Conn, go.builtin.error);
begin
diff --git a/Source/Gold/Properties/AssemblyInfo.pas b/Source/Gold/Properties/AssemblyInfo.pas
index fc14886..c59f643 100644
--- a/Source/Gold/Properties/AssemblyInfo.pas
+++ b/Source/Gold/Properties/AssemblyInfo.pas
@@ -7,7 +7,7 @@
System.Resources,
System.Runtime.InteropServices;
-[assembly: AssemblyTitle('RemObhjects Elements Gold Support Library')]
+[assembly: AssemblyTitle('RemObjects Elements Gold Support Library')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('RemObjects Software, LLC')]
diff --git a/Source/Gold/Reflect.pas b/Source/Gold/Reflect.pas
index 7d96e6c..168bce6 100644
--- a/Source/Gold/Reflect.pas
+++ b/Source/Gold/Reflect.pas
@@ -1390,7 +1390,7 @@ MethodImpl = class(&Method)
result := new TypeImpl(v.GetType());
end;
- method Swapper(aslice: Object): method(arg0: go.builtin.int; arg1: go.builtin.int); public;
+ method Swapper(aslice: Object): delegate(arg0: go.builtin.int; arg1: go.builtin.int); public;
begin
exit @go.sort.Interface(aslice).Swap;
end;
diff --git a/Source/Gold/Sync.pas b/Source/Gold/Sync.pas
index 704ec83..b0e8e4f 100644
--- a/Source/Gold/Sync.pas
+++ b/Source/Gold/Sync.pas
@@ -201,7 +201,7 @@
fLock: Object := new Object;
{$ENDIF}
public
- method &Do(a: method());
+ method &Do(a: delegate());
begin
if fDone = 1 then exit;
locking fLock do begin
diff --git a/Source/Gold/crypto/aes/cipher_generic.go b/Source/Gold/crypto/aes/cipher_generic.go
index 80a68b4..ac28b50 100644
--- a/Source/Gold/crypto/aes/cipher_generic.go
+++ b/Source/Gold/crypto/aes/cipher_generic.go
@@ -1,8 +1,9 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!s390x,!ppc64le,!arm64
+// +build !amd64,!s390x,!ppc64le
+//##,!arm64
package aes
@@ -23,4 +24,4 @@ func newCipher(key []byte) (cipher.Block, error) {
// call an assembly implementation if one is available.
func expandKey(key []byte, enc, dec []uint32) {
expandKeyGo(key, enc, dec)
-}
+}
\ No newline at end of file
diff --git a/Source/Gold/crypto/elliptic/p256_elements.go b/Source/Gold/crypto/elliptic/p256_elements.go
index e5f7c6f..a97fccd 100644
--- a/Source/Gold/crypto/elliptic/p256_elements.go
+++ b/Source/Gold/crypto/elliptic/p256_elements.go
@@ -1,8 +1,9 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!arm64
+// +build !amd64
+//##,!arm64
package elliptic
@@ -1193,4 +1194,4 @@ func p256ToBig(in *[p256Limbs]uint32) *big.Int {
result.Mul(result, p256RInverse)
result.Mod(result, p256Params.P)
return result
-}
+}
\ No newline at end of file
diff --git a/Source/Gold/crypto/elliptic/p256_generic.go b/Source/Gold/crypto/elliptic/p256_generic.go
index 9427331..428445c 100644
--- a/Source/Gold/crypto/elliptic/p256_generic.go
+++ b/Source/Gold/crypto/elliptic/p256_generic.go
@@ -1,8 +1,9 @@
-// Copyright 2016 The Go Authors. All rights reserved.
+// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!s390x,!arm64
+// +build !amd64,!s390x
+//##,!arm64
package elliptic
@@ -13,4 +14,4 @@ var (
func initP256Arch() {
// Use pure Go implementation.
p256 = p256Curve{p256Params}
-}
+}
\ No newline at end of file
diff --git a/Source/Gold/crypto/md5/md5block_decl.go b/Source/Gold/crypto/md5/md5block_decl.go
index 1ac82cf..99e04ed 100644
--- a/Source/Gold/crypto/md5/md5block_decl.go
+++ b/Source/Gold/crypto/md5/md5block_decl.go
@@ -1,8 +1,9 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build amd64 amd64p32 386 arm ppc64le ppc64 s390x arm64
+// +build amd64 amd64p32 386 arm ppc64le ppc64 s390x
+//##arm64
package md5
@@ -10,4 +11,4 @@ const haveAsm = true
//go:noescape
-func block(dig *digest, p []byte)
+func block(dig *digest, p []byte)
\ No newline at end of file
diff --git a/Source/Gold/crypto/md5/md5block_generic.go b/Source/Gold/crypto/md5/md5block_generic.go
index 86e3b64..684edd1 100644
--- a/Source/Gold/crypto/md5/md5block_generic.go
+++ b/Source/Gold/crypto/md5/md5block_generic.go
@@ -1,11 +1,12 @@
-// Copyright 2014 The Go Authors. All rights reserved.
+// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!amd64p32,!386,!arm,!ppc64le,!ppc64,!s390x,!arm64
+// +build !amd64,!amd64p32,!386,!arm,!ppc64le,!ppc64,!s390x
+//##,!arm64
package md5
const haveAsm = false
-var block = blockGeneric
+var block = blockGeneric
\ No newline at end of file
diff --git a/Source/Gold/crypto/sha1/sha1block_generic.go b/Source/Gold/crypto/sha1/sha1block_generic.go
index 5823e08..5a11447 100644
--- a/Source/Gold/crypto/sha1/sha1block_generic.go
+++ b/Source/Gold/crypto/sha1/sha1block_generic.go
@@ -1,9 +1,10 @@
-// Copyright 2014 The Go Authors. All rights reserved.
+// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!amd64p32,!386,!arm,!s390x,!arm64
+// +build !amd64,!amd64p32,!386,!arm,!s390x
+//##,!arm64
package sha1
-var block = blockGeneric
+var block = blockGeneric
\ No newline at end of file
diff --git a/Source/Gold/crypto/sha256/sha256block_generic.go b/Source/Gold/crypto/sha256/sha256block_generic.go
index 61362f4..81bc4ad 100644
--- a/Source/Gold/crypto/sha256/sha256block_generic.go
+++ b/Source/Gold/crypto/sha256/sha256block_generic.go
@@ -1,9 +1,10 @@
-// Copyright 2016 The Go Authors. All rights reserved.
+// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!386,!s390x,!ppc64le,!arm64
+// +build !amd64,!386,!s390x,!ppc64le
+//##,!arm64
package sha256
-var block = blockGeneric
+var block = blockGeneric
\ No newline at end of file
diff --git a/Source/Gold/hash/crc32/crc32_otherarch.go b/Source/Gold/hash/crc32/crc32_otherarch.go
index 6f3510a..a80741c 100644
--- a/Source/Gold/hash/crc32/crc32_otherarch.go
+++ b/Source/Gold/hash/crc32/crc32_otherarch.go
@@ -1,8 +1,9 @@
-// Copyright 2011 The Go Authors. All rights reserved.
+// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !amd64,!amd64p32,!s390x,!ppc64le,!arm64
+// +build !amd64,!amd64p32,!s390x,!ppc64le
+//##,!arm64
package crc32
@@ -12,4 +13,4 @@ func archUpdateIEEE(crc uint32, p []byte) uint32 { panic("not available") }
func archAvailableCastagnoli() bool { return false }
func archInitCastagnoli() { panic("not available") }
-func archUpdateCastagnoli(crc uint32, p []byte) uint32 { panic("not available") }
+func archUpdateCastagnoli(crc uint32, p []byte) uint32 { panic("not available") }
\ No newline at end of file
diff --git a/Source/Gold/net/http/client.go b/Source/Gold/net/http/client_elements.go
similarity index 99%
rename from Source/Gold/net/http/client.go
rename to Source/Gold/net/http/client_elements.go
index 20496d2..fccb04d 100644
--- a/Source/Gold/net/http/client.go
+++ b/Source/Gold/net/http/client_elements.go
@@ -1,4 +1,4 @@
-// Copyright 2009 The Go Authors. All rights reserved.
+// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -330,7 +330,9 @@ func setRequestCancel(req *Request, rt RoundTripper, deadline time.Time) (stopTi
}
}()
- return stopTimer, timedOut.isSet
+ // elements, modification due to: E26781: Gold-Echoes: AV using atomic.StoreInt32
+ //return stopTimer, timedOut.isSet
+ return stopTimer, func() bool { return timedOut.isSet() }
}
// See 2 (end of page 4) https://www.ietf.org/rfc/rfc2617.txt
@@ -931,4 +933,4 @@ func stripPassword(u *url.URL) string {
return strings.Replace(u.String(), u.User.String()+"@", u.User.Username()+":***@", 1)
}
return u.String()
-}
+}
\ No newline at end of file
diff --git a/Source/Gold/os.pas b/Source/Gold/os.pas
index 4847375..1743dfb 100644
--- a/Source/Gold/os.pas
+++ b/Source/Gold/os.pas
@@ -461,7 +461,7 @@
{$ELSE}
var lArgs := new String[ExternalCalls.nargs];
for i: Integer := 0 to ExternalCalls.nargs - 1 do
- lArgs[i] := String.FromPAnsiChars(ExternalCalls.args[i]);
+ lArgs[i] := String.FromPAnsiChar(ExternalCalls.args[i]);
exit lArgs;
{$ENDIF}
end;
diff --git a/Source/GoldAspect/GoldAspect.elements b/Source/GoldAspect/GoldAspect.elements
index 60bde3c..96e7e3c 100644
--- a/Source/GoldAspect/GoldAspect.elements
+++ b/Source/GoldAspect/GoldAspect.elements
@@ -7,7 +7,7 @@
Library
GoldAspect
Release
- v4.0
+ .NETStandard2.0
False
@@ -27,21 +27,7 @@
False
-
-
-
-
-
-
-
- 3.5
-
-
- 3.5
-
-
- 3.5
-
+
diff --git a/Source/GoldAspect/Main.pas b/Source/GoldAspect/Main.pas
index 932fac7..e7eb2bc 100644
--- a/Source/GoldAspect/Main.pas
+++ b/Source/GoldAspect/Main.pas
@@ -43,7 +43,8 @@
"crypto.sha512",
"errors",
"fmt"]);*/
- var lType := Services.GetType('go.net.http.atomicBool');
+
+ {var lType := Services.GetType('go.net.http.atomicBool');
ITypeDefinition(lType).RemoveMethod(lType.GetStaticMethods('isSet')[0] as IMethodDefinition);
ITypeDefinition(lType).RemoveMethod(lType.GetStaticMethods('setTrue')[0] as IMethodDefinition);
var lPar := new SelfValue;
@@ -56,9 +57,9 @@
lsetTrue.ReplaceMethodBody(
new StandaloneStatement(
new ProcValue(new TypeValue(Services.GetType('go.sync.atomic.__Global')), 'StoreInt32', [new FieldValue(lPar, lType, 'Value'), new DataValue(1)])
- ));
+ ));}
- lType := Services.GetType('go.net.http.__Global');
+ var lType := Services.GetType('go.net.http.__Global');
var lMethod := lType.GetStaticMethods('http2isNoCachedConnError')[0] as IMethodDefinition;
lMethod.ReplaceMethodBody(
new ExitStatement(new BinaryValue(new ParamValue(0), new TypeValue(Services.GetType('go.net.http.http2noCachedConnError')), BinaryOperator.Is))
diff --git a/Tests/GoldLibrary.Tests.Echoes.elements b/Tests/GoldLibrary.Tests.Echoes.elements
index 9caf422..62bf642 100644
--- a/Tests/GoldLibrary.Tests.Echoes.elements
+++ b/Tests/GoldLibrary.Tests.Echoes.elements
@@ -19,12 +19,14 @@
v25
False
True
+ .NETFramework4.8
.\Bin\Release
anycpu
v25
False
+ .NETFramework4.8