All pastes #68050 Raw Edit

smsie

public text v1 · immutable
#68050 ·published 2006-06-20 22:56 UTC
rendered paste body
digitAdd: arg 
	| len arglen accum sum |
	<primitive: 'primDigitAdd' module:'LargeIntegers'> "primitiveExternalCall" 
	accum := 0.
	(len := self digitLength) < (arglen := arg digitLength)
		ifTrue: [len := arglen].
	"Open code max: for speed"
	sum := Integer new: len neg: self negative.
	1
		to: len
		do: [:i | 
			accum := (accum bitShift: -8)
						+ (self digitAt: i)
						+ (arg digitAt: i).
			sum
				digitAt: i
				put: (accum bitAnd: 255)].
	accum > 255
		ifTrue: [sum := sum growby: 1.
			sum
				at: sum digitLength
				put: (accum bitShift: -8)].
	^ sum