parsav  Diff

Differences From Artifact [f642fd73ba]:

To Artifact [f661c3d77e]:


78
79
80
81
82
83
84






























85
86
87
88
89
90
91
	for i = 0, len do
		var v, ok = m.shorthand.cval(s[i])
		if ok == false then return 0, false end
		val = (val * 64) + v
	end
	return val, true
end































terra m.hexdigit(hb: uint8): int8
	var a = hb and 0x0F
	if a < 10 then return 0x30 + a
	else return 0x61 + (a-10) end
end








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
	for i = 0, len do
		var v, ok = m.shorthand.cval(s[i])
		if ok == false then return 0, false end
		val = (val * 64) + v
	end
	return val, true
end

terra m.truncate64(val: &uint8, len: intptr): uint64
	var r: uint64 = 0
	for i=0, len do
		r = r << 3
		r = r + @val
		val = val + 1
	end
	return r
end

m.biggest = macro(function(a,b)
	local ty = a.tree.type
	if b.tree.type.bytes > ty.bytes then ty = b.tree.type end
	return quote
		var _a = [a]
		var _b = [b]
		var r: ty if _a > _b then r = _a else r = _b end
	in r end
end)

m.smallest = macro(function(a,b)
	local ty = a.tree.type
	if b.tree.type.bytes < ty.bytes then ty = b.tree.type end
	return quote
		var _a = [a]
		var _b = [b]
		var r: ty if _a < _b then r = _a else r = _b end
	in r end
end)

terra m.hexdigit(hb: uint8): int8
	var a = hb and 0x0F
	if a < 10 then return 0x30 + a
	else return 0x61 + (a-10) end
end