Warning, file /frameworks/syntax-highlighting/autotests/html/highlight.cr.dark.html was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 <!DOCTYPE html> 0002 <html><head> 0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 0004 <title>highlight.cr</title> 0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Crystal) - Theme (Breeze Dark)"/> 0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre> 0007 <span style="color:#7a7c7d;"># This file is a testcase for the highlighting of Crystal code</span> 0008 <span style="color:#7a7c7d;"># It's not executable code, but a collection of code snippets</span> 0009 <span style="color:#7a7c7d;">#</span> 0010 0011 <span style="color:#8e44ad;font-weight:bold;">require</span> <span style="color:#f44f4f;">"lib_z"</span> 0012 <span style="color:#8e44ad;font-weight:bold;">require</span> <span style="color:#f44f4f;">"./digest"</span> 0013 0014 <span style="color:#fdbc4b;font-weight:bold;">module</span> <span style="color:#2980b9;">Digest</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Adler32</span> 0015 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.initial</span> : <span style="color:#2980b9;">UInt32</span> 0016 <span style="color:#2980b9;">LibZ</span><span style="color:#2980b9;">.adler32</span>(<span style="color:#f67400;">0</span>, <span style="color:#f67400;">nil</span>, <span style="color:#f67400;">0</span>)<span style="color:#2980b9;">.to_u32</span> 0017 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0018 0019 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.checksum</span>(data) : <span style="color:#2980b9;">UInt32</span> 0020 update(data, initial) 0021 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0022 0023 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.update</span>(data, adler32 : <span style="color:#2980b9;">UInt32</span>) : <span style="color:#2980b9;">UInt32</span> 0024 slice <span style="font-weight:bold;">=</span> data<span style="color:#2980b9;">.to_slice</span> 0025 <span style="color:#2980b9;">LibZ</span><span style="color:#2980b9;">.adler32</span>(adler32, slice, slice<span style="color:#2980b9;">.size</span>)<span style="color:#2980b9;">.to_u32</span> 0026 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0027 0028 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.combine</span>(adler1 : <span style="color:#2980b9;">UInt32</span>, adler2 : <span style="color:#2980b9;">UInt32</span>, len) : <span style="color:#2980b9;">UInt32</span> 0029 <span style="color:#2980b9;">LibZ</span><span style="color:#2980b9;">.adler32_combine</span>(adler1, adler2, len)<span style="color:#2980b9;">.to_u32</span> 0030 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0031 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0032 0033 <span style="color:#fdbc4b;font-weight:bold;">struct</span> <span style="color:#2980b9;">BigRational</span> 0034 <span style="color:#2980b9;">Number</span><span style="color:#2980b9;">.expand_div</span> <span style="font-weight:bold;">[</span><span style="color:#2980b9;">Int8</span>, <span style="color:#2980b9;">UInt8</span>, <span style="color:#2980b9;">Int16</span>, <span style="color:#2980b9;">UInt16</span>, <span style="color:#2980b9;">Int32</span>, <span style="color:#2980b9;">UInt32</span>, <span style="color:#2980b9;">Int64</span>, <span style="color:#2980b9;">UInt64</span>, <span style="color:#2980b9;">Int128</span>, <span style="color:#2980b9;">UInt128</span><span style="font-weight:bold;">]</span>, <span style="color:#2980b9;">BigRational</span> 0035 <span style="color:#2980b9;">Number</span><span style="color:#2980b9;">.expand_div</span> <span style="font-weight:bold;">[</span><span style="color:#2980b9;">Float32</span>, <span style="color:#2980b9;">Float64</span><span style="font-weight:bold;">]</span>, <span style="color:#2980b9;">BigRational</span> 0036 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0037 0038 <span style="color:#fdbc4b;font-weight:bold;">module</span> <span style="color:#2980b9;">Crystal</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Repl</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Closure</span> 0039 <span style="color:#27aeae;font-weight:bold;">VAR_NAME</span> <span style="font-weight:bold;">=</span> <span style="color:#f44f4f;">".closure_var"</span> 0040 <span style="color:#27aeae;font-weight:bold;">ARG_NAME</span> <span style="font-weight:bold;">=</span> <span style="color:#f44f4f;">".closure_arg"</span> 0041 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0042 0043 <span style="color:#fdbc4b;font-weight:bold;">class</span> <span style="color:#2980b9;">FunctionType</span> 0044 <span style="color:#27ae60;">getter</span> arg_types : <span style="color:#2980b9;">Array</span>(<span style="color:#2980b9;">ArgType</span>) 0045 <span style="color:#27ae60;">getter</span> return_type : <span style="color:#2980b9;">ArgType</span> 0046 0047 <span style="color:#27ae60;">@@cvar</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">3</span> 0048 <span style="color:#27ae60;">@ivar</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">7</span> 0049 0050 <span style="color:#fdbc4b;font-weight:bold;">def</span> initialize(<span style="color:#27ae60;">@arg_types</span>, <span style="color:#27ae60;">@return_type</span>) 0051 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0052 0053 <span style="color:#fdbc4b;font-weight:bold;">def</span> /<span style="color:#da4453;">/(other : Int::Unsigned) : BigInt</span> 0054 <span style="color:#da4453;"> check_division_by_zero other</span> 0055 <span style="color:#da4453;"> unsafe_floored_div(other)</span> 0056 <span style="color:#da4453;"> end</span> 0057 0058 <span style="color:#da4453;"> def /</span><span style="font-weight:bold;">/</span>(other : <span style="color:#2980b9;">Int</span>) : <span style="color:#2980b9;">BigInt</span> 0059 check_division_by_zero other 0060 0061 <span style="color:#fdbc4b;font-weight:bold;">if</span> other <span style="font-weight:bold;"><</span> <span style="color:#f67400;">0</span> 0062 (<span style="font-weight:bold;">-</span><span style="color:#f67400;">self</span>)<span style="color:#2980b9;">.unsafe_floored_div</span>(<span style="font-weight:bold;">-</span>other) 0063 <span style="color:#27ae60;">@cvar</span> <span style="font-weight:bold;">+=</span> <span style="color:#f67400;">1</span> 0064 <span style="color:#fdbc4b;font-weight:bold;">else</span> 0065 unsafe_floored_div(other) 0066 <span style="color:#27ae60;">@ivar</span> <span style="font-weight:bold;">+=</span> <span style="color:#f67400;">10</span> 0067 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0068 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0069 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0070 0071 <span style="color:#8e44ad;font-weight:bold;">require</span> <span style="color:#f44f4f;">"llvm/enums/atomic"</span> 0072 <span style="color:#fdbc4b;font-weight:bold;">struct</span> <span style="color:#2980b9;">Atomic</span>(T) 0073 <span style="color:#7a7c7d;"># Creates an Atomic with the given initial value.</span> 0074 <span style="color:#fdbc4b;font-weight:bold;">def</span> compare_and_set(cmp : T, new : T) : <span style="font-weight:bold;">{</span>T, <span style="color:#2980b9;">Bool</span><span style="font-weight:bold;">}</span> 0075 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">if</span> T<span style="color:#2980b9;">.union?</span> <span style="font-weight:bold;">&&</span> T<span style="color:#2980b9;">.union_types.all?</span> <span style="font-weight:bold;">{</span> <span style="font-weight:bold;">|</span>t<span style="font-weight:bold;">|</span> t <span style="font-weight:bold;">==</span> <span style="color:#2980b9;">Nil</span> <span style="font-weight:bold;">||</span> t <span style="font-weight:bold;"><</span> <span style="color:#2980b9;">Reference</span> <span style="font-weight:bold;">}</span> <span style="font-weight:bold;">%}</span> 0076 address, success <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Ops</span><span style="color:#2980b9;">.cmpxchg</span>(pointerof(<span style="color:#27ae60;">@value</span>)<span style="color:#2980b9;">.as</span>(<span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="font-weight:bold;">*</span>), <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="color:#2980b9;">.new</span>(cmp<span style="color:#2980b9;">.as</span>(T)<span style="color:#2980b9;">.object_id</span>), <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="color:#2980b9;">.new</span>(new<span style="color:#2980b9;">.as</span>(T)<span style="color:#2980b9;">.object_id</span>), <span style="color:#da4453;">:sequentially_consistent</span>, <span style="color:#da4453;">:sequentially_consistent</span>) 0077 <span style="font-weight:bold;">{</span>address <span style="font-weight:bold;">==</span> <span style="color:#f67400;">0</span> ? <span style="color:#f67400;">nil</span> : <span style="color:#2980b9;">Pointer</span>(T)<span style="color:#2980b9;">.new</span>(address)<span style="color:#2980b9;">.as</span>(T), success<span style="font-weight:bold;">}</span> 0078 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">elsif</span> T <span style="font-weight:bold;"><</span> <span style="color:#2980b9;">Reference</span> <span style="font-weight:bold;">%}</span> 0079 <span style="color:#7a7c7d;"># Use addresses again (but this can't return nil)</span> 0080 address, success <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Ops</span><span style="color:#2980b9;">.cmpxchg</span>(pointerof(<span style="color:#27ae60;">@value</span>)<span style="color:#2980b9;">.as</span>(<span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="font-weight:bold;">*</span>), <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="color:#2980b9;">.new</span>(cmp<span style="color:#2980b9;">.as</span>(T)<span style="color:#2980b9;">.object_id</span>), <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="color:#2980b9;">.new</span>(new<span style="color:#2980b9;">.as</span>(T)<span style="color:#2980b9;">.object_id</span>), <span style="color:#da4453;">:sequentially_consistent</span>, <span style="color:#da4453;">:sequentially_consistent</span>) 0081 <span style="font-weight:bold;">{</span><span style="color:#2980b9;">Pointer</span>(T)<span style="color:#2980b9;">.new</span>(address)<span style="color:#2980b9;">.as</span>(T), success<span style="font-weight:bold;">}</span> 0082 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">else</span> <span style="font-weight:bold;">%}</span> 0083 <span style="color:#2980b9;">Ops</span><span style="color:#2980b9;">.cmpxchg</span>(pointerof(<span style="color:#27ae60;">@value</span>), cmp, new, <span style="color:#da4453;">:sequentially_consistent</span>, <span style="color:#da4453;">:sequentially_consistent</span>) 0084 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">end</span> <span style="font-weight:bold;">%}</span> 0085 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0086 0087 <span style="color:#fdbc4b;font-weight:bold;">def</span> swap(value : T) 0088 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">if</span> T<span style="color:#2980b9;">.union?</span> <span style="font-weight:bold;">&&</span> T<span style="color:#2980b9;">.union_types.all?</span> <span style="font-weight:bold;">{</span> <span style="font-weight:bold;">|</span>t<span style="font-weight:bold;">|</span> t <span style="font-weight:bold;">==</span> <span style="color:#2980b9;">Nil</span> <span style="font-weight:bold;">||</span> t <span style="font-weight:bold;"><</span> <span style="color:#2980b9;">Reference</span> <span style="font-weight:bold;">}</span> <span style="font-weight:bold;">||</span> T <span style="font-weight:bold;"><</span> <span style="color:#2980b9;">Reference</span> <span style="font-weight:bold;">%}</span> 0089 address <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Ops</span><span style="color:#2980b9;">.atomicrmw</span>(<span style="color:#da4453;">:xchg</span>, pointerof(<span style="color:#27ae60;">@value</span>)<span style="color:#2980b9;">.as</span>(<span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="font-weight:bold;">*</span>), <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span><span style="color:#2980b9;">.new</span>(value<span style="color:#2980b9;">.as</span>(T)<span style="color:#2980b9;">.object_id</span>), <span style="color:#da4453;">:sequentially_consistent</span>, <span style="color:#f67400;">false</span>) 0090 <span style="color:#2980b9;">Pointer</span>(T)<span style="color:#2980b9;">.new</span>(address)<span style="color:#2980b9;">.as</span>(T) 0091 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">else</span> <span style="font-weight:bold;">%}</span> 0092 <span style="color:#2980b9;">Ops</span><span style="color:#2980b9;">.atomicrmw</span>(<span style="color:#da4453;">:xchg</span>, pointerof(<span style="color:#27ae60;">@value</span>), value, <span style="color:#da4453;">:sequentially_consistent</span>, <span style="color:#f67400;">false</span>) 0093 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">end</span> <span style="font-weight:bold;">%}</span> 0094 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0095 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0096 0097 <span style="color:#fdbc4b;font-weight:bold;">class</span> <span style="color:#2980b9;">Deque</span>(T) 0098 <span style="color:#8e44ad;font-weight:bold;">include</span> <span style="color:#2980b9;">Indexable</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Mutable</span>(T) 0099 0100 <span style="color:#27ae60;">@start</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">0</span> 0101 <span style="color:#2980b9;font-weight:bold;">protected</span> <span style="color:#27ae60;">setter</span> size 0102 <span style="color:#2980b9;font-weight:bold;">private</span> <span style="color:#27ae60;">getter</span> buffer 0103 0104 <span style="color:#fdbc4b;font-weight:bold;">def</span> initialize(size : <span style="color:#2980b9;">Int</span>, value : T) 0105 <span style="color:#fdbc4b;font-weight:bold;">if</span> size <span style="font-weight:bold;"><</span> <span style="color:#f67400;">0</span> 0106 <span style="color:#8e44ad;font-weight:bold;">raise</span> <span style="color:#2980b9;">ArgumentError</span><span style="color:#2980b9;">.new</span>(<span style="color:#f44f4f;">"Negative deque size: </span><span style="color:#3daee9;">#{</span>size<span style="color:#3daee9;">}</span><span style="color:#f44f4f;">"</span>) 0107 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0108 <span style="color:#27ae60;">@size</span> <span style="font-weight:bold;">=</span> size<span style="color:#2980b9;">.to_i</span> 0109 <span style="color:#27ae60;">@capacity</span> <span style="font-weight:bold;">=</span> size<span style="color:#2980b9;">.to_i</span> 0110 0111 <span style="color:#fdbc4b;font-weight:bold;">unless</span> <span style="color:#27ae60;">@capacity</span> <span style="font-weight:bold;">==</span> <span style="color:#f67400;">0</span> 0112 <span style="color:#27ae60;">@buffer</span> <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Pointer</span>(T)<span style="color:#2980b9;">.malloc</span>(<span style="color:#27ae60;">@capacity</span>, value) 0113 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0114 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0115 0116 <span style="color:#7a7c7d;"># Returns a new `Deque` that has this deque's elements cloned.</span> 0117 <span style="color:#7a7c7d;"># That is, it returns a deep copy of this deque.</span> 0118 <span style="color:#7a7c7d;">#</span> 0119 <span style="color:#7a7c7d;"># Use `#dup` if you want a shallow copy.</span> 0120 <span style="color:#fdbc4b;font-weight:bold;">def</span> clone 0121 <span style="font-weight:bold;">{%</span> <span style="color:#fdbc4b;font-weight:bold;">if</span> T <span style="font-weight:bold;">==</span> <span style="font-weight:bold;">::</span><span style="color:#2980b9;">Bool</span> <span style="font-weight:bold;">||</span> T <span style="font-weight:bold;">==</span> <span style="font-weight:bold;">::</span><span style="color:#2980b9;">Char</span> <span style="font-weight:bold;">||</span> T <span style="font-weight:bold;">==</span> <span style="font-weight:bold;">::</span><span style="color:#2980b9;">String</span> <span style="font-weight:bold;">||</span> T <span style="font-weight:bold;">==</span> <span style="font-weight:bold;">::</span><span style="color:#2980b9;">Symbol</span> <span style="font-weight:bold;">||</span> T <span style="font-weight:bold;"><</span> <span style="font-weight:bold;">::</span><span style="color:#2980b9;">Number</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Primitive</span> <span style="font-weight:bold;">%</span><span style="font-weight:bold;">}</span> 0122 <span style="color:#2980b9;">Deque</span>(T)<span style="color:#2980b9;">.new</span>(size) <span style="font-weight:bold;">{</span> <span style="font-weight:bold;">|</span>i<span style="font-weight:bold;">|</span> <span style="color:#f67400;">self</span><span style="font-weight:bold;">[</span>i<span style="font-weight:bold;">]</span><span style="color:#2980b9;">.clone.as</span>(T) <span style="font-weight:bold;">}</span> 0123 <span style="font-weight:bold;">{</span>% <span style="color:#fdbc4b;font-weight:bold;">else</span> %<span style="font-weight:bold;">}</span> 0124 exec_recursive_clone <span style="color:#fdbc4b;font-weight:bold;">do</span> <span style="font-weight:bold;">|</span>hash<span style="font-weight:bold;">|</span> 0125 clone <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Deque</span>(T)<span style="color:#2980b9;">.new</span>(size) 0126 each <span style="color:#fdbc4b;font-weight:bold;">do</span> <span style="font-weight:bold;">|</span>element<span style="font-weight:bold;">|</span> 0127 clone <span style="font-weight:bold;"><<</span> element<span style="color:#2980b9;">.clone</span> 0128 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0129 clone 0130 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0131 <span style="font-weight:bold;">{</span>% <span style="color:#fdbc4b;font-weight:bold;">end</span> %<span style="font-weight:bold;">}</span> 0132 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0133 0134 <span style="color:#fdbc4b;font-weight:bold;">def</span> delete_at(index : <span style="color:#2980b9;">Int</span>) : T 0135 <span style="color:#fdbc4b;font-weight:bold;">unless</span> <span style="color:#f67400;">0</span> <span style="font-weight:bold;"><=</span> index <span style="font-weight:bold;"><</span> @size 0136 raise <span style="color:#2980b9;">IndexError</span><span style="color:#2980b9;">.new</span> 0137 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0138 <span style="color:#fdbc4b;font-weight:bold;">return</span> shift <span style="color:#fdbc4b;font-weight:bold;">if</span> index <span style="font-weight:bold;">==</span> <span style="color:#f67400;">0</span> 0139 0140 <span style="color:#fdbc4b;font-weight:bold;">if</span> index <span style="font-weight:bold;">></span> @size <span style="font-weight:bold;">//</span> <span style="color:#f67400;">2</span> 0141 <span style="color:#7a7c7d;"># Move following items to the left, starting with the first one</span> 0142 <span style="color:#7a7c7d;"># [56-01234] -> [6x-01235]</span> 0143 dst <span style="font-weight:bold;">=</span> rindex 0144 finish <span style="font-weight:bold;">=</span> (@start <span style="font-weight:bold;">+</span> @size <span style="font-weight:bold;">-</span> <span style="color:#f67400;">1</span>) <span style="font-weight:bold;">%</span> @capacity 0145 loop <span style="color:#fdbc4b;font-weight:bold;">do</span> 0146 src <span style="font-weight:bold;">=</span> dst <span style="font-weight:bold;">+</span> <span style="color:#f67400;">1</span> 0147 src <span style="font-weight:bold;">-=</span> @capacity <span style="color:#fdbc4b;font-weight:bold;">if</span> src <span style="font-weight:bold;">>=</span> @capacity 0148 @buffer<span style="font-weight:bold;">[</span>dst<span style="font-weight:bold;">]</span> <span style="font-weight:bold;">=</span> @buffer<span style="font-weight:bold;">[</span>src<span style="font-weight:bold;">]</span> 0149 <span style="color:#fdbc4b;font-weight:bold;">break</span> <span style="color:#fdbc4b;font-weight:bold;">if</span> src <span style="font-weight:bold;">==</span> finish 0150 dst <span style="font-weight:bold;">=</span> src 0151 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0152 (@buffer <span style="font-weight:bold;">+</span> finish)<span style="color:#2980b9;">.clear</span> 0153 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0154 0155 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0156 0157 <span style="color:#fdbc4b;font-weight:bold;">def</span> each(<span style="font-weight:bold;">& : </span>T <span style="font-weight:bold;">-></span>) : <span style="color:#2980b9;">Nil</span> 0158 halfs <span style="color:#fdbc4b;font-weight:bold;">do</span> <span style="font-weight:bold;">|</span>r<span style="font-weight:bold;">|</span> 0159 r<span style="color:#2980b9;">.each</span> <span style="color:#fdbc4b;font-weight:bold;">do</span> <span style="font-weight:bold;">|</span>i<span style="font-weight:bold;">|</span> 0160 <span style="color:#fdbc4b;font-weight:bold;">yield</span> @buffer<span style="font-weight:bold;">[</span>i<span style="font-weight:bold;">]</span> 0161 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0162 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0163 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0164 0165 <span style="color:#fdbc4b;font-weight:bold;">def</span> pop : T 0166 pop <span style="font-weight:bold;">{</span> <span style="color:#8e44ad;font-weight:bold;">raise</span> <span style="color:#2980b9;">IndexError</span><span style="color:#2980b9;">.new</span> <span style="font-weight:bold;">}</span> 0167 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0168 0169 0170 <span style="font-weight:bold;">macro</span> <span style="font-weight:bold;">[]</span>(<span style="font-weight:bold;">*</span>args) 0171 array <span style="font-weight:bold;">=</span> uninitialized <span style="color:#2980b9;">Array</span>(<span style="color:#2980b9;">Int32</span>) 0172 <span style="font-weight:bold;">{</span>% <span style="color:#fdbc4b;font-weight:bold;">for</span> arg, i <span style="color:#fdbc4b;font-weight:bold;">in</span> args %<span style="font-weight:bold;">}</span> 0173 array<span style="color:#2980b9;">.to_unsafe</span><span style="font-weight:bold;">[</span><span style="font-weight:bold;">{{</span>i<span style="font-weight:bold;">}}</span><span style="font-weight:bold;">]</span> <span style="font-weight:bold;">=</span> <span style="font-weight:bold;">{{</span>arg<span style="font-weight:bold;">}}</span> 0174 <span style="font-weight:bold;">{</span>% <span style="color:#fdbc4b;font-weight:bold;">end</span> %<span style="font-weight:bold;">}</span> 0175 array 0176 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0177 0178 <span style="color:#fdbc4b;font-weight:bold;">def</span> message : <span style="color:#2980b9;">String</span> 0179 <span style="color:#fdbc4b;font-weight:bold;">case</span> <span style="color:#f67400;">self</span> 0180 <span style="color:#fdbc4b;font-weight:bold;">when</span> <span style="color:#27aeae;font-weight:bold;">SUCCESS</span> <span style="color:#fdbc4b;font-weight:bold;">then</span> <span style="color:#f44f4f;">"No error occurred. System call completed successfully."</span> 0181 <span style="color:#fdbc4b;font-weight:bold;">when</span> <span style="color:#27aeae;font-weight:bold;">TXTBSY</span> <span style="color:#fdbc4b;font-weight:bold;">then</span> <span style="color:#2980b9;">Errno</span><span style="font-weight:bold;">::</span><span style="color:#27aeae;">ETXTBSY</span> 0182 <span style="color:#fdbc4b;font-weight:bold;">when</span> <span style="color:#27aeae;font-weight:bold;">NOTCAPABLE</span> <span style="color:#fdbc4b;font-weight:bold;">then</span> <span style="color:#2980b9;">Errno</span><span style="font-weight:bold;">::</span><span style="color:#27aeae;">ENOTCAPABLE</span> 0183 <span style="color:#fdbc4b;font-weight:bold;">else</span> <span style="color:#2980b9;">Errno</span><span style="font-weight:bold;">::</span><span style="color:#27aeae;">EINVAL</span> 0184 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0185 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0186 0187 enum <span style="color:#2980b9;">Signal</span> 0188 <span style="color:#27aeae;font-weight:bold;">KILL</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">0</span> 0189 <span style="color:#27aeae;font-weight:bold;">BILL</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">101</span> 0190 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0191 0192 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0193 0194 0195 <span style="color:#7a7c7d;"># :nodoc:</span> 0196 <span style="font-weight:bold;">module</span> <span style="color:#2980b9;">Ops</span> 0197 <span style="color:#7a7c7d;"># Defines methods that directly map to LLVM instructions related to atomic operations.</span> 0198 0199 @<span style="font-weight:bold;">[</span><span style="color:#2980b9;">Primitive</span>(<span style="color:#da4453;">:cmpxchg</span>)<span style="font-weight:bold;">]</span> 0200 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.cmpxchg</span>(ptr : T<span style="font-weight:bold;">*</span>, cmp : T, new : T, success_ordering : <span style="color:#27aeae;font-weight:bold;">LLVM</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">AtomicOrdering</span>, failure_ordering : <span style="color:#27aeae;font-weight:bold;">LLVM</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">AtomicOrdering</span>) : <span style="font-weight:bold;">{</span>T, <span style="color:#2980b9;">Bool</span><span style="font-weight:bold;">}</span> forall T 0201 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0202 0203 @<span style="font-weight:bold;">[</span><span style="color:#2980b9;">Primitive</span>(<span style="color:#da4453;">:atomicrmw</span>)<span style="font-weight:bold;">]</span> 0204 <span style="color:#fdbc4b;font-weight:bold;">def</span> <span style="color:#f67400;">self</span><span style="color:#2980b9;">.atomicrmw</span>(op : <span style="color:#27aeae;font-weight:bold;">LLVM</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">AtomicRMWBinOp</span>, ptr : T<span style="font-weight:bold;">*</span>, val : T, ordering : <span style="color:#27aeae;font-weight:bold;">LLVM</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">AtomicOrdering</span>, singlethread : <span style="color:#2980b9;">Bool</span>) : T forall T 0205 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0206 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0207 0208 0209 @<span style="font-weight:bold;">[</span><span style="color:#2980b9;">Link</span>(<span style="color:#f44f4f;">"z"</span>)<span style="font-weight:bold;">]</span> 0210 lib <span style="color:#2980b9;">LibZ</span> 0211 <span style="font-weight:bold;">alias</span> <span style="color:#2980b9;">Char</span> <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">Char</span> 0212 <span style="font-weight:bold;">alias</span> <span style="color:#2980b9;">SizeT</span> <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">LibC</span><span style="font-weight:bold;">::</span><span style="color:#2980b9;">SizeT</span> 0213 0214 fun zlibVersion : <span style="color:#2980b9;">Char</span><span style="font-weight:bold;">*</span> 0215 fun crc32_combine(crc1 : <span style="color:#2980b9;">ULong</span>, crc2 : <span style="color:#2980b9;">ULong</span>, len : <span style="color:#2980b9;">Long</span>) : <span style="color:#2980b9;">ULong</span> 0216 0217 <span style="font-weight:bold;">alias</span> <span style="color:#2980b9;">AllocFunc</span> <span style="font-weight:bold;">=</span> <span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span>, <span style="color:#2980b9;">UInt</span>, <span style="color:#2980b9;">UInt</span> <span style="font-weight:bold;">-></span> <span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span> 0218 <span style="font-weight:bold;">alias</span> <span style="color:#2980b9;">FreeFunc</span> <span style="font-weight:bold;">=</span> (<span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span>, <span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span>) <span style="font-weight:bold;">-></span> 0219 0220 <span style="font-weight:bold;">struct</span> <span style="color:#2980b9;">ZStream</span> 0221 next_in : <span style="color:#2980b9;">Bytef</span><span style="font-weight:bold;">*</span> 0222 avail_in : <span style="color:#2980b9;">UInt</span> 0223 next_out : <span style="color:#2980b9;">Bytef</span><span style="font-weight:bold;">*</span> 0224 total_out : <span style="color:#2980b9;">ULong</span> 0225 msg : <span style="color:#2980b9;">Char</span><span style="font-weight:bold;">*</span> 0226 state : <span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span> 0227 zalloc : <span style="color:#2980b9;">AllocFunc</span> 0228 zfree : <span style="color:#2980b9;">FreeFunc</span> 0229 opaque : <span style="color:#2980b9;">Void</span><span style="font-weight:bold;">*</span> 0230 data_type : <span style="color:#2980b9;">Int</span> 0231 adler : <span style="color:#2980b9;">Long</span> 0232 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0233 0234 <span style="color:#7a7c7d;"># error codes</span> 0235 enum <span style="color:#2980b9;">Error</span> 0236 <span style="color:#27aeae;font-weight:bold;">OK</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">0</span> 0237 <span style="color:#27aeae;font-weight:bold;">VERSION_ERROR</span> <span style="font-weight:bold;">=</span> <span style="font-weight:bold;">-</span><span style="color:#f67400;">6</span> 0238 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0239 0240 enum <span style="color:#2980b9;">Flush</span> 0241 <span style="color:#27aeae;font-weight:bold;">NO_FLUSH</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">0</span> 0242 <span style="color:#27aeae;font-weight:bold;">TREES</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">6</span> 0243 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0244 0245 <span style="color:#27aeae;font-weight:bold;">MAX_BITS</span> <span style="font-weight:bold;">=</span> <span style="color:#f67400;">15</span> 0246 0247 fun deflateInit2 <span style="font-weight:bold;">=</span> deflateInit2_(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, level : <span style="color:#2980b9;">Int32</span>, method : <span style="color:#2980b9;">Int32</span>, 0248 window_bits : <span style="color:#2980b9;">Int32</span>, mem_level : <span style="color:#2980b9;">Int32</span>, strategy : <span style="color:#2980b9;">Int32</span>, 0249 version : <span style="color:#2980b9;">UInt8</span><span style="font-weight:bold;">*</span>, stream_size : <span style="color:#2980b9;">Int32</span>) : <span style="color:#2980b9;">Error</span> 0250 fun deflate(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, flush : <span style="color:#2980b9;">Flush</span>) : <span style="color:#2980b9;">Error</span> 0251 fun deflateSetDictionary(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, dictionary : <span style="color:#2980b9;">UInt8</span><span style="font-weight:bold;">*</span>, len : <span style="color:#2980b9;">UInt</span>) : <span style="color:#2980b9;">Int</span> 0252 0253 fun inflateInit2 <span style="font-weight:bold;">=</span> inflateInit2_(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, window_bits : <span style="color:#2980b9;">Int32</span>, version : <span style="color:#2980b9;">UInt8</span><span style="font-weight:bold;">*</span>, stream_size : <span style="color:#2980b9;">Int32</span>) : <span style="color:#2980b9;">Error</span> 0254 fun inflate(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, flush : <span style="color:#2980b9;">Flush</span>) : <span style="color:#2980b9;">Error</span> 0255 fun inflateSetDictionary(stream : <span style="color:#2980b9;">ZStream</span><span style="font-weight:bold;">*</span>, dictionary : <span style="color:#2980b9;">UInt8</span><span style="font-weight:bold;">*</span>, len : <span style="color:#2980b9;">UInt</span>) : <span style="color:#2980b9;">Error</span> 0256 <span style="color:#fdbc4b;font-weight:bold;">end</span> 0257 </pre></body></html>