Skip to content

Commit 1b71313

Browse files
committed
backporting from master pass 1
1 parent 86cdd4e commit 1b71313

7 files changed

Lines changed: 46 additions & 16 deletions

File tree

wurst/_handles/primitives/String.wurst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,9 @@ public function string.trim(string val) returns string
136136
If the string does not exist, the returnvalue is -1
137137
*/
138138
public function string.indexOf(string s) returns int
139-
for int i = 0 to this.length() - s.length()
140-
if this.substring(i, i + s.length()) == s
139+
let len = s.length()
140+
for int i = 0 to this.length() - len
141+
if this.substring(i, i + len) == s
141142
return i
142143
return -1
143144

wurst/closures/ClosureEvents.wurst

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ public abstract class OnCastListener
7777
else if prev != null
7878
prev.next = next
7979

80-
next.prev = prev
80+
if next != null
81+
next.prev = prev
8182

8283
next = null
8384
prev = null
@@ -92,14 +93,16 @@ public abstract class OnCast extends OnCastListener
9293
public abstract class OnPointCast extends OnCastListener
9394

9495
override function fire(unit caster)
95-
fireEx(caster, EventData.getSpellTargetPos())
96+
if EventData.getSpellTargetUnit() == null
97+
fireEx(caster, EventData.getSpellTargetPos())
9698

9799
abstract function fireEx(unit caster, vec2 target)
98100

99101
public abstract class OnUnitCast extends OnCastListener
100102

101103
override function fire(unit caster)
102-
fireEx(caster, GetSpellTargetUnit())
104+
if EventData.getSpellTargetUnit() != null
105+
fireEx(caster, EventData.getSpellTargetUnit())
103106

104107
abstract function fireEx(unit caster, unit target)
105108

@@ -129,6 +132,8 @@ public abstract class EventListener
129132
static function add(unit u, eventid eventId, EventListener listener) returns EventListener
130133
let uid = u.getIndex()
131134
if uid <= 0
135+
Log.warn("Attempting to register event listener for a unit that is not indexed by UnitIndexer. " +
136+
"If this happens during initialization, consider registering the EventListener in a callback to nullTimer() instead.")
132137
return listener
133138
listener.eventId = eventId.toIntId()
134139
listener.uid = uid
@@ -169,9 +174,10 @@ public abstract class EventListener
169174
listener.next = castMapCasters[index]
170175
castMapCasters[index] = listener
171176
else
172-
if castMap.has(abilId)
173-
castMap.get(abilId).prev = listener
174-
listener.next = castMap.get(abilId)
177+
let entry = castMap.get(abilId)
178+
if entry != null
179+
entry.prev = listener
180+
listener.next = entry
175181

176182
castMap.put(abilId, listener)
177183
return listener
@@ -180,9 +186,10 @@ public abstract class EventListener
180186
let trigUnit = GetTriggerUnit()
181187
let id = GetTriggerEventId().toIntId()
182188
// Unit Listeners
183-
if trigUnit != null and fireEvents(trigUnit) and trigUnit.getIndex() > 0
184-
if unitListenersFirsts[trigUnit.getIndex()] != null
185-
var listener = unitListenersFirsts[trigUnit.getIndex()]
189+
if trigUnit != null
190+
let index = trigUnit.getIndex()
191+
if fireEvents(trigUnit) and index > 0 and unitListenersFirsts[index] != null
192+
var listener = unitListenersFirsts[index]
186193
while listener != null
187194
let nextListener = listener.next
188195
if listener.eventId == id

wurst/closures/ClosureTimers.wurst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public abstract class CallbackSingle
120120
cb.call()
121121
destroy cb
122122

123+
function getRemaining() returns real
124+
return t.getRemaining()
125+
123126
ondestroy
124127
t.release()
125128

wurst/data/LinkedList.wurst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,18 @@ public class LinkedList<T>
312312
destroy predicate
313313
return result
314314

315+
/** Returns the first element that satisfies the predicate, or null if none present */
316+
function find(LinkedListPredicate<T> predicate) returns T
317+
T result = null
318+
let iter = this.iterator()
319+
for elem from iter
320+
if predicate.isTrueFor(elem)
321+
result = elem
322+
break
323+
iter.close()
324+
destroy predicate
325+
return result
326+
315327
/** internal merge sort */
316328
private function sort(Comparator<T> comparator, LLEntry<T> e) returns LLEntry<T>
317329
if e == dummy or e.next == dummy
@@ -479,6 +491,13 @@ public class LLIterator<T>
479491
retVal = current.next.elem
480492
return retVal
481493

494+
/** Adds an element before the currently iterated element */
495+
function addBefore(T elem)
496+
let entry = new LLEntry<T>(elem, current.prev, current)
497+
current.prev.next = entry
498+
current.prev = entry
499+
parent.size++
500+
482501
function close()
483502
if destroyOnClose
484503
destroy this

wurst/event/RegisterEvents.wurst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function registerPlayerUnitEvent(playerunitevent p, code filter, code con
2525
t[hid].addAction(action)
2626

2727
public function registerPlayerUnitEventForPlayer(playerunitevent p, code c, player pl)
28-
let i = 16 * p.getHandleId() + pl.getId()
28+
let i = bj_MAX_PLAYER_SLOTS * p.getHandleId() + pl.getId()
2929
if t[i] == null
3030
t[i] = CreateTrigger()
3131
t[i].registerPlayerUnitEvent(pl, p, null)

wurst/math/Bitwise.wurst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function byte4.toInt() returns int
6060
public function int.toUnsigned() returns int
6161
int result
6262
if this < 0
63-
result = -2147483648 + this
63+
result = INT_MAX + this + 1
6464
else
6565
result = this
6666
return result
@@ -82,7 +82,7 @@ public function int.bytes() returns byte4
8282
var value = this
8383
var isNegative = 0
8484
if value < 0
85-
value = -2147483648 + value
85+
value = INT_MAX + value + 1
8686
isNegative = 1
8787

8888
let b1 = value mod 0x100
@@ -159,7 +159,7 @@ function bwShiftr32(int num, int shift) returns int
159159
var value = num
160160
var isNegative = 0
161161
if value < 0
162-
value = -2147483648 + value
162+
value = INT_MAX + value + 1
163163
isNegative = 1
164164
return isNegative * powShift[31-shift] + value div powShift[shift]
165165

wurst/math/BitwiseTests.wurst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function bitStringTests()
2626
"0001".fromBitString().assertEquals(1)
2727
"1000".fromBitString().assertEquals(8)
2828
"1001".fromBitString().assertEquals(9)
29-
"10000000 00000000 00000000 00000000".fromBitString().assertEquals(-2147483648)
29+
"10000000 00000000 00000000 00000000".fromBitString().assertEquals(INT_MIN)
3030
"11111111 11111111 11111111 11111111".fromBitString().assertEquals(-1)
3131

3232
@test

0 commit comments

Comments
 (0)