@effekt-lang/effekt 0.18.0 → 0.19.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/buffer.effekt +3 -3
- package/libraries/common/bytearray.effekt +64 -1
- package/libraries/common/effekt.effekt +23 -10
- package/libraries/common/io/network.effekt +8 -5
- package/libraries/common/json.effekt +30 -22
- package/libraries/common/map.effekt +992 -0
- package/libraries/common/regex.effekt +64 -0
- package/libraries/common/set.effekt +234 -0
- package/libraries/common/stream.effekt +45 -0
- package/libraries/common/string.effekt +7 -0
- package/libraries/llvm/bytearray.c +36 -7
- package/libraries/llvm/forward-declare-c.ll +1 -0
- package/libraries/llvm/main.c +1 -0
- package/licenses/eclipse public license, version 2.0 - epl-2.0.html +2 -2
- package/licenses/mit license - mit-license.html +15 -11
- package/licenses/the bsd license - bsd-license.html +16 -12
- package/licenses/the mit license - mit.html +15 -11
- package/package.json +1 -1
- package/libraries/chez/common/text/regex.effekt +0 -31
- package/libraries/js/text/regex.effekt +0 -33
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module regex
|
|
2
|
+
|
|
3
|
+
import string
|
|
4
|
+
|
|
5
|
+
extern include chez "text/pregexp.scm"
|
|
6
|
+
|
|
7
|
+
extern type Regex
|
|
8
|
+
|
|
9
|
+
record Match(matched: String, index: Int)
|
|
10
|
+
|
|
11
|
+
extern pure def regex(str: String): Regex =
|
|
12
|
+
js "new RegExp(${str})"
|
|
13
|
+
chez "(pregexp ${str})"
|
|
14
|
+
vm "regex::regex(String)"
|
|
15
|
+
|
|
16
|
+
def exec(reg: Regex, str: String): Option[Match] = {
|
|
17
|
+
val v = internal::exec(reg, str)
|
|
18
|
+
if (v.isUndefined)
|
|
19
|
+
None()
|
|
20
|
+
else
|
|
21
|
+
Some(Match(internal::matched(v), internal::index(v)))
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
namespace internal {
|
|
25
|
+
|
|
26
|
+
/// The type RegexMatch is used internally to represent platform
|
|
27
|
+
/// dependent results of matching a regex.
|
|
28
|
+
extern type RegexMatch
|
|
29
|
+
// js: { matched: String, index: Int } | undefined
|
|
30
|
+
// vm: scala.util.matching.Regex.Match | null
|
|
31
|
+
|
|
32
|
+
extern pure def matched(r: RegexMatch): String =
|
|
33
|
+
js "${r}.matched"
|
|
34
|
+
chez "(vector-ref ${r} 0)"
|
|
35
|
+
vm "regex::matched(RegexMatch)"
|
|
36
|
+
|
|
37
|
+
extern pure def index(r: RegexMatch): Int =
|
|
38
|
+
js "${r}.index"
|
|
39
|
+
chez "(vector-ref ${r} 1)"
|
|
40
|
+
vm "regex::index(RegexMatch)"
|
|
41
|
+
|
|
42
|
+
extern js """
|
|
43
|
+
function regex$exec(reg, str) {
|
|
44
|
+
var res = reg.exec(str);
|
|
45
|
+
if (res === null) { return undefined }
|
|
46
|
+
else { return { matched: res[0], index: res.index } }
|
|
47
|
+
}
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
extern chez """
|
|
51
|
+
(define regex-exec
|
|
52
|
+
(lambda (regex str)
|
|
53
|
+
(let* ([positions (pregexp-match-positions regex str)]
|
|
54
|
+
[match (pregexp-match regex str)])
|
|
55
|
+
(if (and positions match)
|
|
56
|
+
(vector (car match) (caar positions))
|
|
57
|
+
#f))))
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
extern io def exec(reg: Regex, str: String): RegexMatch =
|
|
61
|
+
js "regex$exec(${reg}, ${str})"
|
|
62
|
+
chez "(regex-exec ${reg} ${str})"
|
|
63
|
+
vm "regex::exec(Regex, String)"
|
|
64
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
module set
|
|
2
|
+
|
|
3
|
+
import map
|
|
4
|
+
|
|
5
|
+
/// Ordered finite immutable set, backed by balanced binary trees of logarithmic depth.
|
|
6
|
+
record Set[A](tree: internal::Tree[A, Unit], compare: (A, A) => Ordering at {})
|
|
7
|
+
|
|
8
|
+
/// Create a new empty set using a pure, first-class comparison function.
|
|
9
|
+
///
|
|
10
|
+
/// O(1)
|
|
11
|
+
def empty[A](compare: (A, A) => Ordering at {}): Set[A] =
|
|
12
|
+
Set(internal::empty(), compare)
|
|
13
|
+
|
|
14
|
+
/// Create a new empty set using a generic comparison function.
|
|
15
|
+
/// Only available on JavaScript backends!
|
|
16
|
+
///
|
|
17
|
+
/// O(1)
|
|
18
|
+
def emptyGeneric[A](): Set[A] =
|
|
19
|
+
Set(
|
|
20
|
+
internal::empty(),
|
|
21
|
+
box { (left: A, right: A) => genericCompare(left, right) }
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
/// Check if set `s` is empty.
|
|
25
|
+
///
|
|
26
|
+
/// O(1)
|
|
27
|
+
def isEmpty[A](s: Set[A]): Bool = internal::isEmpty(s.tree)
|
|
28
|
+
|
|
29
|
+
/// Check if set `s` is nonempty.
|
|
30
|
+
///
|
|
31
|
+
/// O(1)
|
|
32
|
+
def nonEmpty[A](s: Set[A]): Bool = internal::nonEmpty(s.tree)
|
|
33
|
+
|
|
34
|
+
/// Create a new set containing a single `element`.
|
|
35
|
+
/// Requires a pure, first-class comparison function.
|
|
36
|
+
///
|
|
37
|
+
/// O(1)
|
|
38
|
+
def singleton[A](element: A, compare: (A, A) => Ordering at {}): Set[A] =
|
|
39
|
+
Set(internal::singleton(element, ()), compare)
|
|
40
|
+
|
|
41
|
+
/// Create a new set containing a single `element` and a generic comparison function.
|
|
42
|
+
/// Only available on the JavaScript backends!
|
|
43
|
+
///
|
|
44
|
+
/// O(1)
|
|
45
|
+
def singletonGeneric[A](element: A): Set[A] =
|
|
46
|
+
Set(
|
|
47
|
+
internal::singleton(element, ()),
|
|
48
|
+
box { (left: A, right: A) => genericCompare(left, right) }
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
/// Get the size of the set (the number of its elements).
|
|
52
|
+
///
|
|
53
|
+
/// O(1)
|
|
54
|
+
def size[A](s: Set[A]): Int = internal::size(s.tree)
|
|
55
|
+
|
|
56
|
+
/// Insert a new element `a` into the set `s`.
|
|
57
|
+
///
|
|
58
|
+
/// O(log N)
|
|
59
|
+
def insert[A](s: Set[A], a: A): Set[A] = {
|
|
60
|
+
val newTree = internal::put(s.tree, s.compare, a, ())
|
|
61
|
+
Set(newTree, s.compare)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// Create a set from a given map by ignoring the values.
|
|
65
|
+
///
|
|
66
|
+
/// O(N)
|
|
67
|
+
def fromMapKeys[K, V](map: Map[K, V]): Set[K] =
|
|
68
|
+
Set(internal::forget(map.tree), map.compare)
|
|
69
|
+
|
|
70
|
+
/// Create a map from a set and a function,
|
|
71
|
+
/// reusing the set's comparison.
|
|
72
|
+
///
|
|
73
|
+
/// O(N)
|
|
74
|
+
def toMap[K, V](keys: Set[K]) { valueOf: K => V }: Map[K, V] = {
|
|
75
|
+
val newTree: internal::Tree[K, V] = internal::map(keys.tree) { (k, _v) => valueOf(k) }
|
|
76
|
+
Map(newTree, keys.compare)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// Create a set from a given list and a pure, first-class comparison function.
|
|
80
|
+
///
|
|
81
|
+
/// O(N log N)
|
|
82
|
+
/// O(N) if the list is sorted
|
|
83
|
+
def fromList[A](list: List[A], compare: (A, A) => Ordering at {}): Set[A] = {
|
|
84
|
+
val tree: internal::Tree[A, Unit] = internal::fromList(list.map { k => (k, ()) }, compare)
|
|
85
|
+
Set(tree, compare)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// Create a set from a given list with a generic comparison function.
|
|
89
|
+
/// Works only on the JavaScript backends!
|
|
90
|
+
///
|
|
91
|
+
/// O(N log N)
|
|
92
|
+
/// O(N) if the list is sorted
|
|
93
|
+
def fromListGeneric[A](list: List[A]): Set[A] = {
|
|
94
|
+
val compare: (A, A) => Ordering at {} = box { (left, right) => genericCompare(left, right) }
|
|
95
|
+
val tree: internal::Tree[A, Unit] = internal::fromList(list.map { k => (k, ()) }, compare)
|
|
96
|
+
Set(tree, compare)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/// Traverse all elements in order, running the function `action` on each element.
|
|
100
|
+
///
|
|
101
|
+
/// Law: `s.foreach { action } === s.toList.foreach { action }`
|
|
102
|
+
///
|
|
103
|
+
/// O(N)
|
|
104
|
+
def foreach[A](s: Set[A]) { action: A => Unit }: Unit =
|
|
105
|
+
internal::foreach(s.tree) { (k, _v) => action(k) }
|
|
106
|
+
|
|
107
|
+
/// Create a list from a given set.
|
|
108
|
+
///
|
|
109
|
+
/// O(N)
|
|
110
|
+
def toList[A](s: Set[A]): List[A] = {
|
|
111
|
+
var acc = Nil()
|
|
112
|
+
s.foreach { a =>
|
|
113
|
+
acc = Cons(a, acc)
|
|
114
|
+
}
|
|
115
|
+
acc.reverse
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/// Check if a predicate holds for all elements in a given set.
|
|
119
|
+
///
|
|
120
|
+
/// O(N)
|
|
121
|
+
def all[A](s: Set[A]) { predicate : A => Bool }: Bool = {
|
|
122
|
+
var result = true
|
|
123
|
+
s.foreach { a =>
|
|
124
|
+
if (not(predicate(a))) { result = false }
|
|
125
|
+
}
|
|
126
|
+
result
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/// Check if a predicate holds for at least one element in a given set.
|
|
130
|
+
///
|
|
131
|
+
/// O(N)
|
|
132
|
+
def any[A](s: Set[A]) { predicate: A => Bool }: Bool = {
|
|
133
|
+
var result = false
|
|
134
|
+
s.foreach { a =>
|
|
135
|
+
if (predicate(a)) { result = true }
|
|
136
|
+
}
|
|
137
|
+
result
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/// Check if a set contains a given element.
|
|
141
|
+
///
|
|
142
|
+
/// O(log N)
|
|
143
|
+
def contains[A](s: Set[A], a: A): Bool =
|
|
144
|
+
internal::get(s.tree, s.compare, a) match {
|
|
145
|
+
case None() => false
|
|
146
|
+
case Some(v) => true
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
/// Check if set `s1` is a subset of set `s2`.
|
|
151
|
+
///
|
|
152
|
+
/// O(N log N)
|
|
153
|
+
def subset[A](s1: Set[A], s2: Set[A]): Bool = {
|
|
154
|
+
s1.all { a =>
|
|
155
|
+
s2.contains(a)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Check if set `s1` is a superset of set `s2`.
|
|
160
|
+
///
|
|
161
|
+
/// O(N log N)
|
|
162
|
+
def superset[A](s1: Set[A], s2: Set[A]): Bool = {
|
|
163
|
+
s2.subset(s1)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/// Remove an element from a set.
|
|
167
|
+
/// If the element is not in the set, the original set is returned.
|
|
168
|
+
///
|
|
169
|
+
/// O(log N)
|
|
170
|
+
def delete[A](s: Set[A], a: A): Set[A] = {
|
|
171
|
+
val newTree = internal::delete(s.tree, s.compare, a)
|
|
172
|
+
Set(newTree, s.compare)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/// Remove many elements from a set.
|
|
176
|
+
///
|
|
177
|
+
/// O(M log N) where M is the size of the list.
|
|
178
|
+
def deleteMany[A](s: Set[A], list: List[A]): Set[A] = {
|
|
179
|
+
var tmp = s
|
|
180
|
+
list.foreach { a =>
|
|
181
|
+
tmp = tmp.delete(a)
|
|
182
|
+
}
|
|
183
|
+
tmp
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/// Construct a new set which contains all elements of `s1`
|
|
187
|
+
/// except those where the element is in `s2`.
|
|
188
|
+
/// Uses an explicit comparison function.
|
|
189
|
+
///
|
|
190
|
+
/// O(???)
|
|
191
|
+
def difference[A](s1: Set[A], s2: Set[A], compare: (A, A) => Ordering at {}): Set[A] = {
|
|
192
|
+
val newTree = internal::difference(s1.tree, s2.tree, compare)
|
|
193
|
+
Set(newTree, compare)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Construct a new set which contains all elements of `s1`
|
|
197
|
+
/// except those where the element is in `s2`.
|
|
198
|
+
/// Uses a comparison function from `s1`.
|
|
199
|
+
///
|
|
200
|
+
/// O(???)
|
|
201
|
+
def difference[A](s1: Set[A], s2: Set[A]): Set[A] =
|
|
202
|
+
s1.difference(s2, s1.compare)
|
|
203
|
+
|
|
204
|
+
/// Construct a new set which contains both elements of `s1` and `s2`.
|
|
205
|
+
/// Uses an explicit comparison function.
|
|
206
|
+
///
|
|
207
|
+
/// O(???)
|
|
208
|
+
def union[A](s1: Set[A], s2: Set[A], compare: (A, A) => Ordering at {}): Set[A] = {
|
|
209
|
+
val newTree = internal::union(s1.tree, s2.tree, compare) { (_k, _v1, _v2) => () }
|
|
210
|
+
Set(newTree, compare)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/// Construct a new set which contains both elements of `s1` and `s2`.
|
|
214
|
+
/// Uses a comparison function from `s1`.
|
|
215
|
+
///
|
|
216
|
+
/// O(???)
|
|
217
|
+
def union[A](s1: Set[A], s2: Set[A]): Set[A] =
|
|
218
|
+
s1.union(s2, s1.compare)
|
|
219
|
+
|
|
220
|
+
/// Construct a new set which contains only elements which are in both of `s1` and `s2`.
|
|
221
|
+
/// Uses an explicit comparison function.
|
|
222
|
+
///
|
|
223
|
+
/// O(???)
|
|
224
|
+
def intersection[A](s1: Set[A], s2: Set[A], compare: (A, A) => Ordering at {}): Set[A] = {
|
|
225
|
+
val newTree = internal::intersection(s1.tree, s2.tree, compare) { (_k, _v1, _v2) => () }
|
|
226
|
+
Set(newTree, compare)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/// Construct a new set which contains only elements which are in both of `s1` and `s2`.
|
|
230
|
+
/// Uses a comparison function from `s1`.
|
|
231
|
+
///
|
|
232
|
+
/// O(???)
|
|
233
|
+
def intersection[A](s1: Set[A], s2: Set[A]): Set[A] =
|
|
234
|
+
s1.intersection(s2, s1.compare)
|
|
@@ -2,6 +2,9 @@ module stream
|
|
|
2
2
|
|
|
3
3
|
import array
|
|
4
4
|
import bytearray
|
|
5
|
+
import map
|
|
6
|
+
import set
|
|
7
|
+
|
|
5
8
|
import io/filesystem
|
|
6
9
|
import io/error
|
|
7
10
|
|
|
@@ -63,6 +66,26 @@ def each(bytes: ByteArray): Unit / emit[Byte] = {
|
|
|
63
66
|
go(0)
|
|
64
67
|
}
|
|
65
68
|
|
|
69
|
+
/// Turns a `map` into a producer of a push stream
|
|
70
|
+
/// of `(key, value)` pairs by emitting each contained *in order*.
|
|
71
|
+
def each[K, V](map: Map[K, V]): Unit / emit[(K, V)] =
|
|
72
|
+
map.foreach { (k, v) => do emit((k, v)) }
|
|
73
|
+
|
|
74
|
+
/// Turns a `map` into a producer of a push stream
|
|
75
|
+
/// of its keys by emitting each contained *in order*.
|
|
76
|
+
def eachKey[K, V](map: Map[K, V]): Unit / emit[K] =
|
|
77
|
+
map.foreach { (k, _v) => do emit(k) }
|
|
78
|
+
|
|
79
|
+
/// Turns a `map` into a producer of a push stream
|
|
80
|
+
/// of its values by emitting each contained.
|
|
81
|
+
def eachValue[K, V](map: Map[K, V]): Unit / emit[V] =
|
|
82
|
+
map.foreach { (_k, v) => do emit(v) }
|
|
83
|
+
|
|
84
|
+
/// Turns a `set` into a producer of a push stream
|
|
85
|
+
/// by emitting each contained *in order*.
|
|
86
|
+
def each[A](set: Set[A]): Unit / emit[A] =
|
|
87
|
+
set.foreach { x => do emit(x) }
|
|
88
|
+
|
|
66
89
|
// not option
|
|
67
90
|
// not dequeue
|
|
68
91
|
// not queue
|
|
@@ -168,6 +191,28 @@ def feed[T, R](list: List[T]) { reader: () => R / read[T] }: R = {
|
|
|
168
191
|
}
|
|
169
192
|
}
|
|
170
193
|
|
|
194
|
+
def collectMap[K, V, R](compare: (K, K) => Ordering at {}) { stream: () => R / emit[(K, V)] }: (R, Map[K, V]) =
|
|
195
|
+
try {
|
|
196
|
+
(stream(), map::empty(compare))
|
|
197
|
+
} with emit[(K, V)] { case (k, v) =>
|
|
198
|
+
val (r, map) = resume(());
|
|
199
|
+
(r, map.put(k, v))
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
def collectMap[K, V](compare: (K, K) => Ordering at {}) { stream: () => Any / emit[(K, V)] }: Map[K, V] =
|
|
203
|
+
collectMap[K, V, Any](compare){stream}.second
|
|
204
|
+
|
|
205
|
+
def collectSet[A, R](compare: (A, A) => Ordering at {}) { stream: () => R / emit[A] }: (R, Set[A]) =
|
|
206
|
+
try {
|
|
207
|
+
(stream(), set::empty(compare))
|
|
208
|
+
} with emit[A] { (v) =>
|
|
209
|
+
val (r, set) = resume(());
|
|
210
|
+
(r, set.insert(v))
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
def collectSet[A](compare: (A, A) => Ordering at {}) { stream: () => Any / emit[A] }: Set[A] =
|
|
214
|
+
collectSet[A, Any](compare){stream}.second
|
|
215
|
+
|
|
171
216
|
def feed[T, R](array: Array[T]) { reader: () => R / read[T] }: R = {
|
|
172
217
|
var i = 0
|
|
173
218
|
try {
|
|
@@ -243,11 +243,13 @@ extern pure def toInt(ch: Char): Int =
|
|
|
243
243
|
js "${ch}"
|
|
244
244
|
chez "${ch}"
|
|
245
245
|
llvm "ret %Int ${ch}"
|
|
246
|
+
vm "string::toInt(Char)"
|
|
246
247
|
|
|
247
248
|
extern pure def toChar(codepoint: Int): Char =
|
|
248
249
|
js "${codepoint}"
|
|
249
250
|
chez "${codepoint}"
|
|
250
251
|
llvm "ret %Int ${codepoint}"
|
|
252
|
+
vm "string::toChar(Int)"
|
|
251
253
|
|
|
252
254
|
|
|
253
255
|
extern pure def infixLt(x: Char, y: Char): Bool =
|
|
@@ -259,6 +261,7 @@ extern pure def infixLt(x: Char, y: Char): Bool =
|
|
|
259
261
|
%adt_boolean = insertvalue %Pos zeroinitializer, i64 %fat_z, 0
|
|
260
262
|
ret %Pos %adt_boolean
|
|
261
263
|
"""
|
|
264
|
+
vm "string::infixLt(Char, Char)"
|
|
262
265
|
|
|
263
266
|
extern pure def infixLte(x: Char, y: Char): Bool =
|
|
264
267
|
js "(${x} <= ${y})"
|
|
@@ -269,6 +272,7 @@ extern pure def infixLte(x: Char, y: Char): Bool =
|
|
|
269
272
|
%adt_boolean = insertvalue %Pos zeroinitializer, i64 %fat_z, 0
|
|
270
273
|
ret %Pos %adt_boolean
|
|
271
274
|
"""
|
|
275
|
+
vm "string::infixLte(Char, Char)"
|
|
272
276
|
|
|
273
277
|
extern pure def infixGt(x: Char, y: Char): Bool =
|
|
274
278
|
js "(${x} > ${y})"
|
|
@@ -279,6 +283,7 @@ extern pure def infixGt(x: Char, y: Char): Bool =
|
|
|
279
283
|
%adt_boolean = insertvalue %Pos zeroinitializer, i64 %fat_z, 0
|
|
280
284
|
ret %Pos %adt_boolean
|
|
281
285
|
"""
|
|
286
|
+
vm "string::infixGt(Char, Char)"
|
|
282
287
|
|
|
283
288
|
extern pure def infixGte(x: Char, y: Char): Bool =
|
|
284
289
|
js "(${x} >= ${y})"
|
|
@@ -289,6 +294,7 @@ extern pure def infixGte(x: Char, y: Char): Bool =
|
|
|
289
294
|
%adt_boolean = insertvalue %Pos zeroinitializer, i64 %fat_z, 0
|
|
290
295
|
ret %Pos %adt_boolean
|
|
291
296
|
"""
|
|
297
|
+
vm "string::infixGte(Char, Char)"
|
|
292
298
|
|
|
293
299
|
|
|
294
300
|
/**
|
|
@@ -327,3 +333,4 @@ extern pure def unsafeCharAt(str: String, n: Int): Char =
|
|
|
327
333
|
%x = call %Int @c_bytearray_character_at(%Pos ${str}, %Int ${n})
|
|
328
334
|
ret %Int %x
|
|
329
335
|
"""
|
|
336
|
+
vm "string::unsafeCharAt(String, Int)"
|
|
@@ -152,16 +152,45 @@ struct Pos c_bytearray_equal(const struct Pos left, const struct Pos right) {
|
|
|
152
152
|
erasePositive(right);
|
|
153
153
|
return BooleanFalse;
|
|
154
154
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
|
|
156
|
+
int cmp = memcmp(c_bytearray_data(left), c_bytearray_data(right), left_size);
|
|
157
|
+
erasePositive(left);
|
|
158
|
+
erasePositive(right);
|
|
159
|
+
return (cmp == 0 ? BooleanTrue : BooleanFalse);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
Int c_bytearray_compare(const struct Pos left, const struct Pos right) {
|
|
163
|
+
uint64_t left_size = left.tag;
|
|
164
|
+
uint64_t right_size = right.tag;
|
|
165
|
+
uint64_t min_size = (left_size < right_size) ? left_size : right_size;
|
|
166
|
+
|
|
167
|
+
uint8_t* left_data = c_bytearray_data(left);
|
|
168
|
+
uint8_t* right_data = c_bytearray_data(right);
|
|
169
|
+
|
|
170
|
+
if (left_data == right_data) {
|
|
171
|
+
erasePositive(left);
|
|
172
|
+
erasePositive(right);
|
|
173
|
+
return 0;
|
|
161
174
|
}
|
|
175
|
+
|
|
176
|
+
int cmp = memcmp(left_data, right_data, min_size);
|
|
177
|
+
|
|
162
178
|
erasePositive(left);
|
|
163
179
|
erasePositive(right);
|
|
164
|
-
|
|
180
|
+
|
|
181
|
+
if (cmp < 0) {
|
|
182
|
+
return -1;
|
|
183
|
+
} else if (cmp > 0) {
|
|
184
|
+
return 1;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (left_size < right_size) {
|
|
188
|
+
return -1;
|
|
189
|
+
} else if (left_size > right_size) {
|
|
190
|
+
return 1;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return 0;
|
|
165
194
|
}
|
|
166
195
|
|
|
167
196
|
// TODO deprecate
|
|
@@ -37,6 +37,7 @@ declare %Pos @c_bytearray_show_Double(double)
|
|
|
37
37
|
|
|
38
38
|
declare %Pos @c_bytearray_concatenate(%Pos, %Pos)
|
|
39
39
|
declare %Pos @c_bytearray_equal(%Pos, %Pos)
|
|
40
|
+
declare %Int @c_bytearray_compare(%Pos, %Pos)
|
|
40
41
|
|
|
41
42
|
declare %Pos @c_bytearray_substring(%Pos, i64, i64)
|
|
42
43
|
declare %Int @c_bytearray_character_at(%Pos, i64)
|
package/libraries/llvm/main.c
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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><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.110.0"><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=
|
|
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><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.110.0"><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=1737918922"><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>
|
|
2
2
|
<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>
|
|
3
3
|
<button>
|
|
4
4
|
<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">
|
|
@@ -57,5 +57,5 @@ open source software collaboration and innovation.</p></div><div class=mega-menu
|
|
|
57
57
|
<i class="fa-brands fa-linkedin-in fa-stack-1x fa-inverse" aria-hidden=true></i>
|
|
58
58
|
<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://eclipsecon.us6.list-manage.com/subscribe/post 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"><div><i class="fa fa-solid fa-envelope fa-lg" aria-hidden=true></i></div></div><input type=hidden name=u value=eaf9e1f06f194eadc66788a85>
|
|
59
59
|
<input type=hidden name=id value=46e57eacf1>
|
|
60
|
-
<input id=mc-embedded-subscribe type=submit name=subscribe hidden></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=
|
|
60
|
+
<input id=mc-embedded-subscribe type=submit name=subscribe hidden></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=1737918922"></script>
|
|
61
61
|
<script>(function(){})(jQuery,document)</script></div></body></html>
|
|
@@ -298,7 +298,7 @@ jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","curr
|
|
|
298
298
|
<script type="text/javascript" src="https://c0.wp.com/c/6.7.1/wp-includes/js/jquery/ui/dialog.min.js" id="jquery-ui-dialog-js"></script>
|
|
299
299
|
<script type="text/javascript" id="events-manager-js-extra">
|
|
300
300
|
/* <![CDATA[ */
|
|
301
|
-
var EM = {"ajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","locationajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php?action=locations_search","firstDay":"1","locale":"en","dateFormat":"yy-mm-dd","ui_css":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager\/includes\/css\/jquery-ui\/build.min.css","show24hours":"0","is_ssl":"1","autocomplete_limit":"10","calendar":{"breakpoints":{"small":560,"medium":908,"large":false}},"phone":"","datepicker":{"format":"Y-m-d"},"search":{"breakpoints":{"small":650,"medium":850,"full":false}},"url":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager","bookingInProgress":"Please wait while the booking is being submitted.","tickets_save":"Save Ticket","bookingajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","bookings_export_save":"Export Bookings","bookings_settings_save":"Save Settings","booking_delete":"Are you sure you want to delete?","booking_offset":"30","bookings":{"submit_button":{"text":{"default":"Submit Booking","free":"Submit Booking","payment":"Submit Booking - %s","processing":"Processing ..."}},"update_listener":""},"bb_full":"Sold Out","bb_book":"Book Now","bb_booking":"Booking...","bb_booked":"Booking Submitted","bb_error":"Booking Error. Try again?","bb_cancel":"Cancel","bb_canceling":"Canceling...","bb_cancelled":"Cancelled","bb_cancel_error":"Cancellation Error. Try again?","txt_search":"Search","txt_searching":"Searching...","txt_loading":"Loading...","cache":"1","api_nonce":"
|
|
301
|
+
var EM = {"ajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","locationajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php?action=locations_search","firstDay":"1","locale":"en","dateFormat":"yy-mm-dd","ui_css":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager\/includes\/css\/jquery-ui\/build.min.css","show24hours":"0","is_ssl":"1","autocomplete_limit":"10","calendar":{"breakpoints":{"small":560,"medium":908,"large":false}},"phone":"","datepicker":{"format":"Y-m-d"},"search":{"breakpoints":{"small":650,"medium":850,"full":false}},"url":"https:\/\/opensource.org\/wp-content\/plugins\/events-manager","bookingInProgress":"Please wait while the booking is being submitted.","tickets_save":"Save Ticket","bookingajaxurl":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","bookings_export_save":"Export Bookings","bookings_settings_save":"Save Settings","booking_delete":"Are you sure you want to delete?","booking_offset":"30","bookings":{"submit_button":{"text":{"default":"Submit Booking","free":"Submit Booking","payment":"Submit Booking - %s","processing":"Processing ..."}},"update_listener":""},"bb_full":"Sold Out","bb_book":"Book Now","bb_booking":"Booking...","bb_booked":"Booking Submitted","bb_error":"Booking Error. Try again?","bb_cancel":"Cancel","bb_canceling":"Canceling...","bb_cancelled":"Cancelled","bb_cancel_error":"Cancellation Error. Try again?","txt_search":"Search","txt_searching":"Searching...","txt_loading":"Loading...","cache":"1","api_nonce":"2142c68a49","attendance_api_url":"https:\/\/opensource.org\/wp-json\/events-manager\/v1\/attendance"};
|
|
302
302
|
/* ]]> */
|
|
303
303
|
</script>
|
|
304
304
|
<script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=6.6.3" id="events-manager-js"></script>
|
|
@@ -861,6 +861,10 @@ form.customize-unpreviewable {
|
|
|
861
861
|
height: auto;
|
|
862
862
|
border-radius: 8px;
|
|
863
863
|
margin-bottom: 10px;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
.updated {
|
|
867
|
+
display: none;
|
|
864
868
|
} </style>
|
|
865
869
|
</head>
|
|
866
870
|
|
|
@@ -1026,7 +1030,7 @@ form.customize-unpreviewable {
|
|
|
1026
1030
|
<li id="menu-item-5429" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5429"><a href="https://go.opensource.org/osaid-latest">OSAI Definition</a></li>
|
|
1027
1031
|
<li id="menu-item-5421" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5428"><a href="https://opensource.org/ai/process">Process</a></li>
|
|
1028
1032
|
<li id="menu-item-5430" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5430"><a href="https://opensource.org/ai/timeline">Timeline</a></li>
|
|
1029
|
-
<li id="menu-item-24456" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24456"><a href="https://opensource.org/ai/
|
|
1033
|
+
<li id="menu-item-24456" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24456"><a href="https://opensource.org/ai/faq">FAQ</a></li>
|
|
1030
1034
|
<li id="menu-item-17410" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-17410"><a href="https://opensource.org/ai/forums">Forum</a></li>
|
|
1031
1035
|
</ul>
|
|
1032
1036
|
</div>
|
|
@@ -1251,37 +1255,37 @@ wp.jpI18nLoader.state = {"baseUrl":"https://opensource.org/wp-content/languages/
|
|
|
1251
1255
|
<script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/gutenberg/build/url/index.min.js?ver=499ac283dc628dfb623e" id="wp-url-js"></script>
|
|
1252
1256
|
<script type="text/javascript" id="jetpack-instant-search-js-before">
|
|
1253
1257
|
/* <![CDATA[ */
|
|
1254
|
-
var JetpackInstantSearchOptions=JSON.parse(decodeURIComponent("%7B%22overlayOptions%22%3A%7B%22colorTheme%22%3A%22light%22%2C%22enableInfScroll%22%3Atrue%2C%22enableFilteringOpensOverlay%22%3Atrue%2C%22enablePostDate%22%3Atrue%2C%22enableSort%22%3Atrue%2C%22highlightColor%22%3A%22%23fdd7b9%22%2C%22overlayTrigger%22%3A%22submit%22%2C%22resultFormat%22%3A%22expanded%22%2C%22showPoweredBy%22%3Atrue%2C%22defaultSort%22%3A%22relevance%22%2C%22excludedPostTypes%22%3A%5B%22attachment%22%5D%7D%2C%22homeUrl%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%22%2C%22locale%22%3A%22en-US%22%2C%22postsPerPage%22%3A12%2C%22siteId%22%3A210318891%2C%22postTypes%22%3A%7B%22post%22%3A%7B%22singular_name%22%3A%22Post%22%2C%22name%22%3A%22Posts%22%7D%2C%22page%22%3A%7B%22singular_name%22%3A%22Page%22%2C%22name%22%3A%22Pages%22%7D%2C%22attachment%22%3A%7B%22singular_name%22%3A%22Media%22%2C%22name%22%3A%22Media%22%7D%2C%22supporter%22%3A%7B%22singular_name%22%3A%22Supporter%22%2C%22name%22%3A%22Supporters%22%7D%2C%22board-member%22%3A%7B%22singular_name%22%3A%22Board%20Member%22%2C%22name%22%3A%22Board%20Members%22%7D%2C%22license%22%3A%7B%22singular_name%22%3A%22License%22%2C%22name%22%3A%22Licenses%22%7D%2C%22meeting-minutes%22%3A%7B%22singular_name%22%3A%22Meeting%20Minutes%22%2C%22name%22%3A%22Meeting%20Minutes%22%7D%2C%22press-mentions%22%3A%7B%22singular_name%22%3A%22Press%20mentions%22%2C%22name%22%3A%22Press%20mentions%22%7D%7D%2C%22webpackPublicPath%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-content%5C%2Fplugins%5C%2Fjetpack%5C%2Fjetpack_vendor%5C%2Fautomattic%5C%2Fjetpack-search%5C%2Fbuild%5C%2Finstant-search%5C%2F%22%2C%22isPhotonEnabled%22%3Atrue%2C%22isFreePlan%22%3Afalse%2C%22apiRoot%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-json%5C%2F%22%2C%22apiNonce%22%3A%
|
|
1258
|
+
var JetpackInstantSearchOptions=JSON.parse(decodeURIComponent("%7B%22overlayOptions%22%3A%7B%22colorTheme%22%3A%22light%22%2C%22enableInfScroll%22%3Atrue%2C%22enableFilteringOpensOverlay%22%3Atrue%2C%22enablePostDate%22%3Atrue%2C%22enableSort%22%3Atrue%2C%22highlightColor%22%3A%22%23fdd7b9%22%2C%22overlayTrigger%22%3A%22submit%22%2C%22resultFormat%22%3A%22expanded%22%2C%22showPoweredBy%22%3Atrue%2C%22defaultSort%22%3A%22relevance%22%2C%22excludedPostTypes%22%3A%5B%22attachment%22%5D%7D%2C%22homeUrl%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%22%2C%22locale%22%3A%22en-US%22%2C%22postsPerPage%22%3A12%2C%22siteId%22%3A210318891%2C%22postTypes%22%3A%7B%22post%22%3A%7B%22singular_name%22%3A%22Post%22%2C%22name%22%3A%22Posts%22%7D%2C%22page%22%3A%7B%22singular_name%22%3A%22Page%22%2C%22name%22%3A%22Pages%22%7D%2C%22attachment%22%3A%7B%22singular_name%22%3A%22Media%22%2C%22name%22%3A%22Media%22%7D%2C%22supporter%22%3A%7B%22singular_name%22%3A%22Supporter%22%2C%22name%22%3A%22Supporters%22%7D%2C%22board-member%22%3A%7B%22singular_name%22%3A%22Board%20Member%22%2C%22name%22%3A%22Board%20Members%22%7D%2C%22license%22%3A%7B%22singular_name%22%3A%22License%22%2C%22name%22%3A%22Licenses%22%7D%2C%22meeting-minutes%22%3A%7B%22singular_name%22%3A%22Meeting%20Minutes%22%2C%22name%22%3A%22Meeting%20Minutes%22%7D%2C%22press-mentions%22%3A%7B%22singular_name%22%3A%22Press%20mentions%22%2C%22name%22%3A%22Press%20mentions%22%7D%7D%2C%22webpackPublicPath%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-content%5C%2Fplugins%5C%2Fjetpack%5C%2Fjetpack_vendor%5C%2Fautomattic%5C%2Fjetpack-search%5C%2Fbuild%5C%2Finstant-search%5C%2F%22%2C%22isPhotonEnabled%22%3Atrue%2C%22isFreePlan%22%3Afalse%2C%22apiRoot%22%3A%22https%3A%5C%2F%5C%2Fopensource.org%5C%2Fwp-json%5C%2F%22%2C%22apiNonce%22%3A%222142c68a49%22%2C%22isPrivateSite%22%3Afalse%2C%22isWpcom%22%3Afalse%2C%22hasOverlayWidgets%22%3Atrue%2C%22widgets%22%3A%5B%7B%22filters%22%3A%5B%7B%22name%22%3A%22Post%20Types%22%2C%22type%22%3A%22post_type%22%2C%22count%22%3A6%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22post_type_0%22%7D%2C%7B%22name%22%3A%22Categories%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22category%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_1%22%7D%2C%7B%22name%22%3A%22Tags%22%2C%22type%22%3A%22taxonomy%22%2C%22taxonomy%22%3A%22post_tag%22%2C%22count%22%3A5%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22taxonomy_2%22%7D%2C%7B%22name%22%3A%22Year%22%2C%22type%22%3A%22date_histogram%22%2C%22count%22%3A5%2C%22field%22%3A%22post_date%22%2C%22interval%22%3A%22year%22%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%2C%22filter_id%22%3A%22date_histogram_3%22%7D%5D%2C%22widget_id%22%3A%22jetpack-search-filters-4%22%7D%5D%2C%22widgetsOutsideOverlay%22%3A%5B%5D%2C%22hasNonSearchWidgets%22%3Afalse%2C%22preventTrackingCookiesReset%22%3Afalse%7D"));
|
|
1255
1259
|
/* ]]> */
|
|
1256
1260
|
</script>
|
|
1257
1261
|
<script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/build/instant-search/jp-search.js?minify=false&ver=da5ecd9f722e7fcb409e" id="jetpack-instant-search-js"></script>
|
|
1258
|
-
<script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="//stats.wp.com/w.js?ver=
|
|
1262
|
+
<script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="//stats.wp.com/w.js?ver=202505" id="jp-tracks-js"></script>
|
|
1259
1263
|
<script type="text/javascript" id="osi-theme-scripts-js-before">
|
|
1260
1264
|
/* <![CDATA[ */
|
|
1261
1265
|
const OSI_LICENSE_DB = {"ajaxURL":"https:\/\/opensource.org\/wp-admin\/admin-ajax.php","action":"osi_license_db"}
|
|
1262
1266
|
/* ]]> */
|
|
1263
1267
|
</script>
|
|
1264
1268
|
<script type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/themes/osi/assets/js/build/theme.js?ver=1724798073" id="osi-theme-scripts-js"></script>
|
|
1265
|
-
<script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="https://stats.wp.com/e-
|
|
1269
|
+
<script data-service="jetpack-statistics" data-category="statistics" type="text/plain" data-cmplz-src="https://stats.wp.com/e-202505.js" id="jetpack-stats-js" data-wp-strategy="defer"></script>
|
|
1266
1270
|
<script type="text/javascript" id="jetpack-stats-js-after">
|
|
1267
1271
|
/* <![CDATA[ */
|
|
1268
1272
|
_stq = window._stq || [];
|
|
1269
|
-
_stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"210318891\",\"post\":\"395\",\"tz\":\"0\",\"srv\":\"opensource.org\",\"hp\":\"atomic\",\"ac\":\"3\",\"amp\":\"0\",\"j\":\"1:14.3-a.
|
|
1273
|
+
_stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"210318891\",\"post\":\"395\",\"tz\":\"0\",\"srv\":\"opensource.org\",\"hp\":\"atomic\",\"ac\":\"3\",\"amp\":\"0\",\"j\":\"1:14.3-a.3\"}") ]);
|
|
1270
1274
|
_stq.push([ "clickTrackerInit", "210318891", "395" ]);
|
|
1271
1275
|
/* ]]> */
|
|
1272
1276
|
</script>
|
|
1273
1277
|
<script type="text/javascript" id="cmplz-cookiebanner-js-extra">
|
|
1274
1278
|
/* <![CDATA[ */
|
|
1275
|
-
var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"67","version":"7.2.0","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"1","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https:\/\/opensource.org\/wp-json\/complianz\/v1\/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"16","cookie_path":"\/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https:\/\/opensource.org\/wp-content\/uploads\/complianz\/css\/banner-{banner_id}-{type}.css?v=67","page_links":{"eu":{"cookie-statement":{"title":"","url":"https:\/\/opensource.org\/license\/
|
|
1279
|
+
var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"67","version":"7.2.0","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"1","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https:\/\/opensource.org\/wp-json\/complianz\/v1\/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"16","cookie_path":"\/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https:\/\/opensource.org\/wp-content\/uploads\/complianz\/css\/banner-{banner_id}-{type}.css?v=67","page_links":{"eu":{"cookie-statement":{"title":"","url":"https:\/\/opensource.org\/license\/cvw"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content"};
|
|
1276
1280
|
/* ]]> */
|
|
1277
1281
|
</script>
|
|
1278
1282
|
<script defer type="text/javascript" src="https://149753425.v2.pressablecdn.com/wp-content/plugins/complianz-gdpr/cookiebanner/js/complianz.min.js?ver=1736534359" id="cmplz-cookiebanner-js"></script>
|
|
1279
1283
|
|
|
1280
|
-
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'
|
|
1284
|
+
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9085b008ed428224',t:'MTczNzk0ODg3My4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
|
|
1281
1285
|
</html>
|
|
1282
1286
|
<!--
|
|
1283
|
-
generated
|
|
1284
|
-
generated in 0.
|
|
1287
|
+
generated 6 seconds ago
|
|
1288
|
+
generated in 0.574 seconds
|
|
1285
1289
|
served from batcache in 0.003 seconds
|
|
1286
|
-
expires in
|
|
1290
|
+
expires in 294 seconds
|
|
1287
1291
|
-->
|