@effekt-lang/effekt 0.37.0 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/effekt +0 -0
- package/libraries/common/effekt.effekt +0 -68
- package/libraries/common/io.effekt +1 -1
- package/libraries/llvm/rts.ll +56 -20
- package/licenses/eclipse public license, version 2.0 - epl-2.0.html +11 -7
- package/licenses/mit license - mit-license.html +39 -99
- package/licenses/the bsd license - bsd-license.html +39 -97
- package/licenses/the mit license - mit.html +35 -101
- package/package.json +1 -1
package/bin/effekt
CHANGED
|
Binary file
|
|
@@ -782,71 +782,3 @@ effect literal(s: String): Unit
|
|
|
782
782
|
effect splice[A](x: A): Unit
|
|
783
783
|
|
|
784
784
|
|
|
785
|
-
namespace internal {
|
|
786
|
-
namespace boxing {
|
|
787
|
-
// For boxing polymorphic values
|
|
788
|
-
extern type BoxedUnit
|
|
789
|
-
extern pure def boxUnit(u: Unit): Unit =
|
|
790
|
-
extern pure def unboxUnit(u: Unit): Unit =
|
|
791
|
-
|
|
792
|
-
extern type BoxedInt
|
|
793
|
-
extern pure def boxInt(n: Int): BoxedInt =
|
|
794
|
-
llvm """
|
|
795
|
-
%boxed1 = insertvalue %Pos zeroinitializer, i64 ${n}, 0
|
|
796
|
-
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
797
|
-
ret %Pos %boxed2
|
|
798
|
-
"""
|
|
799
|
-
extern pure def unboxInt(b: BoxedInt): Int =
|
|
800
|
-
llvm """
|
|
801
|
-
%unboxed = extractvalue %Pos ${b}, 0
|
|
802
|
-
ret %Int %unboxed
|
|
803
|
-
"""
|
|
804
|
-
|
|
805
|
-
extern type BoxedByte
|
|
806
|
-
extern pure def boxByte(n: Byte): BoxedByte =
|
|
807
|
-
llvm """
|
|
808
|
-
%extended = sext i8 ${n} to i64
|
|
809
|
-
%boxed1 = insertvalue %Pos zeroinitializer, i64 %extended, 0
|
|
810
|
-
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
811
|
-
ret %Pos %boxed2
|
|
812
|
-
"""
|
|
813
|
-
extern pure def unboxByte(b: BoxedByte): Byte =
|
|
814
|
-
llvm """
|
|
815
|
-
%unboxed = extractvalue %Pos ${b}, 0
|
|
816
|
-
%truncated = trunc i64 %unboxed to i8
|
|
817
|
-
ret i8 %truncated
|
|
818
|
-
"""
|
|
819
|
-
|
|
820
|
-
extern type BoxedChar
|
|
821
|
-
extern pure def boxChar(c: Char): BoxedChar =
|
|
822
|
-
llvm """
|
|
823
|
-
%boxed1 = insertvalue %Pos zeroinitializer, i64 ${c}, 0
|
|
824
|
-
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
825
|
-
ret %Pos %boxed2
|
|
826
|
-
"""
|
|
827
|
-
extern pure def unboxChar(b: BoxedChar): Char =
|
|
828
|
-
llvm """
|
|
829
|
-
%unboxed = extractvalue %Pos ${b}, 0
|
|
830
|
-
ret %Int %unboxed
|
|
831
|
-
"""
|
|
832
|
-
|
|
833
|
-
extern type BoxedBool
|
|
834
|
-
extern pure def boxBool(b: Bool): BoxedBool =
|
|
835
|
-
extern pure def unboxBool(b: BoxedBool): Bool =
|
|
836
|
-
|
|
837
|
-
extern type BoxedDouble
|
|
838
|
-
extern pure def boxDouble(d: Double): BoxedDouble =
|
|
839
|
-
llvm """
|
|
840
|
-
%n = bitcast double ${d} to i64
|
|
841
|
-
%boxed1 = insertvalue %Pos zeroinitializer, i64 %n, 0
|
|
842
|
-
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
843
|
-
ret %Pos %boxed2
|
|
844
|
-
"""
|
|
845
|
-
extern pure def unboxDouble(b: BoxedDouble): Double =
|
|
846
|
-
llvm """
|
|
847
|
-
%unboxed = extractvalue %Pos ${b}, 0
|
|
848
|
-
%d = bitcast i64 %unboxed to double
|
|
849
|
-
ret %Double %d
|
|
850
|
-
"""
|
|
851
|
-
}
|
|
852
|
-
}
|
|
@@ -16,7 +16,7 @@ extern async def spawn(task: Task[Unit]): Unit =
|
|
|
16
16
|
js "$effekt.capture(k => { setTimeout(() => k($effekt.unit), 0); return $effekt.run(${task}) })"
|
|
17
17
|
llvm """
|
|
18
18
|
call void @c_yield(%Stack %stack)
|
|
19
|
-
%unboxed = call ccc %Neg @
|
|
19
|
+
%unboxed = call ccc %Neg @coercePosNeg(%Pos ${task})
|
|
20
20
|
call void @run(%Neg %unboxed)
|
|
21
21
|
ret void
|
|
22
22
|
"""
|
package/libraries/llvm/rts.ll
CHANGED
|
@@ -120,26 +120,6 @@ declare void @exit(i64)
|
|
|
120
120
|
declare void @llvm.assume(i1)
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
; Boxing (externs functions, hence ccc)
|
|
124
|
-
define ccc %Pos @box(%Neg %input) {
|
|
125
|
-
%vtable = extractvalue %Neg %input, 0
|
|
126
|
-
%heap_obj = extractvalue %Neg %input, 1
|
|
127
|
-
%vtable_as_int = ptrtoint ptr %vtable to i64
|
|
128
|
-
%pos_result = insertvalue %Pos undef, i64 %vtable_as_int, 0
|
|
129
|
-
%pos_result_with_heap = insertvalue %Pos %pos_result, ptr %heap_obj, 1
|
|
130
|
-
ret %Pos %pos_result_with_heap
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
define ccc %Neg @unbox(%Pos %input) {
|
|
134
|
-
%tag = extractvalue %Pos %input, 0
|
|
135
|
-
%heap_obj = extractvalue %Pos %input, 1
|
|
136
|
-
%vtable = inttoptr i64 %tag to ptr
|
|
137
|
-
%neg_result = insertvalue %Neg undef, ptr %vtable, 0
|
|
138
|
-
%neg_result_with_heap = insertvalue %Neg %neg_result, ptr %heap_obj, 1
|
|
139
|
-
ret %Neg %neg_result_with_heap
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
123
|
; Prompts
|
|
144
124
|
|
|
145
125
|
define private %Prompt @currentPrompt(%Stack %stack) {
|
|
@@ -774,6 +754,62 @@ define void @run_Pos(%Neg %f, %Pos %argument) {
|
|
|
774
754
|
}
|
|
775
755
|
|
|
776
756
|
|
|
757
|
+
define ccc %Pos @coerceNegPos(%Neg %neg) {
|
|
758
|
+
%arrayPointer = extractvalue %Neg %neg, 0
|
|
759
|
+
%object = extractvalue %Neg %neg, 1
|
|
760
|
+
%tagValue = ptrtoint ptr %arrayPointer to i64
|
|
761
|
+
%boxed1 = insertvalue %Pos undef, i64 %tagValue, 0
|
|
762
|
+
%boxed2 = insertvalue %Pos %boxed1, ptr %object, 1
|
|
763
|
+
ret %Pos %boxed2
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
define ccc %Neg @coercePosNeg(%Pos %pos) {
|
|
767
|
+
%tagValue = extractvalue %Pos %pos, 0
|
|
768
|
+
%object = extractvalue %Pos %pos, 1
|
|
769
|
+
%arrayPointer = inttoptr i64 %tagValue to ptr
|
|
770
|
+
%unboxed1 = insertvalue %Neg undef, ptr %arrayPointer, 0
|
|
771
|
+
%unboxed2 = insertvalue %Neg %unboxed1, ptr %object, 1
|
|
772
|
+
ret %Neg %unboxed2
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
define ccc %Pos @coerceIntPos(%Int %input) {
|
|
776
|
+
%boxed1 = insertvalue %Pos zeroinitializer, i64 %input, 0
|
|
777
|
+
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
778
|
+
ret %Pos %boxed2
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
define ccc %Int @coercePosInt(%Pos %input) {
|
|
782
|
+
%unboxed = extractvalue %Pos %input, 0
|
|
783
|
+
ret %Int %unboxed
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
define ccc %Pos @coerceBytePos(%Byte %input) {
|
|
787
|
+
%extended = sext i8 %input to i64
|
|
788
|
+
%boxed1 = insertvalue %Pos zeroinitializer, i64 %extended, 0
|
|
789
|
+
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
790
|
+
ret %Pos %boxed2
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
define ccc %Byte @coercePosByte(%Pos %input) {
|
|
794
|
+
%unboxed = extractvalue %Pos %input, 0
|
|
795
|
+
%truncated = trunc i64 %unboxed to i8
|
|
796
|
+
ret i8 %truncated
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
define ccc %Pos @coerceDoublePos(%Double %input) {
|
|
800
|
+
%number = bitcast double %input to i64
|
|
801
|
+
%boxed1 = insertvalue %Pos zeroinitializer, i64 %number, 0
|
|
802
|
+
%boxed2 = insertvalue %Pos %boxed1, %Object null, 1
|
|
803
|
+
ret %Pos %boxed2
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
define ccc %Double @coercePosDouble(%Pos %input) {
|
|
807
|
+
%unboxed = extractvalue %Pos %input, 0
|
|
808
|
+
%d = bitcast i64 %unboxed to double
|
|
809
|
+
ret %Double %d
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
|
|
777
813
|
; Scope domains
|
|
778
814
|
!0 = !{!"types"}
|
|
779
815
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!doctype html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Eclipse Public License 2.0 (EPL) | The Eclipse Foundation</title>
|
|
2
|
-
<meta property="og:title" content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=twitter:title content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta property="og:description" content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=twitter:description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=author content="Wayne Beaton"><link href=/favicon.ico rel=icon type=image/x-icon><meta property="og:image" content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:image content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:card content="summary"><meta name=twitter:site content="@eclipsefdn"><meta name=twitter:creator content="@eclipsefdn"><meta property="og:url" content="https://www.eclipse.org/legal/epl-2.0/"><meta property="og:type" content="website"><meta property="og:site_name" content="Eclipse Foundation"><meta name=keywords content="epl,epl-2.0,legal,foundation,eclipse,eclipse public license,license,licenses"><meta name=generator content="Hugo 0.144.2"><link rel=canonical href=https://www.eclipse.org/legal/epl-2.0/><link rel=alternate href=/legal/epl-2.0/index.xml type=application/rss+xml title><link rel=stylesheet href="/public/css/styles.css?v=
|
|
2
|
+
<meta property="og:title" content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=twitter:title content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta property="og:description" content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=twitter:description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=author content="Wayne Beaton"><link href=/favicon.ico rel=icon type=image/x-icon><meta property="og:image" content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:image content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:card content="summary"><meta name=twitter:site content="@eclipsefdn"><meta name=twitter:creator content="@eclipsefdn"><meta property="og:url" content="https://www.eclipse.org/legal/epl-2.0/"><meta property="og:type" content="website"><meta property="og:site_name" content="Eclipse Foundation"><meta name=keywords content="epl,epl-2.0,legal,foundation,eclipse,eclipse public license,license,licenses"><meta name=generator content="Hugo 0.144.2"><link rel=canonical href=https://www.eclipse.org/legal/epl-2.0/><link rel=alternate href=/legal/epl-2.0/index.xml type=application/rss+xml title><link rel=stylesheet href="/public/css/styles.css?v=1753035361"><script>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-5WLCZXC")</script><script>var tableClasses="table"</script><link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet type=text/css></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5WLCZXC" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><a class=sr-only href=#content>Skip to main content</a><header class="header-wrapper header-wrapper" id=header><div class=header-toolbar><div class=container><div class=header-toolbar-row><div class="toolbar-btn toolbar-search-btn dropdown"><button class=dropdown-toggle id=toolbar-search type=button data-toggle=dropdown tabindex=0 aria-label=Search>
|
|
3
3
|
<i class="fa fa-search fa-lg" aria-role=none></i></button><div class="toolbar-search-bar-wrapper dropdown-menu dropdown-menu-right" aria-labelledby=toolbar-search><form action=https://www.eclipse.org/home/search method=get><div class=search-bar><input class=search-bar-input name=q placeholder=Search>
|
|
4
4
|
<button>
|
|
5
5
|
<i class="fa fa-search" type=submit></i></button></div></form></div></div><div class="toolbar-btn toolbar-user-menu-btn dropdown"><button class=dropdown-toggle id=toolbar-user-menu type=button data-toggle=dropdown tabindex=0 aria-label="User Menu">
|
|
@@ -50,14 +50,18 @@ open source software collaboration and innovation.</p></div><div class=mega-menu
|
|
|
50
50
|
<i class="main-sidebar-item-icon fa fa-chevron-down" aria-hidden=true></i></a><div class=collapse id=legal-licenses><ul class="main-sidebar-item-submenu list-unstyled"><li class=submenu-item><a class=link-unstyled href=/legal/licenses#approved target=_self>Approved 3rd Party</a></li><li class=submenu-item><a class=link-unstyled href=/legal/licenses#nonapproved target=_self>Non Approved</a></li><li class=submenu-item><a class=link-unstyled href=/projects/handbook/#ip-copyright-headers target=_self>File Headers</a></li><li class=submenu-item><a class=link-unstyled href=/legal/non-code-licenses target=_self>Docs & Examples</a></li></ul></div></li></li><li class="main-sidebar-item main-sidebar-item-indented"><li class="main-sidebar-item main-sidebar-item-indented"><a class=link-unstyled role=button data-toggle=collapse href=#legal-specs aria-expanded=false aria-controls=legal-specs><span>Specifications</span>
|
|
51
51
|
<i class="main-sidebar-item-icon fa fa-chevron-down" aria-hidden=true></i></a><div class=collapse id=legal-specs><ul class="main-sidebar-item-submenu list-unstyled"><li class=submenu-item><a class=link-unstyled href=/projects/efsp/ target=_self>Specifications Process</a></li><li class=submenu-item><a class=link-unstyled href=/projects/efsp/operations.php target=_self>Specifications Operations</a></li><li class=submenu-item><a class=link-unstyled href=/legal/efsl target=_self>Specification License</a></li><li class=submenu-item><a class=link-unstyled href=/legal/tck target=_self>TCK License</a></li></ul></div></li></li></ul></aside></div></div></div></main><div class="eclipsefdn-featured-footer featured-footer" id=featured-footer data-publish-target=eclipse_org><div class=container><div class=row><div class="col-sm-24 featured-container"></div></div></div></div><p id=back-to-top><a class=visible-xs href=#>Back to the top</a></p><footer class=footer id=footer><div class=container><div class="footer-end-social-container margin-bottom-30"><div class=footer-end-social><p class="footer-end-social-text hidden-xs">Follow Us:</p><ul class="footer-end-social-links list-inline"><li><a class=link-unstyled href=https://x.com/EclipseFdn title="X account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
52
52
|
<i class="fa-brands fa-x-twitter fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
53
|
-
<span class=sr-only>X account</span></span></a></li><li><a class=link-unstyled href=https://bsky.app/profile/
|
|
53
|
+
<span class=sr-only>X account</span></span></a></li><li><a class=link-unstyled href=https://bsky.app/profile/eclipse.org title="Bluesky account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
54
54
|
<i class="fa-brands fa-bluesky fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
55
|
-
<span class=sr-only>Bluesky account</span></span></a></li><li><a class=link-unstyled href=https://
|
|
55
|
+
<span class=sr-only>Bluesky account</span></span></a></li><li><a class=link-unstyled href=https://mastodon.social/@EclipseFdn title="Mastodon account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
56
|
+
<i class="fa-brands fa-mastodon fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
57
|
+
<span class=sr-only>Mastodon account</span></span></a></li><li><a class=link-unstyled href=https://www.facebook.com/eclipse.org title="Facebook account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
56
58
|
<i class="fa-brands fa-facebook-f fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
57
|
-
<span class=sr-only>Facebook account</span></span></a></li><li><a class=link-unstyled href=https://www.
|
|
59
|
+
<span class=sr-only>Facebook account</span></span></a></li><li><a class=link-unstyled href=https://www.instagram.com/eclipsefoundation/ title="Instagram account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
60
|
+
<i class="fa-brands fa-instagram fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
61
|
+
<span class=sr-only>Instagram account</span></span></a></li><li><a class=link-unstyled href=https://www.youtube.com/user/EclipseFdn title="YouTube account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
58
62
|
<i class="fa-brands fa-youtube fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
59
|
-
<span class=sr-only>
|
|
63
|
+
<span class=sr-only>YouTube account</span></span></a></li><li><a class=link-unstyled href=https://www.linkedin.com/company/eclipse-foundation title="LinkedIn account"><span class=fa-stack><i class="fa-solid fa-circle fa-stack-2x" aria-hidden=true></i>
|
|
60
64
|
<i class="fa-brands fa-linkedin-in fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
61
|
-
<span class=sr-only>
|
|
65
|
+
<span class=sr-only>LinkedIn account</span></span></a></li></ul></div></div><div class="footer-sections row equal-height-md font-bold"><div class=col-md-15><div class=row><section id=footer-eclipse-foundation class="footer-section col-sm-8"><div class=menu-heading>Eclipse Foundation</div><ul class=nav><li><a href=https://www.eclipse.org/org/>About</a></li><li><a href=https://projects.eclipse.org/>Projects</a></li><li><a href=https://www.eclipse.org/collaborations/>Collaborations</a></li><li><a href=https://www.eclipse.org/membership/>Membership</a></li><li><a href=https://www.eclipse.org/sponsor/>Sponsor</a></li></ul></section><section id=footer-legal class="footer-section col-sm-8"><div class=menu-heading>Legal</div><ul class=nav><li><a href=https://www.eclipse.org/legal/privacy/>Privacy Policy</a></li><li><a href=https://www.eclipse.org/legal/terms-of-use/>Terms of Use</a></li><li><a href=https://www.eclipse.org/legal/compliance/>Compliance</a></li><li><a href=https://www.eclipse.org/org/documents/Community_Code_of_Conduct.php>Code of Conduct</a></li><li><a href=https://www.eclipse.org/legal/>Legal Resources</a></li><li><a class=toolbar-manage-cookies href=# onclick=event.preventDefault()>Manage Cookies</a></li></ul></section><section id=footer-more class="footer-section col-sm-8"><div class=menu-heading>More</div><ul class=nav><li><a href=https://www.eclipse.org/security/>Report a Vulnerability</a></li><li><a href=https://status.eclipse.org/>Service Status</a></li><li><a href=https://www.eclipse.org/org/foundation/contact.php>Contact Us</a></li><li><a href=https://www.eclipse.org/projects/support/>Support</a></li></ul></section></div></div><div id=footer-end class="footer-section col-md-8 col-md-offset-1 col-sm-24"><div class=footer-end-newsletter><form id=mc-embedded-subscribe-form action="https://eclipse.us6.list-manage.com/subscribe/post?u=eaf9e1f06f194eadc66788a85&id=e7538485cd&f_id=00f9c2e1f0" method=post novalidate target=_blank><label class=footer-end-newsletter-label for=email>Subscribe to our Newsletter</label><div class=footer-end-newsletter-input-wrapper><input class=footer-end-newsletter-input type=email id=email name=EMAIL autocomplete=email placeholder="Enter your email address">
|
|
62
66
|
<button class="footer-end-newsletter-submit btn btn-link" id=mc-embedded-subscribe type=submit name=subscribe>
|
|
63
|
-
<i class="fa fa-solid fa-envelope fa-lg" aria-hidden=true></i></button></div></form></div></div></div><div class="col-sm-24 margin-top-20"><div class=row><div id=copyright class=col-md-16><p id=copyright-text>Copyright © Eclipse Foundation AISBL. All Rights Reserved.</p></div></div></div><a href=# class=scrollup>Back to the top</a></div></footer><div id=footer-js><script src="/public/js/main.js?v1.0?v=
|
|
67
|
+
<i class="fa fa-solid fa-envelope fa-lg" aria-hidden=true></i></button></div></form></div></div></div><div class="col-sm-24 margin-top-20"><div class=row><div id=copyright class=col-md-16><p id=copyright-text>Copyright © Eclipse Foundation AISBL. All Rights Reserved.</p></div></div></div><a href=# class=scrollup>Back to the top</a></div></footer><div id=footer-js><script src="/public/js/main.js?v1.0?v=1753035361"></script><script>(function(){})(jQuery,document)</script></div></body></html>
|