diff --git a/debugging/fileutil.cpp b/debugging/fileutil.cpp index 8bde202aaba5ad89c030762c2bb9a055b06c4d1b..033da3b5819750cc3a2ef06ee870419f03adcea1 100644 --- a/debugging/fileutil.cpp +++ b/debugging/fileutil.cpp @@ -20,27 +20,17 @@ using namespace std; int main(int argc, char **argv) { int cur = 0; - char *lines[16536]; - char line[80]; + + char line[1000]; // Fix num lines, num columns, strdup-1 - FILE *fin = fopen("bible.txt", "r"); - //end-of-file condition is detected after trying read, not before. - //fopen passes a NULL. - if(fin){ + FILE *fin = fopen("bible.txt", "r"); + FILE *fout = fopen("copy.txt", "w"); + while (!feof(fin)) { getline(line, fin); - lines[cur] = (char*) malloc(strlen(line)); - strcpy(lines[cur], line); - cur++; - } - fclose(fin); - } - - FILE *fout = fopen("copy.txt", "w"); - - for (int i=0; i<cur; i++) { - fputs(lines[i], fout); + fputs(line, fout); } + fclose(fin); fclose(fout); return 0; diff --git a/debugging/workitems.c b/debugging/workitems.c index 0728aead0cd005a2e4cb6fe084d6e437a441fa79..fa1897ac7514504566ee9048d57f3422ead192f0 100644 --- a/debugging/workitems.c +++ b/debugging/workitems.c @@ -3,6 +3,9 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <pthread.h> + +pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; typedef struct workitem { void (*fn)(double *); @@ -19,7 +22,11 @@ static void* launchThread(void *in) volatile int started = 0; while (!(started = data->started)); while (1) { + + pthread_mutex_lock(&lock); n = data->current++; + pthread_mutex_unlock(&lock); + if (n >= data->len) break; data->fn(&data->data[n]); } @@ -42,7 +49,10 @@ void launchParallel(int numThreads, double *values, int len, void (*fn)(double * for (int i=0; i<numThreads; i++) { assert(0 == pthread_create(&th[i], NULL, launchThread, data)); } + data->started = 1; + + for (int i=0; i<numThreads; i++) { assert(th[i] && 0==pthread_join(th[i], NULL)); } diff --git a/julia/dowhile.jl b/julia/dowhile.jl index 084bb245ba34a416f631755bc19537cf12d36b74..b8d3425bc70857ce6457cbfcf75a622f5ccf29f0 100644 --- a/julia/dowhile.jl +++ b/julia/dowhile.jl @@ -1,5 +1,4 @@ macro doWhile(block, cond) - println("__source__ ", __source__) println("cond ", cond) println("block ", block) @@ -12,10 +11,12 @@ macro doWhile(block, cond) end end - - - # println(res) # Should not print any lines referencing dowhile.jl - res.args[1].striplines + replace!(arg -> typeof(arg) <: LineNumberNode ? __source__ : arg, res.args) + + + res + println(res.args) + end diff --git a/profiling/statprof/abstractinterpretation-jl-35ae29f448859d864444-line.html b/profiling/statprof/abstractinterpretation-jl-35ae29f448859d864444-line.html new file mode 100644 index 0000000000000000000000000000000000000000..014df8fa5b3cd7f66554dc29447abdf7900e1964 --- /dev/null +++ b/profiling/statprof/abstractinterpretation-jl-35ae29f448859d864444-line.html @@ -0,0 +1,12646 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/abstractinterpretation.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">############# +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"># constants # +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">############# +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">const CoreNumType = Union{Int32, Int64, Float32, Float64} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">const _REF_NAME = Ref.body.name +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">######### +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"># logic # +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">######### +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"># see if the inference result might affect the final answer +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">call_result_unused(frame::InferenceState, pc::LineNum=frame.currpc) = +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> isexpr(frame.src.code[frame.currpc], :call) && isempty(frame.ssavalue_uses[pc]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call_gf_by_type-19"></a> + 2 (5.41%) samples spent in abstract_call_gf_by_type<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + abstract_call + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-829">line 829</a><br /> + </div> + <span class="code">function abstract_call_gf_by_type(@nospecialize(f), argtypes::Vector{Any}, @nospecialize(atype), sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> atype_params = unwrap_unionall(atype).parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> ft = unwrap_unionall(atype_params[1]) # TODO: ccall jl_first_argument_datatype here +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(ft, DataType) || return Any # the function being called is unknown. can't properly handle this backedge right now +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> ftname = ft.name +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(ftname, :mt) || return Any # not callable. should be Bottom, but can't track this backedge right now +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> if ftname === _TYPE_NAME +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> tname = ft.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(tname, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> tname = tname.ub +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> tname = unwrap_unionall(tname) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(tname, DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> # can't track the backedge to the ctor right now +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> # for things like Union +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid = UInt[typemin(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid = UInt[typemax(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> splitunions = 1 < countunionsplit(atype_params) <= sv.params.MAX_UNION_SPLITTING +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> if splitunions +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> splitsigs = switchtupleunion(atype) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> applicable = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> for sig_n in splitsigs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> xapplicable = _methods_by_ftype(sig_n, sv.params.MAX_METHODS, sv.params.world, min_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> xapplicable === false && return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(applicable, xapplicable) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-49"></a>49</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="reflection-jl-e4829e64897104a61856-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-reflection-jl-_methods_by_ftype-721">_methods_by_ftype</a><br /> + </div> + <span class="code"> applicable = _methods_by_ftype(atype, sv.params.MAX_METHODS, sv.params.world, min_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> if applicable === false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> # this means too many methods matched +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> # (assume this will always be true, so we don't compute / update valid age in this case) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> update_valid_age!(min_valid[1], max_valid[1], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> applicable = applicable::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> napplicable = length(applicable) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> rettype = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> edges = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> nonbot = 0 # the index of the only non-Bottom inference result if > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> seen = 0 # number of signatures actually inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:napplicable +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> match = applicable[i]::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> method = match[3]::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> sig = match[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> sigtuple = unwrap_unionall(sig)::DataType +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> splitunions = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> this_rt = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: splitunions = 1 < countunionsplit(sigtuple.parameters) * napplicable <= sv.params.MAX_UNION_SPLITTING +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> # currently this triggers a bug in inference recursion detection +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> if splitunions +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> splitsigs = switchtupleunion(sig) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> for sig_n in splitsigs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> rt, edgecycle1, edge = abstract_call_method(method, sig_n, svec(), sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> if edge !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(edges, edge) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle |= edgecycle1::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> this_rt = tmerge(this_rt, rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> this_rt === Any && break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> this_rt, edgecycle, edge = abstract_call_method(method, sig, match[2]::SimpleVector, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> if edge !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(edges, edge) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> if this_rt !== Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> if nonbot === 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> nonbot = i +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> nonbot = -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> seen += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> rettype = tmerge(rettype, this_rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> rettype === Any && break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> # try constant propagation if only 1 method is inferred to non-Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> # this is in preparation for inlining, or improving the return result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> if nonbot > 0 && seen == napplicable && !edgecycle && isa(rettype, Type) && sv.params.ipo_constant_propagation +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> # if there's a possibility we could constant-propagate a better result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> # (hopefully without doing too much work), try to do that now +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: it feels like this could be better integrated into abstract_call_method / typeinf_edge +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-107"></a>107</td> + <td></td> + <td>3 (8.11%)</td> + <td> + <div class="callees"> + 2 (66.67%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call_method_with_const_args-145">abstract_call_method_with_const_args</a><br /> + </div> + <span class="code"> const_rettype = abstract_call_method_with_const_args(f, argtypes, applicable[nonbot]::SimpleVector, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> if const_rettype ⊑ rettype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> # use the better result, if it's a refinement of rettype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> rettype = const_rettype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> if call_result_unused(sv) && !(rettype === Bottom) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> # We're mainly only here because the optimizer might want this code, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> # but we ourselves locally don't typically care about it locally +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> # (beyond checking if it always throws). +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> # So avoid adding an edge, since we don't want to bother attempting +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> # to improve our result even if it does change (to always throw), +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> # and avoid keeping track of a more complex result type. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> rettype = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(rettype === Any) # adding a new method couldn't refine (widen) this type +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> for edge in edges +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> add_backedge!(edge::MethodInstance, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> fullmatch = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in napplicable:-1:1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> match = applicable[i]::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> method = match[3]::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> if atype <: method.sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> fullmatch = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> if !fullmatch +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> # also need an edge to the method table in case something gets +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> # added that did not intersect with any existing method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> add_mt_backedge!(ftname.mt, atype, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> #print("=> ", rettype, "\n") +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> return rettype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call_method_with_const_args-145"></a> + 2 (5.41%) samples spent in abstract_call_method_with_const_args<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + abstract_call_gf_by_type + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-107">line 107</a><br /> + </div> + <span class="code">function abstract_call_method_with_const_args(@nospecialize(f), argtypes::Vector{Any}, match::SimpleVector, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> method = match[3]::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs::Int = method.nargs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> method.isva && (nargs -= 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> length(argtypes) >= nargs || return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> haveconst = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> for a in argtypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> a = maybe_widen_conditional(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a, Const) && !isdefined(typeof(a.val), :instance) && !(isa(a.val, Type) && issingletontype(a.val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> # have new information from argtypes that wasn't available from the signature +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a.val, Symbol) || isa(a.val, Type) || (!isa(a.val, String) && isimmutable(a.val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> # don't consider mutable values or Strings useful constants +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> haveconst = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> haveconst || return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> sig = match[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> sparams = match[2]::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code_for_method(method, sig, sparams, sv.params.world) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> code === nothing && return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code::MethodInstance +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> # decide if it's likely to be worthwhile +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> declared_inline = isdefined(method, :source) && ccall(:jl_ast_flag_inlineable, Bool, (Any,), method.source) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_inlineable = declared_inline +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(code, :inferred) && !cache_inlineable +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_inf = code.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(cache_inf === nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_src_inferred = ccall(:jl_ast_flag_inferred, Bool, (Any,), cache_inf) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_src_inlineable = ccall(:jl_ast_flag_inlineable, Bool, (Any,), cache_inf) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_inlineable = cache_src_inferred && cache_src_inlineable +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> if !cache_inlineable && !sv.params.aggressive_constant_propagation +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> tm = _topmod(sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> if !istopfunction(f, :getproperty) && !istopfunction(f, :setproperty!) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> # in this case, see if all of the arguments are constants +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> for a in argtypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> a = maybe_widen_conditional(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(a, Const) && !isconstType(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> inf_result = cache_lookup(code, argtypes, sv.params.cache) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> if inf_result === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> inf_result = InferenceResult(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> atypes = get_argtypes(inf_result) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> if method.isva +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> vargs = argtypes[(nargs + 1):end] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(vargs) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> a = maybe_widen_conditional(vargs[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> if i > length(inf_result.vargs) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(inf_result.vargs, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif a isa Const +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> inf_result.vargs[i] = a +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:nargs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> a = maybe_widen_conditional(argtypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> if a isa Const +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> atypes[i] = a # inject Const argtypes into inference +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(inf_result, #=cache=#false, sv.params) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.limited = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.parent = sv +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(sv.params.cache, inf_result) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-216"></a>216</td> + <td></td> + <td>3 (8.11%)</td> + <td> + <div class="callees"> + 2 (66.67%) + samples spent calling + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf-13">typeinf</a><br /> + </div> + <span class="code"> typeinf(frame) || return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> result = inf_result.result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(result, InferenceState) && return Any # TODO: is this recursive constant inference? +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> add_backedge!(inf_result.linfo, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_call_method(method::Method, @nospecialize(sig), sparams::SimpleVector, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> if method.name === :depwarn && isdefined(Main, :Base) && method.module === Main.Base +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any, false, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> # Limit argument type tuple growth of functions: +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> # look through the parents list to see if there's a call to the same method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> # and from the same method. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> # Returns the topmost occurrence of that repeated edge. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> cyclei = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = sv +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> # The `method_for_inference_heuristics` will expand the given method's generator if +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> # necessary in order to retrieve this field from the generated `CodeInfo`, if it exists. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> # The other `CodeInfo`s we inspect will already have this field inflated, so we just +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> # access it directly instead (to avoid regeneration). +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> method2 = method_for_inference_heuristics(method, sig, sparams, sv.params.world) # Union{Method, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> sv_method2 = sv.src.method_for_inference_limit_heuristics # limit only if user token match +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> sv_method2 isa Method || (sv_method2 = nothing) # Union{Method, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> while !(infstate === nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = infstate::InferenceState +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> if method === infstate.linfo.def +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> if infstate.linfo.specTypes == sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> # avoid widening when detecting self-recursion +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: merge call cycle and return right away +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> if call_result_unused(sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> # since we don't use the result (typically), +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> # we have a self-cycle in the call-graph, but not in the inference graph (typically): +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> # break this edge now (before we record it) by returning early +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> # (non-typically, this means that we lose the ability to detect a guaranteed StackOverflow in some cases) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any, false, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> inf_method2 = infstate.src.method_for_inference_limit_heuristics # limit only if user token match +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> inf_method2 isa Method || (inf_method2 = nothing) # Union{Method, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> if topmost === nothing && method2 === inf_method2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> # inspect the parent of this edge, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> # to see if they are the same Method as sv +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> # in which case we'll need to ensure it is convergent +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> # otherwise, we don't +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> for parent in infstate.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> # check in the cycle list first +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> # all items in here are mutual parents of all others +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> parent_method2 = parent.src.method_for_inference_limit_heuristics # limit only if user token match +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> parent_method2 isa Method || (parent_method2 = nothing) # Union{Method, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> if parent.linfo.def === sv.linfo.def && sv_method2 === parent_method2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = infstate +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> let parent = infstate.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> # then check the parent link +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> if topmost === nothing && parent !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> parent = parent::InferenceState +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> parent_method2 = parent.src.method_for_inference_limit_heuristics # limit only if user token match +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> parent_method2 isa Method || (parent_method2 = nothing) # Union{Method, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> if (parent.cached || parent.limited) && parent.linfo.def === sv.linfo.def && sv_method2 === parent_method2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = infstate +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> # iterate through the cycle before walking to the parent +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> if cyclei < length(infstate.callers_in_cycle) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> cyclei += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = infstate.callers_in_cycle[cyclei] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> cyclei = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = infstate.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(topmost === nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = topmost::InferenceState +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> sigtuple = unwrap_unionall(sig)::DataType +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> msig = unwrap_unionall(method.sig)::DataType +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> spec_len = length(msig.parameters) + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> ls = length(sigtuple.parameters) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> if method === sv.linfo.def +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> # Under direct self-recursion, permit much greater use of reducers. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> # here we assume that complexity(specTypes) :>= complexity(sig) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> comparison = sv.linfo.specTypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> l_comparison = length(unwrap_unionall(comparison).parameters) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> spec_len = max(spec_len, l_comparison) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> comparison = method.sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> # see if the type is actually too big (relative to the caller), and limit it if required +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> newsig = limit_type_size(sig, comparison, sv.linfo.specTypes, sv.params.TUPLE_COMPLEXITY_LIMIT_DEPTH, spec_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> if newsig !== sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> # continue inference, but note that we've limited parameter complexity +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> # on this call (to ensure convergence), so that we don't cache this result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> if call_result_unused(sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> # if we don't (typically) actually care about this result, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> # don't bother trying to examine some complex abstract signature +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> # since it's very unlikely that we'll try to inline this, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> # or want make an invoke edge to its calling convention return type. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> # (non-typically, this means that we lose the ability to detect a guaranteed StackOverflow in some cases) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any, false, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = sv +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> topmost = topmost::InferenceState +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> while !(infstate === topmost.parent) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> if call_result_unused(infstate) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> # If we won't propagate the result any further (since it's typically unused), +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> # it's OK that we keep and cache the "limited" result in the parents +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> # (non-typically, this means that we lose the ability to detect a guaranteed StackOverflow in some cases) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: we might be able to halt progress much more strongly here, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> # since now we know we won't be able to keep anything much that we learned. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> # We were mainly only here to compute the calling convention return type, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> # but in most situations now, we are unlikely to be able to use that information. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate.limited = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> for infstate_cycle in infstate.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate_cycle.limited = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> infstate = infstate.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> sig = newsig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> sparams = svec() +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> # if sig changed, may need to recompute the sparams environment +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(method.sig, UnionAll) && isempty(sparams) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> recomputed = ccall(:jl_type_intersection_with_env, Any, (Any, Any), sig, method.sig)::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> #@assert recomputed[1] !== Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> # We must not use `sig` here, since that may re-introduce structural complexity that +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> # our limiting heuristic sought to eliminate. The alternative would be to not increment depth over covariant contexts, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> # but we prefer to permit inference of tuple-destructuring, so we don't do that right now +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> # For example, with a signature such as `Tuple{T, Ref{T}} where {T <: S}` +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> # we might want to limit this to `Tuple{S, Ref}`, while type-intersection can instead give us back the original type +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> # (which moves `S` back up to a lower comparison depth) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> # Optionally, we could try to drive this to a fixed point, but I think this is getting too complex, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> # and this would only cause more questions and more problems +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> # (the following is only an example, most of the statements are probable in the wrong order): +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> # newsig = sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> # seen = IdSet() +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> # while !(newsig in seen) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> # push!(seen, newsig) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> # lsig = length((unwrap_unionall(sig)::DataType).parameters) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> # newsig = limit_type_size(newsig, sig, sv.linfo.specTypes, sv.params.TUPLE_COMPLEXITY_LIMIT_DEPTH, lsig) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> # recomputed = ccall(:jl_type_intersection_with_env, Any, (Any, Any), newsig, method.sig)::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> # newsig = recomputed[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> # end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> # sig = ? +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> sparams = recomputed[2]::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> rt, edge = typeinf_edge(method, sig, sparams, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> if edge === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> edgecycle = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> return rt, edgecycle, edge +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"># This is only for use with `Conditional`. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"># In general, usage of this is wrong. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">function ssa_def_expr(@nospecialize(arg), sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> while isa(arg, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> arg = sv.src.code[arg.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> return arg +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"># `typ` is the inferred type for expression `arg`. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"># if the expression constructs a container (e.g. `svec(x,y,z)`), +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"># refine its type to an array of element types. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"># Union of Tuples of the same length is converted to Tuple of Unions. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"># returns an array of types +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">function precise_container_type(@nospecialize(arg), @nospecialize(typ), vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(typ, Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> val = typ.val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SimpleVector) || isa(val, Tuple) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[ Const(val[i]) for i in 1:length(val) ] # avoid making a tuple Generator here! +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> arg = ssa_def_expr(arg, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_specializable_vararg_slot(arg, sv.nargs, sv.result.vargs) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> return sv.result.vargs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> tti0 = widenconst(typ) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> tti = unwrap_unionall(tti0) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(arg, Expr) && arg.head === :call && (abstract_evals_to_constant(arg.args[1], svec, vtypes, sv) || +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_evals_to_constant(arg.args[1], tuple, vtypes, sv)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> aa = arg.args +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> result = Any[ abstract_eval(aa[j],vtypes,sv) for j=2:length(aa) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> if _any(isvarargtype, result) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{Any}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(tti, Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> utis = uniontypes(tti) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> if _any(t -> !isa(t,DataType) || !(t <: Tuple) || !isknownlength(t), utis) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{Any}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> result = Any[rewrap_unionall(p, tti0) for p in utis[1].parameters] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> for t in utis[2:end] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(t.parameters) != length(result) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{Any}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> for j in 1:length(t.parameters) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> result[j] = tmerge(result[j], rewrap_unionall(t.parameters[j], tti0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(tti0,DataType) && tti0 <: Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvatuple(tti0) && length(tti0.parameters) == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{unwrapva(tti0.parameters[1])}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[ p for p in tti0.parameters ] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif tti0 <: Array +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{eltype(tti0)}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> return abstract_iteration(typ, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"># simulate iteration protocol on container type up to fixpoint +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_iteration(@nospecialize(itertype), vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isdefined(Main, :Base) || !isdefined(Main.Base, :iterate) || !isconst(Main.Base, :iterate) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Vararg{Any}] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> iteratef = getfield(Main.Base, :iterate) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = abstract_call(iteratef, (), Any[Const(iteratef), itertype], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> # Return Bottom if this is not an iterator. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> # WARNING: Changes to the iteration protocol must be reflected here, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> # this is not just an optimization. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet === Bottom && return Any[Bottom] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> valtype = statetype = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = widenconst(stateordonet) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> while !(Nothing <: stateordonet) && length(ret) < sv.params.MAX_TUPLE_SPLAT +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(stateordonet, DataType) || !(stateordonet <: Tuple) || isvatuple(stateordonet) || length(stateordonet.parameters) != 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> if stateordonet.parameters[2] <: statetype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> # infinite (or failing) iterator +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any[Bottom] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> valtype = stateordonet.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> statetype = stateordonet.parameters[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ret, valtype) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = abstract_call(iteratef, (), Any[Const(iteratef), itertype, statetype], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = widenconst(stateordonet) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> if stateordonet === Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> while valtype !== Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> nounion = typesubtract(stateordonet, Nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(nounion, DataType) || !(nounion <: Tuple) || isvatuple(nounion) || length(nounion.parameters) != 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> valtype = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> if nounion.parameters[1] <: valtype && nounion.parameters[2] <: statetype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> valtype = tmerge(valtype, nounion.parameters[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> statetype = tmerge(statetype, nounion.parameters[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = abstract_call(iteratef, (), Any[Const(iteratef), itertype, statetype], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> stateordonet = widenconst(stateordonet) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ret, Vararg{valtype}) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"># do apply(af, fargs...), where af is a function value +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_apply(@nospecialize(aft), fargs::Union{Tuple{},Vector{Any}}, aargtypes::Vector{Any}, vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(aft, Const) && (!isType(aft) || has_free_typevars(aft)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isconcretetype(aft) || (aft <: Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> # non-constant function of unknown type: bail now, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> # since it seems unlikely that abstract_call will be able to do any better after splitting +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> # this also ensures we don't call abstract_call_gf_by_type below on an IntrinsicFunction or Builtin +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> res = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs = length(aargtypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert fargs === () || nargs == length(fargs) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> splitunions = 1 < countunionsplit(aargtypes) <= sv.params.MAX_APPLY_UNION_ENUM +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> ctypes = Any[Any[aft]] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:nargs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> ctypes´ = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> for ti in (splitunions ? uniontypes(aargtypes[i]) : Any[aargtypes[i]]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> cti = precise_container_type(fargs === () ? nothing : fargs[i], ti, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> if _any(t -> t === Bottom, cti) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> for ct in ctypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(ct[end]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> tail = tuple_tail_elem(unwrapva(ct[end]), cti) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ctypes´, push!(ct[1:(end - 1)], tail)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ctypes´, append_any(ct, cti)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> ctypes = ctypes´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> for ct in ctypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(aft, Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = abstract_call(aft.val, (), ct, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isconstType(aft) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = abstract_call(aft.parameters[1], (), ct, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> astype = argtypes_to_type(ct) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = abstract_call_gf_by_type(nothing, ct, astype, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> res = tmerge(res, rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> if res === Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> return res +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">function pure_eval_call(@nospecialize(f), argtypes::Vector{Any}, @nospecialize(atype), sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:length(argtypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> a = maybe_widen_conditional(argtypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(isa(a, Const) || isconstType(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid = UInt[typemin(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid = UInt[typemax(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> meth = _methods_by_ftype(atype, 1, sv.params.world, min_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> if meth === false || length(meth) != 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> meth = meth[1]::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> method = meth[3]::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: check pure on the inferred thunk +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(method, :generator) || !method.pure +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> args = Any[ (a = maybe_widen_conditional(argtypes[i]); isa(a, Const) ? a.val : a.parameters[1]) for i in 2:length(argtypes) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> value = Core._apply_pure(f, args) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: add some sort of edge(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(value, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> catch +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call-583"></a> + 2 (5.41%) samples spent in abstract_call<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + abstract_eval_call + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-858">line 858</a><br /> + </div> + <span class="code">function abstract_call(@nospecialize(f), fargs::Union{Tuple{},Vector{Any}}, argtypes::Vector{Any}, vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> if f === _apply +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> return abstract_apply(argtypes[2], fargs[3:end], argtypes[3:end], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> la = length(argtypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:(la - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(argtypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Builtin) || isa(f, IntrinsicFunction) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> if f === ifelse && fargs isa Vector{Any} && length(argtypes) == 4 && argtypes[2] isa Conditional +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> # try to simulate this as a real conditional (`cnd ? x : y`), so that the penalty for using `ifelse` instead isn't too high +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> cnd = argtypes[2]::Conditional +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> tx = argtypes[3] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> ty = argtypes[4] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ssa_def_expr(fargs[3], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> b = ssa_def_expr(fargs[4], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a, Slot) && slot_id(cnd.var) == slot_id(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> tx = typeintersect(tx, cnd.vtype) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(b, Slot) && slot_id(cnd.var) == slot_id(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> ty = typeintersect(ty, cnd.elsetype) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> return tmerge(tx, ty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = builtin_tfunction(f, argtypes[2:end], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> if f === getfield && isa(fargs, Vector{Any}) && length(argtypes) == 3 && isa(argtypes[3], Const) && isa(argtypes[3].val, Int) && argtypes[2] ⊑ Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> cti = precise_container_type(fargs[2], argtypes[2], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> idx = argtypes[3].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> if 1 <= idx <= length(cti) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = unwrapva(cti[idx]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (rt === Bool || (isa(rt, Const) && isa(rt.val, Bool))) && isa(fargs, Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> # perform very limited back-propagation of type information for `is` and `isa` +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> if f === isa +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ssa_def_expr(fargs[2], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = widenconst(argtypes[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> if rt === Const(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(a, Union{}, aty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif rt === Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(a, aty, Union{}) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> tty_ub, isexact_tty = instanceof_tfunc(argtypes[3]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> if isexact_tty && !isa(tty_ub, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> tty_lb = tty_ub # TODO: this would be wrong if !isexact_tty, but instanceof_tfunc doesn't preserve this info +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code"> if !has_free_typevars(tty_lb) && !has_free_typevars(tty_ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> ifty = typeintersect(aty, tty_ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> elty = typesubtract(aty, tty_lb) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(a, ifty, elty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === (===) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ssa_def_expr(fargs[2], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> b = ssa_def_expr(fargs[3], sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = argtypes[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> bty = argtypes[3] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> # if doing a comparison to a singleton, consider returning a `Conditional` instead +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(aty, Const) && isa(b, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> if rt === Const(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif rt === Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> bty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif bty isa Type && isdefined(typeof(aty.val), :instance) # can only widen a if it is a singleton +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> bty = typesubtract(bty, typeof(aty.val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(b, aty, bty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(bty, Const) && isa(a, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> if rt === Const(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> bty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif rt === Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif aty isa Type && isdefined(typeof(bty.val), :instance) # same for b +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = typesubtract(aty, typeof(bty.val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(a, bty, aty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(b, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(b, bty, bty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(a, aty, aty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === Core.Compiler.not_int +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = argtypes[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(aty, Conditional) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"> ifty = aty.elsetype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"> elty = aty.vtype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> if rt === Const(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"> ifty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif rt === Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"> elty = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(aty.var, ifty, elty) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(rt, TypeVar) ? rt.ub : rt +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === Core.kwfunc +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(argtypes) == 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> ft = widenconst(argtypes[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(ft, DataType) && isdefined(ft.name, :mt) && isdefined(ft.name.mt, :kwsorter) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(ft.name.mt.kwsorter) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> ub = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> ub_certain = lb_certain = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(argtypes) >= 2 && isa(argtypes[2], Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> nv = argtypes[2].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> ubidx = 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(argtypes) >= 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> ubidx = 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(argtypes[3], Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = argtypes[3].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isType(argtypes[3]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = argtypes[3].parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> lb_certain = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code"> return TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(argtypes) >= ubidx +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(argtypes[ubidx], Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code"> ub = argtypes[ubidx].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isType(argtypes[ubidx]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> ub = argtypes[ubidx].parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"> ub_certain = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code"> return TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> tv = TypeVar(nv, lb, ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> return PartialTypeVar(tv, lb_certain, ub_certain) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> return TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === UnionAll +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(argtypes) == 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> canconst = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(argtypes[3], Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"> body = argtypes[3].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isType(argtypes[3]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"> body = argtypes[3].parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> canconst = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(body, Type) && !isa(body, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> if has_free_typevars(body) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(argtypes[2], Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> tv = argtypes[2].val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(argtypes[2], PartialTypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> ptv = argtypes[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> tv = ptv.tv +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> canconst = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code"> !isa(tv, TypeVar) && return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> body = UnionAll(tv, body) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = canconst ? AbstractEvalConstant(body) : Type{body} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === return_type +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> rt_rt = return_type_tfunc(argtypes, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code"> if rt_rt !== NOT_FOUND +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> return rt_rt +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 2 && istopfunction(f, :!) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> # handle Conditional propagation through !Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> aty = argtypes[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(aty, Conditional) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_call_gf_by_type(f, Any[Const(f), Bool], Tuple{typeof(f), Bool}, sv) # make sure we've inferred `!(::Bool)` +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(aty.var, aty.elsetype, aty.vtype) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 3 && istopfunction(f, :!==) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> # mark !== as exactly a negated call to === +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code"> rty = abstract_call((===), fargs, argtypes, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(rty, Conditional) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"> return Conditional(rty.var, rty.elsetype, rty.vtype) # swap if-else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(rty, Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(rty.val === false) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> return rty +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 3 && istopfunction(f, :(>:)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> # mark issupertype as a exact alias for issubtype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> # swap T1 and T2 arguments and call <: +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(fargs) == 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> fargs = Any[<:, fargs[3], fargs[2]] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> fargs = () +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> argtypes = Any[typeof(<:), argtypes[3], argtypes[2]] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> rty = abstract_call(<:, fargs, argtypes, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> return rty +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 2 && isa(argtypes[2], Const) && isa(argtypes[2].val, SimpleVector) && istopfunction(f, :length) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> # mark length(::SimpleVector) as @pure +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(length(argtypes[2].val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 3 && isa(argtypes[2], Const) && isa(argtypes[3], Const) && +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(argtypes[2].val, SimpleVector) && isa(argtypes[3].val, Int) && istopfunction(f, :getindex) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> # mark getindex(::SimpleVector, i::Int) as @pure +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code"> svecval = argtypes[2].val::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> idx = argtypes[3].val::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code"> if 1 <= idx <= length(svecval) && isassigned(svecval, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(getindex(svecval, idx)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(argtypes) == 2 && istopfunction(f, :typename) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> return typename_static(argtypes[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> atype = argtypes_to_type(argtypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code"> t = pure_eval_call(f, argtypes, atype, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> t !== false && return t +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code"> if istopfunction(f, :typejoin) || f === return_type +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> return Type # don't try to infer these function edges directly -- it won't actually come up with anything useful +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code"> if sv.params.inlining +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> # need to model the special inliner for ^ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> # to ensure we have added the same edge +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(Main, :Base) && +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> ((isdefined(Main.Base, :^) && f === Main.Base.:^) || +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code"> (isdefined(Main.Base, :.^) && f === Main.Base.:.^)) && +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> length(argtypes) == 3 && (argtypes[3] ⊑ Int32 || argtypes[3] ⊑ Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> a1 = argtypes[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code"> basenumtype = Union{CoreNumType, Main.Base.ComplexF32, Main.Base.ComplexF64, Main.Base.Rational} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> if a1 ⊑ basenumtype +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"> ftimes = Main.Base.:* +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"> ta1 = widenconst(a1) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_call_gf_by_type(ftimes, Any[ftimes, a1, a1], Tuple{typeof(ftimes), ta1, ta1}, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-829"></a>829</td> + <td></td> + <td>4 (10.81%)</td> + <td> + <div class="callees"> + 2 (50.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call_gf_by_type-19">abstract_call_gf_by_type</a><br /> + </div> + <span class="code"> return abstract_call_gf_by_type(f, argtypes, atype, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"># wrapper around `abstract_call` for first computing if `f` is available +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_call(fargs::Union{Tuple{},Vector{Any}}, argtypes::Vector{Any}, vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval_call-834"></a> + 2 (5.41%) samples spent in abstract_eval_call<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + abstract_eval + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-943">line 943</a><br /> + </div> + <span class="code"> #print("call ", e.args[1], argtypes, "\n\n") +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in argtypes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> x === Bottom && return Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> ft = argtypes[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(ft, Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> f = ft.val +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isconstType(ft) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> f = ft.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(ft, DataType) && isdefined(ft, :instance) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> f = ft.instance +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:(length(argtypes) - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(argtypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code"> # non-constant function, but the number of arguments is known +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code"> # and the ft is not a Builtin or IntrinsicFunction +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code"> if typeintersect(widenconst(ft), Builtin) != Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> return abstract_call_gf_by_type(nothing, argtypes, argtypes_to_type(argtypes), sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-858"></a>858</td> + <td></td> + <td>4 (10.81%)</td> + <td> + <div class="callees"> + 2 (50.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_call-583">abstract_call</a><br /> + </div> + <span class="code"> return abstract_call(f, fargs, argtypes, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code">function sp_type_rewrap(@nospecialize(T), linfo::MethodInstance, isreturn::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> isref = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> if T === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> return Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(T, Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(T, DataType) && (T::DataType).name === _REF_NAME +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code"> isref = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code"> T = T.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> if isreturn && T === Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code"> return Bottom # a return type of Ref{Any} is invalid +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(linfo.def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> spsig = linfo.def.sig +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(spsig, UnionAll) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(linfo.sparam_vals) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> env = pointer_from_objref(linfo.sparam_vals) + sizeof(Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> T = ccall(:jl_instantiate_type_in_env, Any, (Any, Any, Ptr{Any}), T, spsig, env) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> isref && isreturn && T === Any && return Bottom # catch invalid return Ref{T} where T = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> for v in linfo.sparam_vals +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(v, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> T = UnionAll(v, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> T = rewrap_unionall(T, spsig) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code"> while isa(T, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> T = T.ub +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> return T +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_cfunction(e::Expr, vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code"> f = abstract_eval(e.args[2], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> # rt = sp_type_rewrap(e.args[3], sv.linfo, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code"> at = Any[ sp_type_rewrap(argt, sv.linfo, false) for argt in e.args[4]::SimpleVector ] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code"> pushfirst!(at, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code"> # this may be the wrong world for the call, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> # but some of the result is likely to be valid anyways +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> # and that may help generate better codegen +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_eval_call((), at, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code"># convert an inferred static parameter value to the inferred type of a static_parameter expression +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code">function sparam_type(@nospecialize(val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> if Any <: val.ub +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code"> # static param bound to typevar +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> # if the tvar is not known to refer to anything more specific than Any, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code"> # the static param might actually be an integer, symbol, etc. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code"> return UnionAll(val, Type{val}) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> return AbstractEvalConstant(val) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval-926"></a> + 2 (5.41%) samples spent in abstract_eval<br /> + 0 (ex.), + 1 (50.00%) (incl.) + when called from + abstract_eval + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-942">line 942</a><br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + typeinf_local + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-1169">line 1169</a><br /> + </div> + <span class="code">function abstract_eval(@nospecialize(e), vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(e, QuoteNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> return AbstractEvalConstant((e::QuoteNode).value) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(e, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> return abstract_eval_ssavalue(e::SSAValue, sv.src) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(e, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> return vtypes[slot_id(e)].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(e, GlobalRef) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-934"></a>934</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval_global-1024">abstract_eval_global</a><br /> + </div> + <span class="code"> return abstract_eval_global(e.mod, e.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(e, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> return AbstractEvalConstant(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code"> e = e::Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> if e.head === :call +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-942"></a>942</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval-926">abstract_eval</a><br /> + </div> + <span class="code"> argtypes = Any[ abstract_eval(a, vtypes, sv) for a in e.args ] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-943"></a>943</td> + <td></td> + <td>4 (10.81%)</td> + <td> + <div class="callees"> + 2 (50.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval_call-834">abstract_eval_call</a><br /> + </div> + <span class="code"> t = abstract_eval_call(e.args, argtypes, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :new +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code"> t = instanceof_tfunc(abstract_eval(e.args[1], vtypes, sv))[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:length(e.args) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> if abstract_eval(e.args[i], vtypes, sv) === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :& +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_eval(e.args[1], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :foreigncall +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_eval(e.args[1], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> t = sp_type_rewrap(e.args[2], sv.linfo, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 3:length(e.args) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code"> if abstract_eval(e.args[i], vtypes, sv) === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :cfunction +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code"> t = e.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(t, Type) || (t = Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code"> abstract_eval_cfunction(e, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :static_parameter +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> n = e.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code"> if 1 <= n <= length(sv.sp) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code"> t = sparam_type(sv.sp[n]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code"> t = (length(e.args) == 1) ? Any : Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :copyast +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> t = abstract_eval(e.args[1], vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> if t isa Const && t.val isa Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code"> # `copyast` makes copies of Exprs +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :invoke +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> error("type inference data-flow error: tried to double infer a function") +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :boundscheck +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> return Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e.head === :isdefined +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> sym = e.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(sym, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code"> vtyp = vtypes[slot_id(sym)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code"> if vtyp.typ === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(false) # never assigned previously +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !vtyp.undef +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(true) # definitely assigned previously +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(sym, Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(sv.mod, sym.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(sym, GlobalRef) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(sym.mod, sym.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(sym, Expr) && sym.head === :static_parameter +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> n = sym.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> if 1 <= n <= length(sv.sp) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code"> val = sv.sp[n] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(val, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !isa(t, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(t, DataType) && isdefined(t, :instance) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code"> # replace singleton types with their equivalent Const object +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Const(t.instance) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code"> return t +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_global(M::Module, s::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(M,s) && isconst(M,s) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1024"></a>1024</td> + <td>1 (2.70%)</td> + <td>1 (2.70%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval_global-1024"></a> + 1 (2.70%) samples spent in abstract_eval_global<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + abstract_eval + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-934">line 934</a><br /> + </div> + <span class="code"> return AbstractEvalConstant(getfield(M,s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1027"></a>1027</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_ssavalue(s::SSAValue, src::CodeInfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code"> typ = src.ssavaluetypes[s.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code"> if typ === NOT_FOUND +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code"> return Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code"> return typ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code"># determine whether `ex` abstractly evals to constant `c` +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_evals_to_constant(@nospecialize(ex), @nospecialize(c), vtypes::VarTable, sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code"> av = abstract_eval(ex, vtypes, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(av, Const) && av.val === c +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code"># make as much progress on `frame` as possible (without handling cycles) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1044"></a>1044</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-typeinf_local-1044"></a> + 2 (5.41%) samples spent in typeinf_local<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + typeinf_nocycle + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-1225">line 1225</a><br /> + </div> + <span class="code">function typeinf_local(frame::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1045"></a>1045</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !frame.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1046"></a>1046</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.dont_work_on_me = true # mark that this function is currently on the stack +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1047"></a>1047</td> + <td></td> + <td></td> + <td> + <span class="code"> W = frame.ip +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1048"></a>1048</td> + <td></td> + <td></td> + <td> + <span class="code"> s = frame.stmt_types +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1049"></a>1049</td> + <td></td> + <td></td> + <td> + <span class="code"> n = frame.nstmts +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1050"></a>1050</td> + <td></td> + <td></td> + <td> + <span class="code"> while frame.pc´´ <= n +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1051"></a>1051</td> + <td></td> + <td></td> + <td> + <span class="code"> # make progress on the active ip set +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1052"></a>1052</td> + <td></td> + <td></td> + <td> + <span class="code"> local pc::Int = frame.pc´´ # current program-counter +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1053"></a>1053</td> + <td></td> + <td></td> + <td> + <span class="code"> while true # inner loop optimizes the common case where it can run straight from pc to pc + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1054"></a>1054</td> + <td></td> + <td></td> + <td> + <span class="code"> #print(pc,": ",s[pc],"\n") +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1055"></a>1055</td> + <td></td> + <td></td> + <td> + <span class="code"> local pc´::Int = pc + 1 # next program-counter (after executing instruction) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1056"></a>1056</td> + <td></td> + <td></td> + <td> + <span class="code"> if pc == frame.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1057"></a>1057</td> + <td></td> + <td></td> + <td> + <span class="code"> # need to update pc´´ to point at the new lowest instruction in W +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1058"></a>1058</td> + <td></td> + <td></td> + <td> + <span class="code"> min_pc = _bits_findnext(W.bits, pc + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1059"></a>1059</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.pc´´ = min_pc == -1 ? n + 1 : min_pc +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1060"></a>1060</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1061"></a>1061</td> + <td></td> + <td></td> + <td> + <span class="code"> delete!(W, pc) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1062"></a>1062</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.currpc = pc +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1063"></a>1063</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.cur_hand = frame.handler_at[pc] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1064"></a>1064</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.stmt_edges[pc] === () || empty!(frame.stmt_edges[pc]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1065"></a>1065</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = frame.src.code[pc] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1066"></a>1066</td> + <td></td> + <td></td> + <td> + <span class="code"> changes = s[pc]::VarTable +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1067"></a>1067</td> + <td></td> + <td></td> + <td> + <span class="code"> t = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1068"></a>1068</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1069"></a>1069</td> + <td></td> + <td></td> + <td> + <span class="code"> hd = isa(stmt, Expr) ? stmt.head : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1070"></a>1070</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1071"></a>1071</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, NewvarNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1072"></a>1072</td> + <td></td> + <td></td> + <td> + <span class="code"> sn = slot_id(stmt.slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1073"></a>1073</td> + <td></td> + <td></td> + <td> + <span class="code"> changes[sn] = VarState(Bottom, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1074"></a>1074</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, GotoNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1075"></a>1075</td> + <td></td> + <td></td> + <td> + <span class="code"> pc´ = (stmt::GotoNode).label +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1076"></a>1076</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1077"></a>1077</td> + <td></td> + <td></td> + <td> + <span class="code"> condt = abstract_eval(stmt.args[1], s[pc], frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1078"></a>1078</td> + <td></td> + <td></td> + <td> + <span class="code"> if condt === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1079"></a>1079</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1080"></a>1080</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1081"></a>1081</td> + <td></td> + <td></td> + <td> + <span class="code"> condval = maybe_extract_const_bool(condt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1082"></a>1082</td> + <td></td> + <td></td> + <td> + <span class="code"> l = stmt.args[2]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1083"></a>1083</td> + <td></td> + <td></td> + <td> + <span class="code"> # constant conditions +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1084"></a>1084</td> + <td></td> + <td></td> + <td> + <span class="code"> if condval === true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1085"></a>1085</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif condval === false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1086"></a>1086</td> + <td></td> + <td></td> + <td> + <span class="code"> pc´ = l +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1087"></a>1087</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1088"></a>1088</td> + <td></td> + <td></td> + <td> + <span class="code"> # general case +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1089"></a>1089</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.handler_at[l] = frame.cur_hand +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1090"></a>1090</td> + <td></td> + <td></td> + <td> + <span class="code"> changes_else = changes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1091"></a>1091</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(condt, Conditional) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1092"></a>1092</td> + <td></td> + <td></td> + <td> + <span class="code"> if condt.elsetype !== Any && condt.elsetype !== changes[slot_id(condt.var)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1093"></a>1093</td> + <td></td> + <td></td> + <td> + <span class="code"> changes_else = StateUpdate(condt.var, VarState(condt.elsetype, false), changes_else) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1094"></a>1094</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1095"></a>1095</td> + <td></td> + <td></td> + <td> + <span class="code"> if condt.vtype !== Any && condt.vtype !== changes[slot_id(condt.var)] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1096"></a>1096</td> + <td></td> + <td></td> + <td> + <span class="code"> changes = StateUpdate(condt.var, VarState(condt.vtype, false), changes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1097"></a>1097</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1098"></a>1098</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1099"></a>1099</td> + <td></td> + <td></td> + <td> + <span class="code"> newstate_else = stupdate!(s[l], changes_else) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1100"></a>1100</td> + <td></td> + <td></td> + <td> + <span class="code"> if newstate_else !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1101"></a>1101</td> + <td></td> + <td></td> + <td> + <span class="code"> # add else branch to active IP list +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1102"></a>1102</td> + <td></td> + <td></td> + <td> + <span class="code"> if l < frame.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1103"></a>1103</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.pc´´ = l +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1104"></a>1104</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1105"></a>1105</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(W, l) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1106"></a>1106</td> + <td></td> + <td></td> + <td> + <span class="code"> s[l] = newstate_else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1107"></a>1107</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1108"></a>1108</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1109"></a>1109</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :return +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1110"></a>1110</td> + <td></td> + <td></td> + <td> + <span class="code"> pc´ = n + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1111"></a>1111</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = maybe_widen_conditional(abstract_eval(stmt.args[1], s[pc], frame)) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1112"></a>1112</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(rt, Const) && !isa(rt, Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1113"></a>1113</td> + <td></td> + <td></td> + <td> + <span class="code"> # only propagate information we know we can store +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1114"></a>1114</td> + <td></td> + <td></td> + <td> + <span class="code"> # and is valid inter-procedurally +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1115"></a>1115</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = widenconst(rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1116"></a>1116</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1117"></a>1117</td> + <td></td> + <td></td> + <td> + <span class="code"> if tchanged(rt, frame.bestguess) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1118"></a>1118</td> + <td></td> + <td></td> + <td> + <span class="code"> # new (wider) return type for frame +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1119"></a>1119</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.bestguess = tmerge(frame.bestguess, rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1120"></a>1120</td> + <td></td> + <td></td> + <td> + <span class="code"> for (caller, caller_pc) in frame.cycle_backedges +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1121"></a>1121</td> + <td></td> + <td></td> + <td> + <span class="code"> # notify backedges of updated type information +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1122"></a>1122</td> + <td></td> + <td></td> + <td> + <span class="code"> typeassert(caller.stmt_types[caller_pc], VarTable) # we must have visited this statement before +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1123"></a>1123</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(caller.src.ssavaluetypes[caller_pc] === Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1124"></a>1124</td> + <td></td> + <td></td> + <td> + <span class="code"> # no reason to revisit if that call-site doesn't affect the final result +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1125"></a>1125</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller_pc < caller.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1126"></a>1126</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.pc´´ = caller_pc +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1127"></a>1127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1128"></a>1128</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(caller.ip, caller_pc) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1129"></a>1129</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1130"></a>1130</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1131"></a>1131</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1132"></a>1132</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1133"></a>1133</td> + <td></td> + <td></td> + <td> + <span class="code"> l = stmt.args[1]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1134"></a>1134</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.cur_hand = (l, frame.cur_hand) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1135"></a>1135</td> + <td></td> + <td></td> + <td> + <span class="code"> # propagate type info to exception handler +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1136"></a>1136</td> + <td></td> + <td></td> + <td> + <span class="code"> l = frame.cur_hand[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1137"></a>1137</td> + <td></td> + <td></td> + <td> + <span class="code"> old = s[l] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1138"></a>1138</td> + <td></td> + <td></td> + <td> + <span class="code"> new = s[pc]::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1139"></a>1139</td> + <td></td> + <td></td> + <td> + <span class="code"> newstate_catch = stupdate!(old, new) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1140"></a>1140</td> + <td></td> + <td></td> + <td> + <span class="code"> if newstate_catch !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1141"></a>1141</td> + <td></td> + <td></td> + <td> + <span class="code"> if l < frame.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1142"></a>1142</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.pc´´ = l +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1143"></a>1143</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1144"></a>1144</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(W, l) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1145"></a>1145</td> + <td></td> + <td></td> + <td> + <span class="code"> s[l] = newstate_catch +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1146"></a>1146</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1147"></a>1147</td> + <td></td> + <td></td> + <td> + <span class="code"> typeassert(s[l], VarTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1148"></a>1148</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.handler_at[l] = frame.cur_hand +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1149"></a>1149</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :leave +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1150"></a>1150</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:((stmt.args[1])::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1151"></a>1151</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.cur_hand = frame.cur_hand[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1152"></a>1152</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1153"></a>1153</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1154"></a>1154</td> + <td></td> + <td></td> + <td> + <span class="code"> if hd === :(=) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1155"></a>1155</td> + <td></td> + <td></td> + <td> + <span class="code"> t = abstract_eval(stmt.args[2], changes, frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1156"></a>1156</td> + <td></td> + <td></td> + <td> + <span class="code"> t === Bottom && break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1157"></a>1157</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.src.ssavaluetypes[pc] = t +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1158"></a>1158</td> + <td></td> + <td></td> + <td> + <span class="code"> lhs = stmt.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1159"></a>1159</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(lhs, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1160"></a>1160</td> + <td></td> + <td></td> + <td> + <span class="code"> changes = StateUpdate(lhs, VarState(t, false), changes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1161"></a>1161</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1162"></a>1162</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :method +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1163"></a>1163</td> + <td></td> + <td></td> + <td> + <span class="code"> fname = stmt.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1164"></a>1164</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(fname, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1165"></a>1165</td> + <td></td> + <td></td> + <td> + <span class="code"> changes = StateUpdate(fname, VarState(Any, false), changes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1166"></a>1166</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1167"></a>1167</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif hd === :inbounds || hd === :meta || hd === :simdloop +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1168"></a>1168</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1169"></a>1169</td> + <td></td> + <td>5 (13.51%)</td> + <td> + <div class="callees"> + 2 (40.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-abstract_eval-926">abstract_eval</a><br /> + </div> + <span class="code"> t = abstract_eval(stmt, changes, frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1170"></a>1170</td> + <td></td> + <td></td> + <td> + <span class="code"> t === Bottom && break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1171"></a>1171</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(frame.ssavalue_uses[pc]) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1172"></a>1172</td> + <td></td> + <td></td> + <td> + <span class="code"> record_ssa_assign(pc, t, frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1173"></a>1173</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1174"></a>1174</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.src.ssavaluetypes[pc] = t +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1175"></a>1175</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1176"></a>1176</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1177"></a>1177</td> + <td></td> + <td></td> + <td> + <span class="code"> if frame.cur_hand !== () && isa(changes, StateUpdate) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1178"></a>1178</td> + <td></td> + <td></td> + <td> + <span class="code"> # propagate new type info to exception handler +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1179"></a>1179</td> + <td></td> + <td></td> + <td> + <span class="code"> # the handling for Expr(:enter) propagates all changes from before the try/catch +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1180"></a>1180</td> + <td></td> + <td></td> + <td> + <span class="code"> # so this only needs to propagate any changes +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1181"></a>1181</td> + <td></td> + <td></td> + <td> + <span class="code"> l = frame.cur_hand[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1182"></a>1182</td> + <td></td> + <td></td> + <td> + <span class="code"> if stupdate1!(s[l]::VarTable, changes::StateUpdate) !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1183"></a>1183</td> + <td></td> + <td></td> + <td> + <span class="code"> if l < frame.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1184"></a>1184</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.pc´´ = l +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1185"></a>1185</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1186"></a>1186</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(W, l) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1187"></a>1187</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1188"></a>1188</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1189"></a>1189</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1190"></a>1190</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1191"></a>1191</td> + <td></td> + <td></td> + <td> + <span class="code"> if t === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1192"></a>1192</td> + <td></td> + <td></td> + <td> + <span class="code"> # mark other reached expressions as `Any` to indicate they don't throw +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1193"></a>1193</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.src.ssavaluetypes[pc] = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1194"></a>1194</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1195"></a>1195</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1196"></a>1196</td> + <td></td> + <td></td> + <td> + <span class="code"> pc´ > n && break # can't proceed with the fast-path fall-through +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1197"></a>1197</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.handler_at[pc´] = frame.cur_hand +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1198"></a>1198</td> + <td></td> + <td></td> + <td> + <span class="code"> newstate = stupdate!(s[pc´], changes) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1199"></a>1199</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, GotoNode) && frame.pc´´ < pc´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1200"></a>1200</td> + <td></td> + <td></td> + <td> + <span class="code"> # if we are processing a goto node anyways, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1201"></a>1201</td> + <td></td> + <td></td> + <td> + <span class="code"> # (such as a terminator for a loop, if-else, or try block), +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1202"></a>1202</td> + <td></td> + <td></td> + <td> + <span class="code"> # consider whether we should jump to an older backedge first, +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1203"></a>1203</td> + <td></td> + <td></td> + <td> + <span class="code"> # to try to traverse the statements in approximate dominator order +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1204"></a>1204</td> + <td></td> + <td></td> + <td> + <span class="code"> if newstate !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1205"></a>1205</td> + <td></td> + <td></td> + <td> + <span class="code"> s[pc´] = newstate +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1206"></a>1206</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1207"></a>1207</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(W, pc´) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1208"></a>1208</td> + <td></td> + <td></td> + <td> + <span class="code"> pc = frame.pc´´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1209"></a>1209</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif newstate !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1210"></a>1210</td> + <td></td> + <td></td> + <td> + <span class="code"> s[pc´] = newstate +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1211"></a>1211</td> + <td></td> + <td></td> + <td> + <span class="code"> pc = pc´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1212"></a>1212</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pc´ in W +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1213"></a>1213</td> + <td></td> + <td></td> + <td> + <span class="code"> pc = pc´ +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1214"></a>1214</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1215"></a>1215</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1216"></a>1216</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1217"></a>1217</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1218"></a>1218</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1219"></a>1219</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.dont_work_on_me = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1220"></a>1220</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1221"></a>1221</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1222"></a>1222</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1223"></a>1223</td> + <td></td> + <td></td> + <td> + <span class="code"># make as much progress on `frame` as possible (by handling cycles) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1224"></a>1224</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-typeinf_nocycle-1224"></a> + 2 (5.41%) samples spent in typeinf_nocycle<br /> + 0 (ex.), + 2 (100.00%) (incl.) + when called from + typeinf + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#Ltypeinfer-jl-14b2448d998dfdb61460-line.html-15">line 15</a><br /> + </div> + <span class="code">function typeinf_nocycle(frame::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1225"></a>1225</td> + <td></td> + <td>5 (13.51%)</td> + <td> + <div class="callees"> + 2 (40.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-typeinf_local-1044">typeinf_local</a><br /> + </div> + <span class="code"> typeinf_local(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1226"></a>1226</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1227"></a>1227</td> + <td></td> + <td></td> + <td> + <span class="code"> # If the current frame is part of a cycle, solve the cycle before finishing +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1228"></a>1228</td> + <td></td> + <td></td> + <td> + <span class="code"> no_active_ips_in_callers = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1229"></a>1229</td> + <td></td> + <td></td> + <td> + <span class="code"> while !no_active_ips_in_callers +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1230"></a>1230</td> + <td></td> + <td></td> + <td> + <span class="code"> no_active_ips_in_callers = true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1231"></a>1231</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frame.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1232"></a>1232</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.dont_work_on_me && return false # cycle is above us on the stack +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1233"></a>1233</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.pc´´ <= caller.nstmts # equivalent to `isempty(caller.ip)` +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1234"></a>1234</td> + <td></td> + <td></td> + <td> + <span class="code"> # Note that `typeinf_local(caller)` can potentially modify the other frames +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1235"></a>1235</td> + <td></td> + <td></td> + <td> + <span class="code"> # `frame.callers_in_cycle`, which is why making incremental progress requires the +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1236"></a>1236</td> + <td></td> + <td></td> + <td> + <span class="code"> # outer while loop. +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1237"></a>1237</td> + <td></td> + <td></td> + <td> + <span class="code"> typeinf_local(caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1238"></a>1238</td> + <td></td> + <td></td> + <td> + <span class="code"> no_active_ips_in_callers = false +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1239"></a>1239</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1240"></a>1240</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.min_valid < frame.min_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1241"></a>1241</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.min_valid = frame.min_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1242"></a>1242</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1243"></a>1243</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.max_valid > frame.max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1244"></a>1244</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.max_valid = frame.max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1245"></a>1245</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1246"></a>1246</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1247"></a>1247</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1248"></a>1248</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Labstractinterpretation-jl-35ae29f448859d864444-line.html-1249"></a>1249</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/all_stacks_by_time.calls b/profiling/statprof/all_stacks_by_time.calls new file mode 100644 index 0000000000000000000000000000000000000000..5f0ceeebdcc24b324f038a03ae8ea0360ca7014e --- /dev/null +++ b/profiling/statprof/all_stacks_by_time.calls @@ -0,0 +1,26 @@ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:803;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:53 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:165;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:write:163;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:unsafe_write:401;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:ensureroom:293 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111 5 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:427 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;nothing:Type;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:#IOBuffer#302:111 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;nothing:Type;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:#IOBuffer#302:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:StringVector:31;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_string_n:60 5 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:dividemodulointbignum!:420 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:resize!:1011;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:_deleteend!:823 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:Type:39 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:tostr_sizehint:106;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:lastindex:110 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:div 2 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:binexp_cache:253;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:53 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>>:603;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:448;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:442 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:166;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:write:163;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:unsafe_write:401 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalizedbound:120;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalize:48;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:==:432;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl:==:425 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_thisind_str:113 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;nothing:Type;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:#IOBuffer#302:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:StringVector:71 6 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:*:54 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./coreio.jl:print:2;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:print:165;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:unsafe_write:828;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:uv_write:773;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./event.jl:wait:243;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl:process_events:98 3 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:compare:474 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl:unsafe_write:509;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:unsafe_write:401;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>:286;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:49 1 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317;/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64;/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:roundweed:34 1 diff --git a/profiling/statprof/array-jl-e331915c4fb281d94775-line.html b/profiling/statprof/array-jl-e331915c4fb281d94775-line.html new file mode 100644 index 0000000000000000000000000000000000000000..781c135f750d2288ef649e6ab0c295b03a8c99ab --- /dev/null +++ b/profiling/statprof/array-jl-e331915c4fb281d94775-line.html @@ -0,0 +1,24072 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## array.jl: Dense arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> DimensionMismatch([msg]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">The objects called do not have matching dimensionality. Optional argument `msg` is a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">descriptive error string. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">struct DimensionMismatch <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">DimensionMismatch() = DimensionMismatch("") +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">## Type aliases for convenience ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractVector{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">Supertype for one-dimensional arrays (or array-like types) with +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">elements of type `T`. Alias for [`AbstractArray{T,1}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">const AbstractVector{T} = AbstractArray{T,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractMatrix{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">Supertype for two-dimensional arrays (or array-like types) with +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">elements of type `T`. Alias for [`AbstractArray{T,2}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">const AbstractMatrix{T} = AbstractArray{T,2} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractVecOrMat{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">Union type of [`AbstractVector{T}`](@ref) and [`AbstractMatrix{T}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">const AbstractVecOrMat{T} = Union{AbstractVector{T}, AbstractMatrix{T}} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">const RangeIndex = Union{Int, AbstractRange{Int}, AbstractUnitRange{Int}} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">const DimOrInd = Union{Integer, AbstractUnitRange} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">const IntOrInd = Union{Int, AbstractUnitRange} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">const DimsOrInds{N} = NTuple{N,DimOrInd} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">const NeedsShaping = Union{Tuple{Integer,Vararg{Integer}}, Tuple{OneTo,Vararg{OneTo}}} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> Array{T,N} <: AbstractArray{T,N} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">`N`-dimensional dense array with elements of type `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">Array +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> Vector{T} <: AbstractVector{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">One-dimensional dense array with elements of type `T`, often used to represent +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">a mathematical vector. Alias for [`Array{T,1}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">const Vector{T} = Array{T,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> Matrix{T} <: AbstractMatrix{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">Two-dimensional dense array with elements of type `T`, often used to represent +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">a mathematical matrix. Alias for [`Array{T,2}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">const Matrix{T} = Array{T,2} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> VecOrMat{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">Union type of [`Vector{T}`](@ref) and [`Matrix{T}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">const VecOrMat{T} = Union{Vector{T}, Matrix{T}} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> DenseArray{T, N} <: AbstractArray{T,N} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">`N`-dimensional dense array with elements of type `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">The elements of a dense array are stored contiguously in memory. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">DenseArray +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> DenseVector{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">One-dimensional [`DenseArray`](@ref) with elements of type `T`. Alias for `DenseArray{T,1}`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">const DenseVector{T} = DenseArray{T,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> DenseMatrix{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">Two-dimensional [`DenseArray`](@ref) with elements of type `T`. Alias for `DenseArray{T,2}`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">const DenseMatrix{T} = DenseArray{T,2} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> DenseVecOrMat{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">Union type of [`DenseVector{T}`](@ref) and [`DenseMatrix{T}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">const DenseVecOrMat{T} = Union{DenseVector{T}, DenseMatrix{T}} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">## Basic functions ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> eltype(type) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the type of the elements generated by iterating a collection of the given `type`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">For dictionary types, this will be a `Pair{KeyType,ValType}`. The definition +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code">`eltype(x) = eltype(typeof(x))` is provided for convenience so that instances can be passed +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">instead of types. However the form that accepts a type argument should be defined for new +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code">types. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">julia> eltype(fill(1f0, (2,2))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">Float32 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code">julia> eltype(fill(0x1, (2,2))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">eltype(::Type) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">eltype(::Type{Bottom}) = throw(ArgumentError("Union{} does not have elements")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">eltype(x) = eltype(typeof(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">import Core: arraysize, arrayset, arrayref +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">vect() = Vector{Any}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">vect(X::T...) where {T} = T[ X[i] for i = 1:length(X) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> vect(X...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">Create a [`Vector`](@ref) with element type computed from the `promote_typeof` of the argument, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">containing the argument list. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = Base.vect(UInt8(1), 2.5, 1//2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Float64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> 2.5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> 0.5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">function vect(X...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> T = promote_typeof(X...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> #T[ X[i] for i=1:length(X) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: this is currently much faster. should figure out why. not clear. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> return copyto!(Vector{T}(undef, length(X)), X) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">size(a::Array, d) = arraysize(a, d) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">size(a::Vector) = (arraysize(a,1),) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">size(a::Matrix) = (arraysize(a,1), arraysize(a,2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">size(a::Array{<:Any,N}) where {N} = (@_inline_meta; ntuple(M -> size(a, M), Val(N))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code">asize_from(a::Array, n) = n > ndims(a) ? () : (arraysize(a,n), asize_from(a, n+1)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.isbitsunion(::Type{T}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">Return whether a type is an "is-bits" Union type, meaning each type included in a Union is [`isbitstype`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isbitsunion(Union{Float64, UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isbitsunion(Union{Float64, String}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">isbitsunion(u::Union) = ccall(:jl_array_store_unboxed, Cint, (Any,), u) != Cint(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">isbitsunion(x) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.bitsunionsize(U::Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">For a `Union` of [`isbitstype`](@ref) types, return the size of the largest type; assumes `Base.isbitsunion(U) == true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.bitsunionsize(Union{Float64, UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">0x0000000000000008 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.bitsunionsize(Union{Float64, UInt8, Int128}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code">0x0000000000000010 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">function bitsunionsize(u::Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> sz = Ref{Csize_t}(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> algn = Ref{Csize_t}(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert ccall(:jl_islayout_inline, Cint, (Any, Ptr{Csize_t}, Ptr{Csize_t}), u, sz, algn) != Cint(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> return sz[] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">length(a::Array) = arraylen(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">elsize(::Type{<:Array{T}}) where {T} = isbitstype(T) ? sizeof(T) : (isbitsunion(T) ? bitsunionsize(T) : sizeof(Ptr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">sizeof(a::Array) = Core.sizeof(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">function isassigned(a::Array, i::Int...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> ii = (_sub2ind(size(a), i...) % UInt) - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck ii < length(a) % UInt || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_isassigned, Cint, (Any, UInt), a, ii) == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">## copy ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(dest::Ptr{T}, src::Ptr{T}, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code">Copy `N` elements from a source pointer to a destination, with no checking. The size of an +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code">element is determined by the type of the pointers. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code">The `unsafe` prefix on this function indicates that no validation is performed on the +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">pointers `dest` and `src` to ensure that they are valid. Incorrect usage may corrupt or +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code">segfault your program, in the same manner as C. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_copyto!(dest::Ptr{T}, src::Ptr{T}, n) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> # Do not use this to copy data between pointer arrays. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> # It can't be made safe no matter how carefully you checked. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memmove, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> dest, src, n*sizeof(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(dest::Array, do, src::Array, so, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">Copy `N` elements from a source array to a destination, starting at offset `so` in the +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">source and `do` in the destination (1-indexed). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">The `unsafe` prefix on this function indicates that no validation is performed to ensure +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code">that N is inbounds on either array. Incorrect usage may corrupt or segfault your program, in +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">the same manner as C. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_copyto!(dest::Array{T}, doffs, src::Array{T}, soffs, n) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> t1 = @_gc_preserve_begin dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> t2 = @_gc_preserve_begin src +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(pointer(dest, doffs), pointer(src, soffs), n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isbitsunion(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memmove, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> pointer(dest, doffs), pointer(src, soffs), n * Base.bitsunionsize(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> # copy selector bytes +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memmove, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_typetagdata, Ptr{UInt8}, (Any,), dest) + doffs - 1, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_typetagdata, Ptr{UInt8}, (Any,), src) + soffs - 1, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_ptr_copy, Cvoid, (Any, Ptr{Cvoid}, Any, Ptr{Cvoid}, Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> dest, pointer(dest, doffs), src, pointer(src, soffs), n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> @_gc_preserve_end t2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> @_gc_preserve_end t1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(dest, do, src, so, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">Copy `N` elements from collection `src` starting at offset `so`, to array `dest` starting at +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code">offset `do`. Return `dest`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code">function copyto!(dest::Array{T}, doffs::Integer, src::Array{T}, soffs::Integer, n::Integer) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> n == 0 && return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> n > 0 || throw(ArgumentError(string("tried to copy n=", n, " elements, but n should be nonnegative"))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> if soffs < 1 || doffs < 1 || soffs+n-1 > length(src) || doffs+n-1 > length(dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(dest, doffs, src, soffs, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">copyto!(dest::Array{T}, src::Array{T}) where {T} = copyto!(dest, 1, src, 1, length(src)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"># N.B: The generic definition in multidimensional.jl covers, this, this is just here +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"># for bootstrapping purposes. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code">function fill!(dest::Array{T}, x) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> @_noinline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> xT = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds dest[i] = xT +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> copy(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">Create a shallow copy of `x`: the outer structure is copied, but not all internal values. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">For example, copying an array produces a new array with identically-same elements as the +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">original. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">copy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">copy(a::T) where {T<:Array} = ccall(:jl_array_copy, Ref{T}, (Any,), a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"># reshaping to same # of dimensions +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">function reshape(a::Array{T,N}, dims::NTuple{N,Int}) where T where N +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> if prod(dims) != length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> _throw_dmrsa(dims, length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> if dims == size(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_reshape_array, Array{T,N}, (Any, Any, Any), Array{T,N}, a, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"># reshaping to different # of dimensions +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">function reshape(a::Array{T}, dims::NTuple{N,Int}) where T where N +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> if prod(dims) != length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> _throw_dmrsa(dims, length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_reshape_array, Array{T,N}, (Any, Any, Any), Array{T,N}, a, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">function _throw_dmrsa(dims, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> @_noinline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(DimensionMismatch("new dimensions $(dims) must be consistent with array size $len")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">## Constructors ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T,1}) where {T} = Vector{T}(undef, size(a,1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T,2}) where {T} = Matrix{T}(undef, size(a,1), size(a,2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T,1}, S::Type) where {T} = Vector{S}(undef, size(a,1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T,2}, S::Type) where {T} = Matrix{S}(undef, size(a,1), size(a,2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T}, m::Int) where {T} = Vector{T}(undef, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array, T::Type, dims::Dims{N}) where {N} = Array{T,N}(undef, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">similar(a::Array{T}, dims::Dims{N}) where {T,N} = Array{T,N}(undef, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"># T[x...] constructs Array{T,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> getindex(type[, elements...]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">Construct a 1-d array of the specified type. This is usually called with the syntax +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">`Type[]`. Element values can be specified using `Type[a,b,c,...]`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Int8[1, 2, 3] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int8,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">julia> getindex(Int8, 1, 2, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int8,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(::Type{T}, vals...) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Vector{T}(undef, length(vals)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i = 1:length(vals) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = vals[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::Type{T}) where {T} = (@_inline_meta; Vector{T}()) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::Type{T}, x) where {T} = (@_inline_meta; a = Vector{T}(undef, 1); @inbounds a[1] = x; a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::Type{T}, x, y) where {T} = (@_inline_meta; a = Vector{T}(undef, 2); @inbounds (a[1] = x; a[2] = y); a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::Type{T}, x, y, z) where {T} = (@_inline_meta; a = Vector{T}(undef, 3); @inbounds (a[1] = x; a[2] = y; a[3] = z); a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(::Type{Any}, @nospecialize vals...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Vector{Any}(undef, length(vals)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i = 1:length(vals) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = vals[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::Type{Any}) = Vector{Any}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">function fill!(a::Union{Array{UInt8}, Array{Int8}}, x::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memset, Ptr{Cvoid}, (Ptr{Cvoid}, Cint, Csize_t), a, x, length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">function fill!(a::Array{T}, x) where T<:Union{Integer,AbstractFloat} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> @_noinline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> xT = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in eachindex(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[i] = xT +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code">to_dim(d::Integer) = d +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">to_dim(d::OneTo) = last(d) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> fill(x, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">Create an array filled with the value `x`. For example, `fill(1.0, (5,5))` returns a 5×5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">array of floats, with each element initialized to `1.0`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fill(1.0, (5,5)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">5×5 Array{Float64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 1.0 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 1.0 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 1.0 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 1.0 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 1.0 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">If `x` is an object reference, all elements will refer to the same object. `fill(Foo(), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">dims)` will return an array filled with the result of evaluating `Foo()` once. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">fill(v, dims::DimOrInd...) = fill(v, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code">fill(v, dims::NTuple{N, Union{Integer, OneTo}}) where {N} = fill(v, map(to_dim, dims)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">fill(v, dims::NTuple{N, Integer}) where {N} = fill!(Array{typeof(v),N}(undef, dims), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">fill(v, dims::Tuple{}) = fill!(Array{typeof(v),0}(undef, dims), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> zeros([T=Float64,] dims...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">Create an `Array`, with element type `T`, of all zeros with size specified by `dims`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`fill`](@ref), [`ones`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code">julia> zeros(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code">1-element Array{Float64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> 0.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">julia> zeros(Int8, 2, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">2×3 Array{Int8,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> 0 0 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> 0 0 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">function zeros end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> ones([T=Float64,] dims...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">Create an `Array`, with element type `T`, of all ones with size specified by `dims`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code">See also: [`fill`](@ref), [`zeros`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ones(1,2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">1×2 Array{Float64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ones(ComplexF64, 2, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">2×3 Array{Complex{Float64},2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0+0.0im 1.0+0.0im 1.0+0.0im +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0+0.0im 1.0+0.0im 1.0+0.0im +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">function ones end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code">for (fname, felt) in ((:zeros, :zero), (:ones, :one)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval begin +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(dims::DimOrInd...) = $fname(dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(::Type{T}, dims::DimOrInd...) where {T} = $fname(T, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(dims::Tuple{Vararg{DimOrInd}}) = $fname(Float64, dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(::Type{T}, dims::NTuple{N, Union{Integer, OneTo}}) where {T,N} = $fname(T, map(to_dim, dims)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(::Type{T}, dims::NTuple{N, Integer}) where {T,N} = fill!(Array{T,N}(undef, map(to_dim, dims)), $felt(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> $fname(::Type{T}, dims::Tuple{}) where {T} = fill!(Array{T}(undef), $felt(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code">function _one(unit::T, x::AbstractMatrix) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> m,n = size(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> m==n || throw(DimensionMismatch("multiplicative identity defined only for square matrices")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> # Matrix{T}(I, m, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> I = zeros(T, m, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:m +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> I[i,i] = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> I +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code">one(x::AbstractMatrix{T}) where {T} = _one(one(T), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code">oneunit(x::AbstractMatrix{T}) where {T} = _one(oneunit(T), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code">## Conversions ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code">convert(::Type{T}, a::AbstractArray) where {T<:Array} = a isa T ? a : T(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(a::Type{Array{T,n}}, b::Type{Array{S,n}}) where {T,n,S} = el_same(promote_type(T,S), a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">## Constructors ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">if nameof(@__MODULE__) === :Base # avoid method overwrite +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"># constructors should make copies +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(x::AbstractArray{S,N}) where {T,N,S} = copyto!(Array{T,N}(undef, size(x)), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code">AbstractArray{T,N}(A::AbstractArray{S,N}) where {T,N,S} = copyto!(similar(A,T), A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code">## copying iterators to containers +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> collect(element_type, collection) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code">Return an `Array` with the given element type of all items in a collection or iterable. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">The result has the same shape and number of dimensions as `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code">julia> collect(Float64, 1:2:5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Float64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> 1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> 3.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> 5.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code">collect(::Type{T}, itr) where {T} = _collect(T, itr, IteratorSize(itr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code">_collect(::Type{T}, itr, isz::HasLength) where {T} = copyto!(Vector{T}(undef, Int(length(itr)::Integer)), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code">_collect(::Type{T}, itr, isz::HasShape) where {T} = copyto!(similar(Array{T}, axes(itr)), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code">function _collect(::Type{T}, itr, isz::SizeUnknown) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Vector{T}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in itr +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(a,x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"># make a collection similar to `c` and appropriate for collecting `itr` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">_similar_for(c::AbstractArray, T, itr, ::SizeUnknown) = similar(c, T, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code">_similar_for(c::AbstractArray, T, itr, ::HasLength) = similar(c, T, Int(length(itr)::Integer)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code">_similar_for(c::AbstractArray, T, itr, ::HasShape) = similar(c, T, axes(itr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code">_similar_for(c, T, itr, isz) = similar(c, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> collect(collection) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code">Return an `Array` of all items in a collection or iterator. For dictionaries, returns +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code">`Pair{KeyType, ValType}`. If the argument is array-like or is an iterator with the +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code">[`HasShape`](@ref IteratorSize) trait, the result will have the same shape +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code">and number of dimensions as the argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code">julia> collect(1:2:13) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code">7-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> 7 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> 9 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> 11 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> 13 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code">collect(itr) = _collect(1:1 #= Array =#, itr, IteratorEltype(itr), IteratorSize(itr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code">collect(A::AbstractArray) = _collect_indices(axes(A), A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code">collect_similar(cont, itr) = _collect(cont, itr, IteratorEltype(itr), IteratorSize(itr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code">_collect(cont, itr, ::HasEltype, isz::Union{HasLength,HasShape}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(_similar_for(cont, eltype(itr), itr, isz), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code">function _collect(cont, itr, ::HasEltype, isz::SizeUnknown) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> a = _similar_for(cont, eltype(itr), itr, isz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in itr +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(a,x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">_collect_indices(::Tuple{}, A) = copyto!(Array{eltype(A),0}(undef), A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code">_collect_indices(indsA::Tuple{Vararg{OneTo}}, A) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(Array{eltype(A)}(undef, length.(indsA)), A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code">function _collect_indices(indsA, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> B = Array{eltype(A)}(undef, length.(indsA)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(B, CartesianIndices(axes(B)), A, CartesianIndices(indsA)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"># define this as a macro so that the call to Core.Compiler +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"># gets inlined into the caller before recursion detection +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"># gets a chance to see it, so that recursive calls to the caller +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"># don't trigger the inference limiter +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code">if isdefined(Core, :Compiler) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> macro default_eltype(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> I = esc(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> return quote +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> if $I isa Generator && ($I).f isa Type +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> ($I).f +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.Compiler.return_type(first, Tuple{typeof($I)}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> macro default_eltype(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> I = esc(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> return quote +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> if $I isa Generator && ($I).f isa Type +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> ($I).f +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> Any +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code">_array_for(::Type{T}, itr, ::HasLength) where {T} = Vector{T}(undef, Int(length(itr)::Integer)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code">_array_for(::Type{T}, itr, ::HasShape{N}) where {T,N} = similar(Array{T,N}, axes(itr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code">function collect(itr::Generator) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> isz = IteratorSize(itr.iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> et = @default_eltype(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(isz, SizeUnknown) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> return grow_to!(Vector{et}(), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> if y === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> return _array_for(et, itr.iter, isz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> v1, st = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> collect_to_with_first!(_array_for(typeof(v1), itr.iter, isz), v1, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code">_collect(c, itr, ::EltypeUnknown, isz::SizeUnknown) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> grow_to!(_similar_for(c, @default_eltype(itr), itr, isz), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code">function _collect(c, itr, ::EltypeUnknown, isz::Union{HasLength,HasShape}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> if y === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> return _similar_for(c, @default_eltype(itr), itr, isz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> v1, st = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> collect_to_with_first!(_similar_for(c, typeof(v1), itr, isz), v1, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code">function collect_to_with_first!(dest::AbstractArray, v1, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> i1 = first(LinearIndices(dest)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> dest[i1] = v1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> return collect_to!(dest, itr, i1+1, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code">function collect_to_with_first!(dest, v1, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(dest, v1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> return grow_to!(dest, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code">function collect_to!(dest::AbstractArray{T}, itr, offs, st) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> # collect to dest array, checking the type of each result. if a result does not +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> # match, widen the result type and re-dispatch. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> i = offs +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> el, st = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> if el isa T || typeof(el) === T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds dest[i] = el::T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"> i += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> R = promote_typejoin(T, typeof(el)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> new = similar(dest, R) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(new,1, dest,1, i-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds new[i] = el +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> return collect_to!(new, itr, i+1, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"> return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code">function grow_to!(dest, itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> dest2 = empty(dest, typeof(y[1])) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(dest2, y[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"> grow_to!(dest2, itr, y[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code">function grow_to!(dest, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code"> T = eltype(dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> while y !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code"> el, st = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> S = typeof(el) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> if S === T || S <: T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(dest, el::T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> new = sizehint!(empty(dest, promote_typejoin(T, S)), length(dest)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> if new isa AbstractSet +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: merge back these two branches when copy! is re-enabled for sets/vectors +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> union!(new, dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(new, dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(new, el) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> return grow_to!(new, itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr, st) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> return dest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code">## Iteration ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code">iterate(A::Array, i=1) = (@_inline_meta; (i % UInt) - 1 < length(A) ? (@inbounds A[i], i + 1) : nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code">## Indexing: getindex ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> getindex(collection, key...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code">Retrieve the value(s) stored at the given key or index within a collection. The syntax +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code">`a[i,j,...]` is converted by the compiler to `getindex(a, i, j, ...)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = Dict("a" => 1, "b" => 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code">Dict{String,Int64} with 2 entries: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> "b" => 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> "a" => 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code">julia> getindex(A, "a") +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"># This is more complicated than it needs to be in order to get Win64 through bootstrap +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code">@eval getindex(A::Array, i1::Int) = arrayref($(Expr(:boundscheck)), A, i1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code">@eval getindex(A::Array, i1::Int, i2::Int, I::Int...) = (@_inline_meta; arrayref($(Expr(:boundscheck)), A, i1, i2, I...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"># Faster contiguous indexing using copyto! for UnitRange and Colon +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(A::Array, I::UnitRange{Int}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck checkbounds(A, I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> lI = length(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> X = similar(A, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> if lI > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(X, 1, A, first(I), lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> return X +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(A::Array, c::Colon) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> lI = length(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> X = similar(A, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> if lI > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(X, 1, A, 1, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> return X +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"># This is redundant with the abstract fallbacks, but needed for bootstrap +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(A::Array{S}, I::AbstractRange{Int}) where S +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> return S[ A[i] for i in I ] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code">## Indexing: setindex! ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> setindex!(collection, value, key...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code">Store the given value at the given key or index within a collection. The syntax `a[i,j,...] = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code">x` is converted by the compiler to `(setindex!(a, x, i, j, ...); x)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex! end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code">@eval setindex!(A::Array{T}, x, i1::Int) where {T} = arrayset($(Expr(:boundscheck)), A, convert(T,x)::T, i1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code">@eval setindex!(A::Array{T}, x, i1::Int, i2::Int, I::Int...) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code"> (@_inline_meta; arrayset($(Expr(:boundscheck)), A, convert(T,x)::T, i1, i2, I...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"># This is redundant with the abstract fallbacks but needed and helpful for bootstrap +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(A::Array, X::AbstractArray, I::AbstractVector{Int}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> @_propagate_inbounds_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck setindex_shape_check(X, length(I)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(X) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> X′ = unalias(A, X) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> I′ = unalias(A, I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> count = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in I′ +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds x = X′[count] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> A[i] = x +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> count += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> return A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code"># Faster contiguous setindex! with copyto! +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(A::Array{T}, X::Array{T}, I::UnitRange{Int}) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck checkbounds(A, I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> lI = length(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck setindex_shape_check(X, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code"> if lI > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(A, first(I), X, 1, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"> return A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(A::Array{T}, X::Array{T}, c::Colon) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> lI = length(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck setindex_shape_check(X, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> if lI > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_copyto!(A, 1, X, 1, lI) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> return A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"># efficiently grow an array +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code">_growbeg!(a::Vector, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_grow_beg, Cvoid, (Any, UInt), a, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code">_growend!(a::Vector, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_grow_end, Cvoid, (Any, UInt), a, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code">_growat!(a::Vector, i::Integer, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_grow_at, Cvoid, (Any, Int, UInt), a, i - 1, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"># efficiently delete part of an array +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code">_deletebeg!(a::Vector, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_del_beg, Cvoid, (Any, UInt), a, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-823"></a>823</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823"></a> + 1 (2.38%) samples spent in _deleteend!<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + resize! + <a href="array-jl-e331915c4fb281d94775-line.html#Larray-jl-e331915c4fb281d94775-line.html-1011">line 1011</a><br /> + </div> + <span class="code">_deleteend!(a::Vector, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_del_end, Cvoid, (Any, UInt), a, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code">_deleteat!(a::Vector, i::Integer, delta::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_del_at, Cvoid, (Any, Int, UInt), a, i - 1, delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code">## Dequeue functionality ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(collection, items...) -> collection +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code">Insert one or more `items` at the end of `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code">julia> push!([1, 2, 3], 4, 5, 6) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`append!`](@ref) to add all the elements of another collection to +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code">`collection`. The result of the preceding example is equivalent to `append!([1, 2, 3], [4, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code">5, 6])`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code">function push! end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code">function push!(a::Array{T,1}, item) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> # convert first so we don't grow the array if the assignment won't work +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> itemT = convert(T, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> _growend!(a, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> a[end] = itemT +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code">function push!(a::Array{Any,1}, @nospecialize item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> _growend!(a, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> arrayset(true, a, item, length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(collection, collection2) -> collection. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code">Add the elements of `collection2` to the end of `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code">julia> append!([1],[2,3]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code">julia> append!([1, 2, 3], [4, 5, 6]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`push!`](@ref) to add individual items to `collection` which are not already +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code">themselves in another collection. The result of the preceding example is equivalent to +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code">`push!([1, 2, 3], 4, 5, 6)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code">function append!(a::Array{<:Any,1}, items::AbstractVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code"> itemindices = eachindex(items) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(itemindices) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code"> _growend!(a, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(a, length(a)-n+1, items, first(itemindices), n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code">append!(a::Vector, iter) = _append!(a, IteratorSize(iter), iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code">push!(a::Vector, iter...) = append!(a, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code">function _append!(a, ::Union{HasLength,HasShape}, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(a, n+length(iter)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for (i,item) in zip(n+1:length(a), iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code">function _append!(a, ::IteratorSize, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> for item in iter +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(a, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> prepend!(a::Vector, items) -> collection +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code">Insert the elements of `items` to the beginning of `a`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code">julia> prepend!([3],[1,2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code">function prepend! end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code">function prepend!(a::Array{<:Any,1}, items::AbstractVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> itemindices = eachindex(items) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(itemindices) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> _growbeg!(a, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code"> if a === items +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(a, 1, items, n+1, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(a, 1, items, first(itemindices), n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code">prepend!(a::Vector, iter) = _prepend!(a, IteratorSize(iter), iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code">pushfirst!(a::Vector, iter...) = prepend!(a, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code">function _prepend!(a, ::Union{HasLength,HasShape}, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> _growbeg!(a, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code"> for item in iter +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[i += 1] = item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code">function _prepend!(a, ::IteratorSize, iter) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code"> for item in iter +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> n += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> pushfirst!(a, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code"> reverse!(a, 1, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code"> a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(a::Vector, n::Integer) -> Vector +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code">Resize `a` to contain `n` elements. If `n` is smaller than the current collection +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code">length, the first `n` elements will be retained. If `n` is larger, the new elements are not +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code">guaranteed to be initialized. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code">julia> resize!([6, 5, 4, 3, 2, 1], 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = resize!([6, 5, 4, 3, 2, 1], 8); +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code">julia> length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code">8 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a[1:6] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code">function resize!(a::Vector, nl::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> l = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code"> if nl > l +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code"> _growend!(a, nl-l) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif nl != l +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code"> if nl < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("new length must be ≥ 0")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1011"></a>1011</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-resize-1011"></a> + 1 (2.38%) samples spent in resize!<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-124">line 124</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823">_deleteend!</a><br /> + </div> + <span class="code"> _deleteend!(a, l-nl) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"> sizehint!(s, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code">Suggest that collection `s` reserve capacity for at least `n` elements. This can improve performance. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code">function sizehint! end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code">function sizehint!(a::Vector, sz::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_sizehint, Cvoid, (Any, UInt), a, sz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code"> a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1027"></a>1027</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code"> pop!(collection) -> item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code">Remove an item in `collection` and return it. If `collection` is an +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code">ordered container, the last item is returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A=[1, 2, 3] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code">julia> pop!(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1044"></a>1044</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1045"></a>1045</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1046"></a>1046</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1047"></a>1047</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1048"></a>1048</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1049"></a>1049</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1050"></a>1050</td> + <td></td> + <td></td> + <td> + <span class="code">julia> S = Set([1, 2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1051"></a>1051</td> + <td></td> + <td></td> + <td> + <span class="code">Set([2, 1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1052"></a>1052</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1053"></a>1053</td> + <td></td> + <td></td> + <td> + <span class="code">julia> pop!(S) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1054"></a>1054</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1055"></a>1055</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1056"></a>1056</td> + <td></td> + <td></td> + <td> + <span class="code">julia> S +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1057"></a>1057</td> + <td></td> + <td></td> + <td> + <span class="code">Set([1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1058"></a>1058</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1059"></a>1059</td> + <td></td> + <td></td> + <td> + <span class="code">julia> pop!(Dict(1=>2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1060"></a>1060</td> + <td></td> + <td></td> + <td> + <span class="code">1 => 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1061"></a>1061</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1062"></a>1062</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1063"></a>1063</td> + <td></td> + <td></td> + <td> + <span class="code">function pop!(a::Vector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1064"></a>1064</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1065"></a>1065</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("array must be non-empty")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1066"></a>1066</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1067"></a>1067</td> + <td></td> + <td></td> + <td> + <span class="code"> item = a[end] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1068"></a>1068</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteend!(a, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1069"></a>1069</td> + <td></td> + <td></td> + <td> + <span class="code"> return item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1070"></a>1070</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1071"></a>1071</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1072"></a>1072</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1073"></a>1073</td> + <td></td> + <td></td> + <td> + <span class="code"> pushfirst!(collection, items...) -> collection +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1074"></a>1074</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1075"></a>1075</td> + <td></td> + <td></td> + <td> + <span class="code">Insert one or more `items` at the beginning of `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1076"></a>1076</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1077"></a>1077</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1078"></a>1078</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1079"></a>1079</td> + <td></td> + <td></td> + <td> + <span class="code">julia> pushfirst!([1, 2, 3, 4], 5, 6) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1080"></a>1080</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1081"></a>1081</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1082"></a>1082</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1083"></a>1083</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1084"></a>1084</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1085"></a>1085</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1086"></a>1086</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1087"></a>1087</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1088"></a>1088</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1089"></a>1089</td> + <td></td> + <td></td> + <td> + <span class="code">function pushfirst!(a::Array{T,1}, item) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1090"></a>1090</td> + <td></td> + <td></td> + <td> + <span class="code"> item = convert(T, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1091"></a>1091</td> + <td></td> + <td></td> + <td> + <span class="code"> _growbeg!(a, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1092"></a>1092</td> + <td></td> + <td></td> + <td> + <span class="code"> a[1] = item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1093"></a>1093</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1094"></a>1094</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1095"></a>1095</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1096"></a>1096</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1097"></a>1097</td> + <td></td> + <td></td> + <td> + <span class="code"> popfirst!(collection) -> item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1098"></a>1098</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1099"></a>1099</td> + <td></td> + <td></td> + <td> + <span class="code">Remove the first `item` from `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1100"></a>1100</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1101"></a>1101</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1102"></a>1102</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1103"></a>1103</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1, 2, 3, 4, 5, 6] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1104"></a>1104</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1105"></a>1105</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1106"></a>1106</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1107"></a>1107</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1108"></a>1108</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1109"></a>1109</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1110"></a>1110</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1111"></a>1111</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1112"></a>1112</td> + <td></td> + <td></td> + <td> + <span class="code">julia> popfirst!(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1113"></a>1113</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1114"></a>1114</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1115"></a>1115</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1116"></a>1116</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1117"></a>1117</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1118"></a>1118</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1119"></a>1119</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1120"></a>1120</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1121"></a>1121</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1122"></a>1122</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1123"></a>1123</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1124"></a>1124</td> + <td></td> + <td></td> + <td> + <span class="code">function popfirst!(a::Vector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1125"></a>1125</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1126"></a>1126</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("array must be non-empty")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1127"></a>1127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1128"></a>1128</td> + <td></td> + <td></td> + <td> + <span class="code"> item = a[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1129"></a>1129</td> + <td></td> + <td></td> + <td> + <span class="code"> _deletebeg!(a, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1130"></a>1130</td> + <td></td> + <td></td> + <td> + <span class="code"> return item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1131"></a>1131</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1132"></a>1132</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1133"></a>1133</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1134"></a>1134</td> + <td></td> + <td></td> + <td> + <span class="code"> insert!(a::Vector, index::Integer, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1135"></a>1135</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1136"></a>1136</td> + <td></td> + <td></td> + <td> + <span class="code">Insert an `item` into `a` at the given `index`. `index` is the index of `item` in +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1137"></a>1137</td> + <td></td> + <td></td> + <td> + <span class="code">the resulting `a`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1138"></a>1138</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1139"></a>1139</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1140"></a>1140</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1141"></a>1141</td> + <td></td> + <td></td> + <td> + <span class="code">julia> insert!([6, 5, 4, 2, 1], 4, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1142"></a>1142</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1143"></a>1143</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1144"></a>1144</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1145"></a>1145</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1146"></a>1146</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1147"></a>1147</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1148"></a>1148</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1149"></a>1149</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1150"></a>1150</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1151"></a>1151</td> + <td></td> + <td></td> + <td> + <span class="code">function insert!(a::Array{T,1}, i::Integer, item) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1152"></a>1152</td> + <td></td> + <td></td> + <td> + <span class="code"> # Throw convert error before changing the shape of the array +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1153"></a>1153</td> + <td></td> + <td></td> + <td> + <span class="code"> _item = convert(T, item) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1154"></a>1154</td> + <td></td> + <td></td> + <td> + <span class="code"> _growat!(a, i, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1155"></a>1155</td> + <td></td> + <td></td> + <td> + <span class="code"> # _growat! already did bound check +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1156"></a>1156</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[i] = _item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1157"></a>1157</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1158"></a>1158</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1159"></a>1159</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1160"></a>1160</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1161"></a>1161</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(a::Vector, i::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1162"></a>1162</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1163"></a>1163</td> + <td></td> + <td></td> + <td> + <span class="code">Remove the item at the given `i` and return the modified `a`. Subsequent items +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1164"></a>1164</td> + <td></td> + <td></td> + <td> + <span class="code">are shifted to fill the resulting gap. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1165"></a>1165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1166"></a>1166</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1167"></a>1167</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1168"></a>1168</td> + <td></td> + <td></td> + <td> + <span class="code">julia> deleteat!([6, 5, 4, 3, 2, 1], 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1169"></a>1169</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1170"></a>1170</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1171"></a>1171</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1172"></a>1172</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1173"></a>1173</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1174"></a>1174</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1175"></a>1175</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1176"></a>1176</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1177"></a>1177</td> + <td></td> + <td></td> + <td> + <span class="code">deleteat!(a::Vector, i::Integer) = (_deleteat!(a, i, 1); a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1178"></a>1178</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1179"></a>1179</td> + <td></td> + <td></td> + <td> + <span class="code">function deleteat!(a::Vector, r::UnitRange{<:Integer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1180"></a>1180</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1181"></a>1181</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(r) || _deleteat!(a, first(r), length(r)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1182"></a>1182</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1183"></a>1183</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1184"></a>1184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1185"></a>1185</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1186"></a>1186</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(a::Vector, inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1187"></a>1187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1188"></a>1188</td> + <td></td> + <td></td> + <td> + <span class="code">Remove the items at the indices given by `inds`, and return the modified `a`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1189"></a>1189</td> + <td></td> + <td></td> + <td> + <span class="code">Subsequent items are shifted to fill the resulting gap. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1190"></a>1190</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1191"></a>1191</td> + <td></td> + <td></td> + <td> + <span class="code">`inds` can be either an iterator or a collection of sorted and unique integer indices, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1192"></a>1192</td> + <td></td> + <td></td> + <td> + <span class="code">or a boolean vector of the same length as `a` with `true` indicating entries to delete. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1193"></a>1193</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1194"></a>1194</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1195"></a>1195</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1196"></a>1196</td> + <td></td> + <td></td> + <td> + <span class="code">julia> deleteat!([6, 5, 4, 3, 2, 1], 1:2:5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1197"></a>1197</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1198"></a>1198</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1199"></a>1199</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1200"></a>1200</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1201"></a>1201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1202"></a>1202</td> + <td></td> + <td></td> + <td> + <span class="code">julia> deleteat!([6, 5, 4, 3, 2, 1], [true, false, true, false, true, false]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1203"></a>1203</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1204"></a>1204</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1205"></a>1205</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1206"></a>1206</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1207"></a>1207</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1208"></a>1208</td> + <td></td> + <td></td> + <td> + <span class="code">julia> deleteat!([6, 5, 4, 3, 2, 1], (2, 2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1209"></a>1209</td> + <td></td> + <td></td> + <td> + <span class="code">ERROR: ArgumentError: indices must be unique and sorted +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1210"></a>1210</td> + <td></td> + <td></td> + <td> + <span class="code">Stacktrace: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1211"></a>1211</td> + <td></td> + <td></td> + <td> + <span class="code">[...] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1212"></a>1212</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1213"></a>1213</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1214"></a>1214</td> + <td></td> + <td></td> + <td> + <span class="code">deleteat!(a::Vector, inds) = _deleteat!(a, inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1215"></a>1215</td> + <td></td> + <td></td> + <td> + <span class="code">deleteat!(a::Vector, inds::AbstractVector) = _deleteat!(a, to_indices(a, (inds,))[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1216"></a>1216</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1217"></a>1217</td> + <td></td> + <td></td> + <td> + <span class="code">function _deleteat!(a::Vector, inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1218"></a>1218</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1219"></a>1219</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1220"></a>1220</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1221"></a>1221</td> + <td></td> + <td></td> + <td> + <span class="code"> (p, s) = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1222"></a>1222</td> + <td></td> + <td></td> + <td> + <span class="code"> q = p+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1223"></a>1223</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1224"></a>1224</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(inds, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1225"></a>1225</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1226"></a>1226</td> + <td></td> + <td></td> + <td> + <span class="code"> (i,s) = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1227"></a>1227</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(q <= i <= n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1228"></a>1228</td> + <td></td> + <td></td> + <td> + <span class="code"> if i < q +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1229"></a>1229</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("indices must be unique and sorted")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1230"></a>1230</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1231"></a>1231</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1232"></a>1232</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1233"></a>1233</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1234"></a>1234</td> + <td></td> + <td></td> + <td> + <span class="code"> while q < i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1235"></a>1235</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[p] = a[q] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1236"></a>1236</td> + <td></td> + <td></td> + <td> + <span class="code"> p += 1; q += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1237"></a>1237</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1238"></a>1238</td> + <td></td> + <td></td> + <td> + <span class="code"> q = i+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1239"></a>1239</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1240"></a>1240</td> + <td></td> + <td></td> + <td> + <span class="code"> while q <= n +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1241"></a>1241</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[p] = a[q] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1242"></a>1242</td> + <td></td> + <td></td> + <td> + <span class="code"> p += 1; q += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1243"></a>1243</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1244"></a>1244</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteend!(a, n-p+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1245"></a>1245</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1246"></a>1246</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1247"></a>1247</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1248"></a>1248</td> + <td></td> + <td></td> + <td> + <span class="code"># Simpler and more efficient version for logical indexing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1249"></a>1249</td> + <td></td> + <td></td> + <td> + <span class="code">function deleteat!(a::Vector, inds::AbstractVector{Bool}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1250"></a>1250</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1251"></a>1251</td> + <td></td> + <td></td> + <td> + <span class="code"> length(inds) == n || throw(BoundsError(a, inds)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1252"></a>1252</td> + <td></td> + <td></td> + <td> + <span class="code"> p = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1253"></a>1253</td> + <td></td> + <td></td> + <td> + <span class="code"> for (q, i) in enumerate(inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1254"></a>1254</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds a[p] = a[q] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1255"></a>1255</td> + <td></td> + <td></td> + <td> + <span class="code"> p += !i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1256"></a>1256</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1257"></a>1257</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteend!(a, n-p+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1258"></a>1258</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1259"></a>1259</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1260"></a>1260</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1261"></a>1261</td> + <td></td> + <td></td> + <td> + <span class="code">const _default_splice = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1262"></a>1262</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1263"></a>1263</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1264"></a>1264</td> + <td></td> + <td></td> + <td> + <span class="code"> splice!(a::Vector, index::Integer, [replacement]) -> item +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1265"></a>1265</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1266"></a>1266</td> + <td></td> + <td></td> + <td> + <span class="code">Remove the item at the given index, and return the removed item. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1267"></a>1267</td> + <td></td> + <td></td> + <td> + <span class="code">Subsequent items are shifted left to fill the resulting gap. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1268"></a>1268</td> + <td></td> + <td></td> + <td> + <span class="code">If specified, replacement values from an ordered +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1269"></a>1269</td> + <td></td> + <td></td> + <td> + <span class="code">collection will be spliced in place of the removed item. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1270"></a>1270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1271"></a>1271</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1272"></a>1272</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest splice! +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1273"></a>1273</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [6, 5, 4, 3, 2, 1]; splice!(A, 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1274"></a>1274</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1275"></a>1275</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1276"></a>1276</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1277"></a>1277</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1278"></a>1278</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1279"></a>1279</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1280"></a>1280</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1281"></a>1281</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1282"></a>1282</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1283"></a>1283</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1284"></a>1284</td> + <td></td> + <td></td> + <td> + <span class="code">julia> splice!(A, 5, -1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1285"></a>1285</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1286"></a>1286</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1287"></a>1287</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1288"></a>1288</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1289"></a>1289</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1290"></a>1290</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1291"></a>1291</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1292"></a>1292</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1293"></a>1293</td> + <td></td> + <td></td> + <td> + <span class="code"> -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1294"></a>1294</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1295"></a>1295</td> + <td></td> + <td></td> + <td> + <span class="code">julia> splice!(A, 1, [-1, -2, -3]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1296"></a>1296</td> + <td></td> + <td></td> + <td> + <span class="code">6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1297"></a>1297</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1298"></a>1298</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1299"></a>1299</td> + <td></td> + <td></td> + <td> + <span class="code">7-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1300"></a>1300</td> + <td></td> + <td></td> + <td> + <span class="code"> -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1301"></a>1301</td> + <td></td> + <td></td> + <td> + <span class="code"> -2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1302"></a>1302</td> + <td></td> + <td></td> + <td> + <span class="code"> -3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1303"></a>1303</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1304"></a>1304</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1305"></a>1305</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1306"></a>1306</td> + <td></td> + <td></td> + <td> + <span class="code"> -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1307"></a>1307</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1308"></a>1308</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1309"></a>1309</td> + <td></td> + <td></td> + <td> + <span class="code">To insert `replacement` before an index `n` without removing any items, use +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1310"></a>1310</td> + <td></td> + <td></td> + <td> + <span class="code">`splice!(collection, n:n-1, replacement)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1311"></a>1311</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1312"></a>1312</td> + <td></td> + <td></td> + <td> + <span class="code">function splice!(a::Vector, i::Integer, ins=_default_splice) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1313"></a>1313</td> + <td></td> + <td></td> + <td> + <span class="code"> v = a[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1314"></a>1314</td> + <td></td> + <td></td> + <td> + <span class="code"> m = length(ins) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1315"></a>1315</td> + <td></td> + <td></td> + <td> + <span class="code"> if m == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1316"></a>1316</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteat!(a, i, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1317"></a>1317</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif m == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1318"></a>1318</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = ins[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1319"></a>1319</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1320"></a>1320</td> + <td></td> + <td></td> + <td> + <span class="code"> _growat!(a, i, m-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1321"></a>1321</td> + <td></td> + <td></td> + <td> + <span class="code"> k = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1322"></a>1322</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in ins +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1323"></a>1323</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i+k-1] = x +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1324"></a>1324</td> + <td></td> + <td></td> + <td> + <span class="code"> k += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1325"></a>1325</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1326"></a>1326</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1327"></a>1327</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1328"></a>1328</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1329"></a>1329</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1330"></a>1330</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1331"></a>1331</td> + <td></td> + <td></td> + <td> + <span class="code"> splice!(a::Vector, range, [replacement]) -> items +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1332"></a>1332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1333"></a>1333</td> + <td></td> + <td></td> + <td> + <span class="code">Remove items in the specified index range, and return a collection containing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1334"></a>1334</td> + <td></td> + <td></td> + <td> + <span class="code">the removed items. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1335"></a>1335</td> + <td></td> + <td></td> + <td> + <span class="code">Subsequent items are shifted left to fill the resulting gap. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1336"></a>1336</td> + <td></td> + <td></td> + <td> + <span class="code">If specified, replacement values from an ordered collection will be spliced in +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1337"></a>1337</td> + <td></td> + <td></td> + <td> + <span class="code">place of the removed items. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1338"></a>1338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1339"></a>1339</td> + <td></td> + <td></td> + <td> + <span class="code">To insert `replacement` before an index `n` without removing any items, use +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1340"></a>1340</td> + <td></td> + <td></td> + <td> + <span class="code">`splice!(collection, n:n-1, replacement)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1341"></a>1341</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1342"></a>1342</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1343"></a>1343</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest splice! +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1344"></a>1344</td> + <td></td> + <td></td> + <td> + <span class="code">julia> splice!(A, 4:3, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1345"></a>1345</td> + <td></td> + <td></td> + <td> + <span class="code">0-element Array{Int64,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1346"></a>1346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1347"></a>1347</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1348"></a>1348</td> + <td></td> + <td></td> + <td> + <span class="code">8-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1349"></a>1349</td> + <td></td> + <td></td> + <td> + <span class="code"> -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1350"></a>1350</td> + <td></td> + <td></td> + <td> + <span class="code"> -2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1351"></a>1351</td> + <td></td> + <td></td> + <td> + <span class="code"> -3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1352"></a>1352</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1353"></a>1353</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1354"></a>1354</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1355"></a>1355</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1356"></a>1356</td> + <td></td> + <td></td> + <td> + <span class="code"> -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1357"></a>1357</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1358"></a>1358</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1359"></a>1359</td> + <td></td> + <td></td> + <td> + <span class="code">function splice!(a::Vector, r::UnitRange{<:Integer}, ins=_default_splice) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1360"></a>1360</td> + <td></td> + <td></td> + <td> + <span class="code"> v = a[r] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1361"></a>1361</td> + <td></td> + <td></td> + <td> + <span class="code"> m = length(ins) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1362"></a>1362</td> + <td></td> + <td></td> + <td> + <span class="code"> if m == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1363"></a>1363</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(a, r) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1364"></a>1364</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1365"></a>1365</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1366"></a>1366</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1367"></a>1367</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1368"></a>1368</td> + <td></td> + <td></td> + <td> + <span class="code"> f = first(r) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1369"></a>1369</td> + <td></td> + <td></td> + <td> + <span class="code"> l = last(r) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1370"></a>1370</td> + <td></td> + <td></td> + <td> + <span class="code"> d = length(r) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1371"></a>1371</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1372"></a>1372</td> + <td></td> + <td></td> + <td> + <span class="code"> if m < d +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1373"></a>1373</td> + <td></td> + <td></td> + <td> + <span class="code"> delta = d - m +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1374"></a>1374</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteat!(a, (f - 1 < n - l) ? f : (l - delta + 1), delta) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1375"></a>1375</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif m > d +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1376"></a>1376</td> + <td></td> + <td></td> + <td> + <span class="code"> _growat!(a, (f - 1 < n - l) ? f : (l + 1), m - d) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1377"></a>1377</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1378"></a>1378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1379"></a>1379</td> + <td></td> + <td></td> + <td> + <span class="code"> k = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1380"></a>1380</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in ins +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1381"></a>1381</td> + <td></td> + <td></td> + <td> + <span class="code"> a[f+k-1] = x +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1382"></a>1382</td> + <td></td> + <td></td> + <td> + <span class="code"> k += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1383"></a>1383</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1384"></a>1384</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1385"></a>1385</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1386"></a>1386</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1387"></a>1387</td> + <td></td> + <td></td> + <td> + <span class="code">function empty!(a::Vector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1388"></a>1388</td> + <td></td> + <td></td> + <td> + <span class="code"> _deleteend!(a, length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1389"></a>1389</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1390"></a>1390</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1391"></a>1391</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1392"></a>1392</td> + <td></td> + <td></td> + <td> + <span class="code">_memcmp(a, b, len) = ccall(:memcmp, Int32, (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t), a, b, len) % Int +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1393"></a>1393</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1394"></a>1394</td> + <td></td> + <td></td> + <td> + <span class="code"># use memcmp for cmp on byte arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1395"></a>1395</td> + <td></td> + <td></td> + <td> + <span class="code">function cmp(a::Array{UInt8,1}, b::Array{UInt8,1}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1396"></a>1396</td> + <td></td> + <td></td> + <td> + <span class="code"> c = _memcmp(a, b, min(length(a),length(b))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1397"></a>1397</td> + <td></td> + <td></td> + <td> + <span class="code"> return c < 0 ? -1 : c > 0 ? +1 : cmp(length(a),length(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1398"></a>1398</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1399"></a>1399</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1400"></a>1400</td> + <td></td> + <td></td> + <td> + <span class="code">const BitIntegerArray{N} = Union{map(T->Array{T,N}, BitInteger_types)...} where N +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1401"></a>1401</td> + <td></td> + <td></td> + <td> + <span class="code"># use memcmp for == on bit integer types +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1402"></a>1402</td> + <td></td> + <td></td> + <td> + <span class="code">==(a::Arr, b::Arr) where {Arr <: BitIntegerArray} = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1403"></a>1403</td> + <td></td> + <td></td> + <td> + <span class="code"> size(a) == size(b) && 0 == _memcmp(a, b, sizeof(eltype(Arr)) * length(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1404"></a>1404</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1405"></a>1405</td> + <td></td> + <td></td> + <td> + <span class="code"># this is ~20% faster than the generic implementation above for very small arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1406"></a>1406</td> + <td></td> + <td></td> + <td> + <span class="code">function ==(a::Arr, b::Arr) where Arr <: BitIntegerArray{1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1407"></a>1407</td> + <td></td> + <td></td> + <td> + <span class="code"> len = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1408"></a>1408</td> + <td></td> + <td></td> + <td> + <span class="code"> len == length(b) && 0 == _memcmp(a, b, sizeof(eltype(Arr)) * len) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1409"></a>1409</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1410"></a>1410</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1411"></a>1411</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1412"></a>1412</td> + <td></td> + <td></td> + <td> + <span class="code"> reverse(v [, start=1 [, stop=length(v) ]] ) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1413"></a>1413</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1414"></a>1414</td> + <td></td> + <td></td> + <td> + <span class="code">Return a copy of `v` reversed from start to stop. See also [`Iterators.reverse`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1415"></a>1415</td> + <td></td> + <td></td> + <td> + <span class="code">for reverse-order iteration without making a copy. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1416"></a>1416</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1417"></a>1417</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1418"></a>1418</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1419"></a>1419</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = Vector(1:5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1420"></a>1420</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1421"></a>1421</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1422"></a>1422</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1423"></a>1423</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1424"></a>1424</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1425"></a>1425</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1426"></a>1426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1427"></a>1427</td> + <td></td> + <td></td> + <td> + <span class="code">julia> reverse(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1428"></a>1428</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1429"></a>1429</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1430"></a>1430</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1431"></a>1431</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1432"></a>1432</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1433"></a>1433</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1434"></a>1434</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1435"></a>1435</td> + <td></td> + <td></td> + <td> + <span class="code">julia> reverse(A, 1, 4) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1436"></a>1436</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1437"></a>1437</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1438"></a>1438</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1439"></a>1439</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1440"></a>1440</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1441"></a>1441</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1442"></a>1442</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1443"></a>1443</td> + <td></td> + <td></td> + <td> + <span class="code">julia> reverse(A, 3, 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1444"></a>1444</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1445"></a>1445</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1446"></a>1446</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1447"></a>1447</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1448"></a>1448</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1449"></a>1449</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1450"></a>1450</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1451"></a>1451</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1452"></a>1452</td> + <td></td> + <td></td> + <td> + <span class="code">function reverse(A::AbstractVector, s=first(LinearIndices(A)), n=last(LinearIndices(A))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1453"></a>1453</td> + <td></td> + <td></td> + <td> + <span class="code"> B = similar(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1454"></a>1454</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = first(LinearIndices(A)):s-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1455"></a>1455</td> + <td></td> + <td></td> + <td> + <span class="code"> B[i] = A[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1456"></a>1456</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1457"></a>1457</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = s:n +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1458"></a>1458</td> + <td></td> + <td></td> + <td> + <span class="code"> B[i] = A[n+s-i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1459"></a>1459</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1460"></a>1460</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = n+1:last(LinearIndices(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1461"></a>1461</td> + <td></td> + <td></td> + <td> + <span class="code"> B[i] = A[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1462"></a>1462</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1463"></a>1463</td> + <td></td> + <td></td> + <td> + <span class="code"> return B +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1464"></a>1464</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1465"></a>1465</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1466"></a>1466</td> + <td></td> + <td></td> + <td> + <span class="code"># to resolve ambiguity with reverse(A; dims) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1467"></a>1467</td> + <td></td> + <td></td> + <td> + <span class="code">reverse(A::Vector) = invoke(reverse, Tuple{AbstractVector}, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1468"></a>1468</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1469"></a>1469</td> + <td></td> + <td></td> + <td> + <span class="code">function reverseind(a::AbstractVector, i::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1470"></a>1470</td> + <td></td> + <td></td> + <td> + <span class="code"> li = LinearIndices(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1471"></a>1471</td> + <td></td> + <td></td> + <td> + <span class="code"> first(li) + last(li) - i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1472"></a>1472</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1473"></a>1473</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1474"></a>1474</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1475"></a>1475</td> + <td></td> + <td></td> + <td> + <span class="code"> reverse!(v [, start=1 [, stop=length(v) ]]) -> v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1476"></a>1476</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1477"></a>1477</td> + <td></td> + <td></td> + <td> + <span class="code">In-place version of [`reverse`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1478"></a>1478</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1479"></a>1479</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1480"></a>1480</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1481"></a>1481</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = Vector(1:5) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1482"></a>1482</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1483"></a>1483</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1484"></a>1484</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1485"></a>1485</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1486"></a>1486</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1487"></a>1487</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1488"></a>1488</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1489"></a>1489</td> + <td></td> + <td></td> + <td> + <span class="code">julia> reverse!(A); +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1490"></a>1490</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1491"></a>1491</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1492"></a>1492</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1493"></a>1493</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1494"></a>1494</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1495"></a>1495</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1496"></a>1496</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1497"></a>1497</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1498"></a>1498</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1499"></a>1499</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1500"></a>1500</td> + <td></td> + <td></td> + <td> + <span class="code">function reverse!(v::AbstractVector, s=first(LinearIndices(v)), n=last(LinearIndices(v))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1501"></a>1501</td> + <td></td> + <td></td> + <td> + <span class="code"> liv = LinearIndices(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1502"></a>1502</td> + <td></td> + <td></td> + <td> + <span class="code"> if n <= s # empty case; ok +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1503"></a>1503</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !(first(liv) ≤ s ≤ last(liv)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1504"></a>1504</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError(v, s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1505"></a>1505</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !(first(liv) ≤ n ≤ last(liv)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1506"></a>1506</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError(v, n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1507"></a>1507</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1508"></a>1508</td> + <td></td> + <td></td> + <td> + <span class="code"> r = n +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1509"></a>1509</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i in s:div(s+n-1, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1510"></a>1510</td> + <td></td> + <td></td> + <td> + <span class="code"> v[i], v[r] = v[r], v[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1511"></a>1511</td> + <td></td> + <td></td> + <td> + <span class="code"> r -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1512"></a>1512</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1513"></a>1513</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1514"></a>1514</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1515"></a>1515</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1516"></a>1516</td> + <td></td> + <td></td> + <td> + <span class="code"># concatenations of homogeneous combinations of vectors, horizontal and vertical +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1517"></a>1517</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1518"></a>1518</td> + <td></td> + <td></td> + <td> + <span class="code">vcat() = Vector{Any}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1519"></a>1519</td> + <td></td> + <td></td> + <td> + <span class="code">hcat() = Vector{Any}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1520"></a>1520</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1521"></a>1521</td> + <td></td> + <td></td> + <td> + <span class="code">function hcat(V::Vector{T}...) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1522"></a>1522</td> + <td></td> + <td></td> + <td> + <span class="code"> height = length(V[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1523"></a>1523</td> + <td></td> + <td></td> + <td> + <span class="code"> for j = 2:length(V) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1524"></a>1524</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(V[j]) != height +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1525"></a>1525</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(DimensionMismatch("vectors must have same lengths")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1526"></a>1526</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1527"></a>1527</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1528"></a>1528</td> + <td></td> + <td></td> + <td> + <span class="code"> return [ V[j][i]::T for i=1:length(V[1]), j=1:length(V) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1529"></a>1529</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1530"></a>1530</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1531"></a>1531</td> + <td></td> + <td></td> + <td> + <span class="code">function vcat(arrays::Vector{T}...) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1532"></a>1532</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1533"></a>1533</td> + <td></td> + <td></td> + <td> + <span class="code"> for a in arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1534"></a>1534</td> + <td></td> + <td></td> + <td> + <span class="code"> n += length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1535"></a>1535</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1536"></a>1536</td> + <td></td> + <td></td> + <td> + <span class="code"> arr = Vector{T}(undef, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1537"></a>1537</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = pointer(arr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1538"></a>1538</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1539"></a>1539</td> + <td></td> + <td></td> + <td> + <span class="code"> elsz = Core.sizeof(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1540"></a>1540</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isbitsunion(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1541"></a>1541</td> + <td></td> + <td></td> + <td> + <span class="code"> elsz = bitsunionsize(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1542"></a>1542</td> + <td></td> + <td></td> + <td> + <span class="code"> selptr = ccall(:jl_array_typetagdata, Ptr{UInt8}, (Any,), arr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1543"></a>1543</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1544"></a>1544</td> + <td></td> + <td></td> + <td> + <span class="code"> elsz = Core.sizeof(Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1545"></a>1545</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1546"></a>1546</td> + <td></td> + <td></td> + <td> + <span class="code"> t = @_gc_preserve_begin arr +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1547"></a>1547</td> + <td></td> + <td></td> + <td> + <span class="code"> for a in arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1548"></a>1548</td> + <td></td> + <td></td> + <td> + <span class="code"> na = length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1549"></a>1549</td> + <td></td> + <td></td> + <td> + <span class="code"> nba = na * elsz +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1550"></a>1550</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1551"></a>1551</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memcpy, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1552"></a>1552</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr, a, nba) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1553"></a>1553</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isbitsunion(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1554"></a>1554</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memcpy, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1555"></a>1555</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr, a, nba) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1556"></a>1556</td> + <td></td> + <td></td> + <td> + <span class="code"> # copy selector bytes +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1557"></a>1557</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memcpy, Ptr{Cvoid}, (Ptr{Cvoid}, Ptr{Cvoid}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1558"></a>1558</td> + <td></td> + <td></td> + <td> + <span class="code"> selptr, ccall(:jl_array_typetagdata, Ptr{UInt8}, (Any,), a), na) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1559"></a>1559</td> + <td></td> + <td></td> + <td> + <span class="code"> selptr += na +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1560"></a>1560</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1561"></a>1561</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_ptr_copy, Cvoid, (Any, Ptr{Cvoid}, Any, Ptr{Cvoid}, Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1562"></a>1562</td> + <td></td> + <td></td> + <td> + <span class="code"> arr, ptr, a, pointer(a), na) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1563"></a>1563</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1564"></a>1564</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr += nba +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1565"></a>1565</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1566"></a>1566</td> + <td></td> + <td></td> + <td> + <span class="code"> @_gc_preserve_end t +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1567"></a>1567</td> + <td></td> + <td></td> + <td> + <span class="code"> return arr +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1568"></a>1568</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1569"></a>1569</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1570"></a>1570</td> + <td></td> + <td></td> + <td> + <span class="code">_cat(n::Integer, x::Integer...) = reshape([x...], (ntuple(x->1, n-1)..., length(x))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1571"></a>1571</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1572"></a>1572</td> + <td></td> + <td></td> + <td> + <span class="code">## find ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1573"></a>1573</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1574"></a>1574</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1575"></a>1575</td> + <td></td> + <td></td> + <td> + <span class="code"> findnext(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1576"></a>1576</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1577"></a>1577</td> + <td></td> + <td></td> + <td> + <span class="code">Find the next index after or including `i` of a `true` element of `A`, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1578"></a>1578</td> + <td></td> + <td></td> + <td> + <span class="code">or `nothing` if not found. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1579"></a>1579</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1580"></a>1580</td> + <td></td> + <td></td> + <td> + <span class="code">Indices are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1581"></a>1581</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1582"></a>1582</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1583"></a>1583</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1584"></a>1584</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1585"></a>1585</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false, false, true, false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1586"></a>1586</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Bool,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1587"></a>1587</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1588"></a>1588</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1589"></a>1589</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1590"></a>1590</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1591"></a>1591</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1592"></a>1592</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(A, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1593"></a>1593</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1594"></a>1594</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1595"></a>1595</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(A, 4) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1596"></a>1596</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1597"></a>1597</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false false; true false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1598"></a>1598</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Bool,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1599"></a>1599</td> + <td></td> + <td></td> + <td> + <span class="code"> false false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1600"></a>1600</td> + <td></td> + <td></td> + <td> + <span class="code"> true false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1601"></a>1601</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1602"></a>1602</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(A, CartesianIndex(1, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1603"></a>1603</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1604"></a>1604</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1605"></a>1605</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1606"></a>1606</td> + <td></td> + <td></td> + <td> + <span class="code">function findnext(A, start) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1607"></a>1607</td> + <td></td> + <td></td> + <td> + <span class="code"> l = last(keys(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1608"></a>1608</td> + <td></td> + <td></td> + <td> + <span class="code"> i = start +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1609"></a>1609</td> + <td></td> + <td></td> + <td> + <span class="code"> while i <= l +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1610"></a>1610</td> + <td></td> + <td></td> + <td> + <span class="code"> if A[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1611"></a>1611</td> + <td></td> + <td></td> + <td> + <span class="code"> return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1612"></a>1612</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1613"></a>1613</td> + <td></td> + <td></td> + <td> + <span class="code"> i = nextind(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1614"></a>1614</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1615"></a>1615</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1616"></a>1616</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1617"></a>1617</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1618"></a>1618</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1619"></a>1619</td> + <td></td> + <td></td> + <td> + <span class="code"> findfirst(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1620"></a>1620</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1621"></a>1621</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index or key of the first `true` value in `A`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1622"></a>1622</td> + <td></td> + <td></td> + <td> + <span class="code">Return `nothing` if no such value is found. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1623"></a>1623</td> + <td></td> + <td></td> + <td> + <span class="code">To search for other kinds of values, pass a predicate as the first argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1624"></a>1624</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1625"></a>1625</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1626"></a>1626</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1627"></a>1627</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1628"></a>1628</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1629"></a>1629</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1630"></a>1630</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false, false, true, false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1631"></a>1631</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Bool,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1632"></a>1632</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1633"></a>1633</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1634"></a>1634</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1635"></a>1635</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1636"></a>1636</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1637"></a>1637</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1638"></a>1638</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1639"></a>1639</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1640"></a>1640</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(falses(3)) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1641"></a>1641</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1642"></a>1642</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false false; true false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1643"></a>1643</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Bool,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1644"></a>1644</td> + <td></td> + <td></td> + <td> + <span class="code"> false false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1645"></a>1645</td> + <td></td> + <td></td> + <td> + <span class="code"> true false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1646"></a>1646</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1647"></a>1647</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1648"></a>1648</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1649"></a>1649</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1650"></a>1650</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1651"></a>1651</td> + <td></td> + <td></td> + <td> + <span class="code">function findfirst(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1652"></a>1652</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i, a) in pairs(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1653"></a>1653</td> + <td></td> + <td></td> + <td> + <span class="code"> if a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1654"></a>1654</td> + <td></td> + <td></td> + <td> + <span class="code"> return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1655"></a>1655</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1656"></a>1656</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1657"></a>1657</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1658"></a>1658</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1659"></a>1659</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1660"></a>1660</td> + <td></td> + <td></td> + <td> + <span class="code"># Needed for bootstrap, and allows defining only an optimized findnext method +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1661"></a>1661</td> + <td></td> + <td></td> + <td> + <span class="code">findfirst(A::Union{AbstractArray, AbstractString}) = findnext(A, first(keys(A))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1662"></a>1662</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1663"></a>1663</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1664"></a>1664</td> + <td></td> + <td></td> + <td> + <span class="code"> findnext(predicate::Function, A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1665"></a>1665</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1666"></a>1666</td> + <td></td> + <td></td> + <td> + <span class="code">Find the next index after or including `i` of an element of `A` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1667"></a>1667</td> + <td></td> + <td></td> + <td> + <span class="code">for which `predicate` returns `true`, or `nothing` if not found. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1668"></a>1668</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1669"></a>1669</td> + <td></td> + <td></td> + <td> + <span class="code">Indices are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1670"></a>1670</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1671"></a>1671</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1672"></a>1672</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1673"></a>1673</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1674"></a>1674</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1, 4, 2, 2]; +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1675"></a>1675</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1676"></a>1676</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(isodd, A, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1677"></a>1677</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1678"></a>1678</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1679"></a>1679</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(isodd, A, 2) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1680"></a>1680</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1681"></a>1681</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1 4; 2 2]; +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1682"></a>1682</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1683"></a>1683</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findnext(isodd, A, CartesianIndex(1, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1684"></a>1684</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1685"></a>1685</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1686"></a>1686</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1687"></a>1687</td> + <td></td> + <td></td> + <td> + <span class="code">function findnext(testf::Function, A, start) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1688"></a>1688</td> + <td></td> + <td></td> + <td> + <span class="code"> l = last(keys(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1689"></a>1689</td> + <td></td> + <td></td> + <td> + <span class="code"> i = start +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1690"></a>1690</td> + <td></td> + <td></td> + <td> + <span class="code"> while i <= l +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1691"></a>1691</td> + <td></td> + <td></td> + <td> + <span class="code"> if testf(A[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1692"></a>1692</td> + <td></td> + <td></td> + <td> + <span class="code"> return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1693"></a>1693</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1694"></a>1694</td> + <td></td> + <td></td> + <td> + <span class="code"> i = nextind(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1695"></a>1695</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1696"></a>1696</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1697"></a>1697</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1698"></a>1698</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1699"></a>1699</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1700"></a>1700</td> + <td></td> + <td></td> + <td> + <span class="code"> findfirst(predicate::Function, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1701"></a>1701</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1702"></a>1702</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index or key of the first element of `A` for which `predicate` returns `true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1703"></a>1703</td> + <td></td> + <td></td> + <td> + <span class="code">Return `nothing` if there is no such element. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1704"></a>1704</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1705"></a>1705</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1706"></a>1706</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1707"></a>1707</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1708"></a>1708</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1709"></a>1709</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1710"></a>1710</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1, 4, 2, 2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1711"></a>1711</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1712"></a>1712</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1713"></a>1713</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1714"></a>1714</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1715"></a>1715</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1716"></a>1716</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1717"></a>1717</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(iseven, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1718"></a>1718</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1719"></a>1719</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1720"></a>1720</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(x -> x>10, A) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1721"></a>1721</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1722"></a>1722</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(isequal(4), A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1723"></a>1723</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1724"></a>1724</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1725"></a>1725</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1 4; 2 2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1726"></a>1726</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1727"></a>1727</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1728"></a>1728</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1729"></a>1729</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1730"></a>1730</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findfirst(iseven, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1731"></a>1731</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1732"></a>1732</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1733"></a>1733</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1734"></a>1734</td> + <td></td> + <td></td> + <td> + <span class="code">function findfirst(testf::Function, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1735"></a>1735</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i, a) in pairs(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1736"></a>1736</td> + <td></td> + <td></td> + <td> + <span class="code"> testf(a) && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1737"></a>1737</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1738"></a>1738</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1739"></a>1739</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1740"></a>1740</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1741"></a>1741</td> + <td></td> + <td></td> + <td> + <span class="code"># Needed for bootstrap, and allows defining only an optimized findnext method +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1742"></a>1742</td> + <td></td> + <td></td> + <td> + <span class="code">findfirst(testf::Function, A::Union{AbstractArray, AbstractString}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1743"></a>1743</td> + <td></td> + <td></td> + <td> + <span class="code"> findnext(testf, A, first(keys(A))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1744"></a>1744</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1745"></a>1745</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1746"></a>1746</td> + <td></td> + <td></td> + <td> + <span class="code"> findprev(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1747"></a>1747</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1748"></a>1748</td> + <td></td> + <td></td> + <td> + <span class="code">Find the previous index before or including `i` of a `true` element of `A`, +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1749"></a>1749</td> + <td></td> + <td></td> + <td> + <span class="code">or `nothing` if not found. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1750"></a>1750</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1751"></a>1751</td> + <td></td> + <td></td> + <td> + <span class="code">Indices are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1752"></a>1752</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1753"></a>1753</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1754"></a>1754</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1755"></a>1755</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1756"></a>1756</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false, false, true, true] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1757"></a>1757</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Bool,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1758"></a>1758</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1759"></a>1759</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1760"></a>1760</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1761"></a>1761</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1762"></a>1762</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1763"></a>1763</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(A, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1764"></a>1764</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1765"></a>1765</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1766"></a>1766</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(A, 1) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1767"></a>1767</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1768"></a>1768</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [false false; true true] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1769"></a>1769</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Bool,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1770"></a>1770</td> + <td></td> + <td></td> + <td> + <span class="code"> false false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1771"></a>1771</td> + <td></td> + <td></td> + <td> + <span class="code"> true true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1772"></a>1772</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1773"></a>1773</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(A, CartesianIndex(2, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1774"></a>1774</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1775"></a>1775</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1776"></a>1776</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1777"></a>1777</td> + <td></td> + <td></td> + <td> + <span class="code">function findprev(A, start) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1778"></a>1778</td> + <td></td> + <td></td> + <td> + <span class="code"> i = start +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1779"></a>1779</td> + <td></td> + <td></td> + <td> + <span class="code"> while i >= first(keys(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1780"></a>1780</td> + <td></td> + <td></td> + <td> + <span class="code"> A[i] && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1781"></a>1781</td> + <td></td> + <td></td> + <td> + <span class="code"> i = prevind(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1782"></a>1782</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1783"></a>1783</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1784"></a>1784</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1785"></a>1785</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1786"></a>1786</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1787"></a>1787</td> + <td></td> + <td></td> + <td> + <span class="code"> findlast(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1788"></a>1788</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1789"></a>1789</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index or key of the last `true` value in `A`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1790"></a>1790</td> + <td></td> + <td></td> + <td> + <span class="code">Return `nothing` if there is no `true` value in `A`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1791"></a>1791</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1792"></a>1792</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1793"></a>1793</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1794"></a>1794</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1795"></a>1795</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1796"></a>1796</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1797"></a>1797</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [true, false, true, false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1798"></a>1798</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Bool,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1799"></a>1799</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1800"></a>1800</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1801"></a>1801</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1802"></a>1802</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1803"></a>1803</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1804"></a>1804</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1805"></a>1805</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1806"></a>1806</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1807"></a>1807</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = falses(2,2); +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1808"></a>1808</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1809"></a>1809</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(A) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1810"></a>1810</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1811"></a>1811</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [true false; true false] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1812"></a>1812</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Bool,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1813"></a>1813</td> + <td></td> + <td></td> + <td> + <span class="code"> true false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1814"></a>1814</td> + <td></td> + <td></td> + <td> + <span class="code"> true false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1815"></a>1815</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1816"></a>1816</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1817"></a>1817</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1818"></a>1818</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1819"></a>1819</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1820"></a>1820</td> + <td></td> + <td></td> + <td> + <span class="code">function findlast(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1821"></a>1821</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i, a) in Iterators.reverse(pairs(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1822"></a>1822</td> + <td></td> + <td></td> + <td> + <span class="code"> if a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1823"></a>1823</td> + <td></td> + <td></td> + <td> + <span class="code"> return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1824"></a>1824</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1825"></a>1825</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1826"></a>1826</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1827"></a>1827</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1828"></a>1828</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1829"></a>1829</td> + <td></td> + <td></td> + <td> + <span class="code"># Needed for bootstrap, and allows defining only an optimized findprev method +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1830"></a>1830</td> + <td></td> + <td></td> + <td> + <span class="code">findlast(A::Union{AbstractArray, AbstractString}) = findprev(A, last(keys(A))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1831"></a>1831</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1832"></a>1832</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1833"></a>1833</td> + <td></td> + <td></td> + <td> + <span class="code"> findprev(predicate::Function, A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1834"></a>1834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1835"></a>1835</td> + <td></td> + <td></td> + <td> + <span class="code">Find the previous index before or including `i` of an element of `A` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1836"></a>1836</td> + <td></td> + <td></td> + <td> + <span class="code">for which `predicate` returns `true`, or `nothing` if not found. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1837"></a>1837</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1838"></a>1838</td> + <td></td> + <td></td> + <td> + <span class="code">Indices are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1839"></a>1839</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1840"></a>1840</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1841"></a>1841</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1842"></a>1842</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1843"></a>1843</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [4, 6, 1, 2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1844"></a>1844</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1845"></a>1845</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1846"></a>1846</td> + <td></td> + <td></td> + <td> + <span class="code"> 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1847"></a>1847</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1848"></a>1848</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1849"></a>1849</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1850"></a>1850</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(isodd, A, 1) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1851"></a>1851</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1852"></a>1852</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(isodd, A, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1853"></a>1853</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1854"></a>1854</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1855"></a>1855</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [4 6; 1 2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1856"></a>1856</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1857"></a>1857</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1858"></a>1858</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1859"></a>1859</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1860"></a>1860</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findprev(isodd, A, CartesianIndex(1, 2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1861"></a>1861</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1862"></a>1862</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1863"></a>1863</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1864"></a>1864</td> + <td></td> + <td></td> + <td> + <span class="code">function findprev(testf::Function, A, start) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1865"></a>1865</td> + <td></td> + <td></td> + <td> + <span class="code"> i = start +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1866"></a>1866</td> + <td></td> + <td></td> + <td> + <span class="code"> while i >= first(keys(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1867"></a>1867</td> + <td></td> + <td></td> + <td> + <span class="code"> testf(A[i]) && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1868"></a>1868</td> + <td></td> + <td></td> + <td> + <span class="code"> i = prevind(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1869"></a>1869</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1870"></a>1870</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1871"></a>1871</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1872"></a>1872</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1873"></a>1873</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1874"></a>1874</td> + <td></td> + <td></td> + <td> + <span class="code"> findlast(predicate::Function, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1875"></a>1875</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1876"></a>1876</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index or key of the last element of `A` for which `predicate` returns `true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1877"></a>1877</td> + <td></td> + <td></td> + <td> + <span class="code">Return `nothing` if there is no such element. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1878"></a>1878</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1879"></a>1879</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1880"></a>1880</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1881"></a>1881</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1882"></a>1882</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1883"></a>1883</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1884"></a>1884</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1, 2, 3, 4] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1885"></a>1885</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1886"></a>1886</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1887"></a>1887</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1888"></a>1888</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1889"></a>1889</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1890"></a>1890</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1891"></a>1891</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(isodd, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1892"></a>1892</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1893"></a>1893</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1894"></a>1894</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(x -> x > 5, A) # returns nothing, but not printed in the REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1895"></a>1895</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1896"></a>1896</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1 2; 3 4] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1897"></a>1897</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1898"></a>1898</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1899"></a>1899</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1900"></a>1900</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1901"></a>1901</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findlast(isodd, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1902"></a>1902</td> + <td></td> + <td></td> + <td> + <span class="code">CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1903"></a>1903</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1904"></a>1904</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1905"></a>1905</td> + <td></td> + <td></td> + <td> + <span class="code">function findlast(testf::Function, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1906"></a>1906</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i, a) in Iterators.reverse(pairs(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1907"></a>1907</td> + <td></td> + <td></td> + <td> + <span class="code"> testf(a) && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1908"></a>1908</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1909"></a>1909</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1910"></a>1910</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1911"></a>1911</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1912"></a>1912</td> + <td></td> + <td></td> + <td> + <span class="code"># Needed for bootstrap, and allows defining only an optimized findprev method +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1913"></a>1913</td> + <td></td> + <td></td> + <td> + <span class="code">findlast(testf::Function, A::Union{AbstractArray, AbstractString}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1914"></a>1914</td> + <td></td> + <td></td> + <td> + <span class="code"> findprev(testf, A, last(keys(A))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1915"></a>1915</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1916"></a>1916</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1917"></a>1917</td> + <td></td> + <td></td> + <td> + <span class="code"> findall(f::Function, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1918"></a>1918</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1919"></a>1919</td> + <td></td> + <td></td> + <td> + <span class="code">Return a vector `I` of the indices or keys of `A` where `f(A[I])` returns `true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1920"></a>1920</td> + <td></td> + <td></td> + <td> + <span class="code">If there are no such elements of `A`, return an empty array. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1921"></a>1921</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1922"></a>1922</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1923"></a>1923</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1924"></a>1924</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1925"></a>1925</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1926"></a>1926</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1927"></a>1927</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x = [1, 3, 4] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1928"></a>1928</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1929"></a>1929</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1930"></a>1930</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1931"></a>1931</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1932"></a>1932</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1933"></a>1933</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(isodd, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1934"></a>1934</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1935"></a>1935</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1936"></a>1936</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1937"></a>1937</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1938"></a>1938</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1 2 0; 3 4 0] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1939"></a>1939</td> + <td></td> + <td></td> + <td> + <span class="code">2×3 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1940"></a>1940</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 2 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1941"></a>1941</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 4 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1942"></a>1942</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(isodd, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1943"></a>1943</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{CartesianIndex{2},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1944"></a>1944</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1945"></a>1945</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1946"></a>1946</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1947"></a>1947</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(!iszero, A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1948"></a>1948</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{CartesianIndex{2},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1949"></a>1949</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1950"></a>1950</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1951"></a>1951</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(1, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1952"></a>1952</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(2, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1953"></a>1953</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1954"></a>1954</td> + <td></td> + <td></td> + <td> + <span class="code">julia> d = Dict(:A => 10, :B => -1, :C => 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1955"></a>1955</td> + <td></td> + <td></td> + <td> + <span class="code">Dict{Symbol,Int64} with 3 entries: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1956"></a>1956</td> + <td></td> + <td></td> + <td> + <span class="code"> :A => 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1957"></a>1957</td> + <td></td> + <td></td> + <td> + <span class="code"> :B => -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1958"></a>1958</td> + <td></td> + <td></td> + <td> + <span class="code"> :C => 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1959"></a>1959</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1960"></a>1960</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(x -> x >= 0, d) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1961"></a>1961</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Symbol,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1962"></a>1962</td> + <td></td> + <td></td> + <td> + <span class="code"> :A +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1963"></a>1963</td> + <td></td> + <td></td> + <td> + <span class="code"> :C +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1964"></a>1964</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1965"></a>1965</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1966"></a>1966</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1967"></a>1967</td> + <td></td> + <td></td> + <td> + <span class="code">findall(testf::Function, A) = collect(first(p) for p in pairs(A) if testf(last(p))) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1968"></a>1968</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1969"></a>1969</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1970"></a>1970</td> + <td></td> + <td></td> + <td> + <span class="code"> findall(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1971"></a>1971</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1972"></a>1972</td> + <td></td> + <td></td> + <td> + <span class="code">Return a vector `I` of the `true` indices or keys of `A`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1973"></a>1973</td> + <td></td> + <td></td> + <td> + <span class="code">If there are no such elements of `A`, return an empty array. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1974"></a>1974</td> + <td></td> + <td></td> + <td> + <span class="code">To search for other kinds of values, pass a predicate as the first argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1975"></a>1975</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1976"></a>1976</td> + <td></td> + <td></td> + <td> + <span class="code">Indices or keys are of the same type as those returned by [`keys(A)`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1977"></a>1977</td> + <td></td> + <td></td> + <td> + <span class="code">and [`pairs(A)`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1978"></a>1978</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1979"></a>1979</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1980"></a>1980</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1981"></a>1981</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [true, false, false, true] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1982"></a>1982</td> + <td></td> + <td></td> + <td> + <span class="code">4-element Array{Bool,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1983"></a>1983</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1984"></a>1984</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1985"></a>1985</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1986"></a>1986</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1987"></a>1987</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1988"></a>1988</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1989"></a>1989</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1990"></a>1990</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1991"></a>1991</td> + <td></td> + <td></td> + <td> + <span class="code"> 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1992"></a>1992</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1993"></a>1993</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [true false; false true] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1994"></a>1994</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Bool,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1995"></a>1995</td> + <td></td> + <td></td> + <td> + <span class="code"> true false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1996"></a>1996</td> + <td></td> + <td></td> + <td> + <span class="code"> false true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1997"></a>1997</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1998"></a>1998</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-1999"></a>1999</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{CartesianIndex{2},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2000"></a>2000</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2001"></a>2001</td> + <td></td> + <td></td> + <td> + <span class="code"> CartesianIndex(2, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2002"></a>2002</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2003"></a>2003</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findall(falses(3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2004"></a>2004</td> + <td></td> + <td></td> + <td> + <span class="code">0-element Array{Int64,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2005"></a>2005</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2006"></a>2006</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2007"></a>2007</td> + <td></td> + <td></td> + <td> + <span class="code">function findall(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2008"></a>2008</td> + <td></td> + <td></td> + <td> + <span class="code"> collect(first(p) for p in pairs(A) if last(p)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2009"></a>2009</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2010"></a>2010</td> + <td></td> + <td></td> + <td> + <span class="code"># Allocating result upfront is faster (possible only when collection can be iterated twice) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2011"></a>2011</td> + <td></td> + <td></td> + <td> + <span class="code">function findall(A::AbstractArray{Bool}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2012"></a>2012</td> + <td></td> + <td></td> + <td> + <span class="code"> n = count(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2013"></a>2013</td> + <td></td> + <td></td> + <td> + <span class="code"> I = Vector{eltype(keys(A))}(undef, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2014"></a>2014</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2015"></a>2015</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i,a) in pairs(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2016"></a>2016</td> + <td></td> + <td></td> + <td> + <span class="code"> if a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2017"></a>2017</td> + <td></td> + <td></td> + <td> + <span class="code"> I[cnt] = i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2018"></a>2018</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2019"></a>2019</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2020"></a>2020</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2021"></a>2021</td> + <td></td> + <td></td> + <td> + <span class="code"> I +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2022"></a>2022</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2023"></a>2023</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2024"></a>2024</td> + <td></td> + <td></td> + <td> + <span class="code">findall(x::Bool) = x ? [1] : Vector{Int}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2025"></a>2025</td> + <td></td> + <td></td> + <td> + <span class="code">findall(testf::Function, x::Number) = testf(x) ? [1] : Vector{Int}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2026"></a>2026</td> + <td></td> + <td></td> + <td> + <span class="code">findall(p::Fix2{typeof(in)}, x::Number) = x in p.x ? [1] : Vector{Int}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2027"></a>2027</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2028"></a>2028</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2029"></a>2029</td> + <td></td> + <td></td> + <td> + <span class="code"> findmax(itr) -> (x, index) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2030"></a>2030</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2031"></a>2031</td> + <td></td> + <td></td> + <td> + <span class="code">Return the maximum element of the collection `itr` and its index. If there are multiple +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2032"></a>2032</td> + <td></td> + <td></td> + <td> + <span class="code">maximal elements, then the first one will be returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2033"></a>2033</td> + <td></td> + <td></td> + <td> + <span class="code">If any data element is `NaN`, this element is returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2034"></a>2034</td> + <td></td> + <td></td> + <td> + <span class="code">The result is in line with `max`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2035"></a>2035</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2036"></a>2036</td> + <td></td> + <td></td> + <td> + <span class="code">The collection must not be empty. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2037"></a>2037</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2038"></a>2038</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2039"></a>2039</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2040"></a>2040</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmax([8,0.1,-9,pi]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2041"></a>2041</td> + <td></td> + <td></td> + <td> + <span class="code">(8.0, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2042"></a>2042</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2043"></a>2043</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmax([1,7,7,6]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2044"></a>2044</td> + <td></td> + <td></td> + <td> + <span class="code">(7, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2045"></a>2045</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2046"></a>2046</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmax([1,7,7,NaN]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2047"></a>2047</td> + <td></td> + <td></td> + <td> + <span class="code">(NaN, 4) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2048"></a>2048</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2049"></a>2049</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2050"></a>2050</td> + <td></td> + <td></td> + <td> + <span class="code">findmax(a) = _findmax(a, :) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2051"></a>2051</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2052"></a>2052</td> + <td></td> + <td></td> + <td> + <span class="code">function _findmax(a, ::Colon) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2053"></a>2053</td> + <td></td> + <td></td> + <td> + <span class="code"> p = pairs(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2054"></a>2054</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2055"></a>2055</td> + <td></td> + <td></td> + <td> + <span class="code"> if y === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2056"></a>2056</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("collection must be non-empty")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2057"></a>2057</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2058"></a>2058</td> + <td></td> + <td></td> + <td> + <span class="code"> (mi, m), s = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2059"></a>2059</td> + <td></td> + <td></td> + <td> + <span class="code"> i = mi +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2060"></a>2060</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2061"></a>2061</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(p, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2062"></a>2062</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2063"></a>2063</td> + <td></td> + <td></td> + <td> + <span class="code"> m != m && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2064"></a>2064</td> + <td></td> + <td></td> + <td> + <span class="code"> (i, ai), s = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2065"></a>2065</td> + <td></td> + <td></td> + <td> + <span class="code"> if ai != ai || isless(m, ai) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2066"></a>2066</td> + <td></td> + <td></td> + <td> + <span class="code"> m = ai +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2067"></a>2067</td> + <td></td> + <td></td> + <td> + <span class="code"> mi = i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2068"></a>2068</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2069"></a>2069</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2070"></a>2070</td> + <td></td> + <td></td> + <td> + <span class="code"> return (m, mi) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2071"></a>2071</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2072"></a>2072</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2073"></a>2073</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2074"></a>2074</td> + <td></td> + <td></td> + <td> + <span class="code"> findmin(itr) -> (x, index) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2075"></a>2075</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2076"></a>2076</td> + <td></td> + <td></td> + <td> + <span class="code">Return the minimum element of the collection `itr` and its index. If there are multiple +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2077"></a>2077</td> + <td></td> + <td></td> + <td> + <span class="code">minimal elements, then the first one will be returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2078"></a>2078</td> + <td></td> + <td></td> + <td> + <span class="code">If any data element is `NaN`, this element is returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2079"></a>2079</td> + <td></td> + <td></td> + <td> + <span class="code">The result is in line with `min`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2080"></a>2080</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2081"></a>2081</td> + <td></td> + <td></td> + <td> + <span class="code">The collection must not be empty. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2082"></a>2082</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2083"></a>2083</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2084"></a>2084</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2085"></a>2085</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmin([8,0.1,-9,pi]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2086"></a>2086</td> + <td></td> + <td></td> + <td> + <span class="code">(-9.0, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2087"></a>2087</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2088"></a>2088</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmin([7,1,1,6]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2089"></a>2089</td> + <td></td> + <td></td> + <td> + <span class="code">(1, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2090"></a>2090</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2091"></a>2091</td> + <td></td> + <td></td> + <td> + <span class="code">julia> findmin([7,1,1,NaN]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2092"></a>2092</td> + <td></td> + <td></td> + <td> + <span class="code">(NaN, 4) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2093"></a>2093</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2094"></a>2094</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2095"></a>2095</td> + <td></td> + <td></td> + <td> + <span class="code">findmin(a) = _findmin(a, :) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2096"></a>2096</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2097"></a>2097</td> + <td></td> + <td></td> + <td> + <span class="code">function _findmin(a, ::Colon) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2098"></a>2098</td> + <td></td> + <td></td> + <td> + <span class="code"> p = pairs(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2099"></a>2099</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2100"></a>2100</td> + <td></td> + <td></td> + <td> + <span class="code"> if y === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2101"></a>2101</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("collection must be non-empty")) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2102"></a>2102</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2103"></a>2103</td> + <td></td> + <td></td> + <td> + <span class="code"> (mi, m), s = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2104"></a>2104</td> + <td></td> + <td></td> + <td> + <span class="code"> i = mi +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2105"></a>2105</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2106"></a>2106</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(p, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2107"></a>2107</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2108"></a>2108</td> + <td></td> + <td></td> + <td> + <span class="code"> m != m && break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2109"></a>2109</td> + <td></td> + <td></td> + <td> + <span class="code"> (i, ai), s = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2110"></a>2110</td> + <td></td> + <td></td> + <td> + <span class="code"> if ai != ai || isless(ai, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2111"></a>2111</td> + <td></td> + <td></td> + <td> + <span class="code"> m = ai +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2112"></a>2112</td> + <td></td> + <td></td> + <td> + <span class="code"> mi = i +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2113"></a>2113</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2114"></a>2114</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2115"></a>2115</td> + <td></td> + <td></td> + <td> + <span class="code"> return (m, mi) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2116"></a>2116</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2117"></a>2117</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2118"></a>2118</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2119"></a>2119</td> + <td></td> + <td></td> + <td> + <span class="code"> argmax(itr) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2120"></a>2120</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2121"></a>2121</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index of the maximum element in a collection. If there are multiple maximal +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2122"></a>2122</td> + <td></td> + <td></td> + <td> + <span class="code">elements, then the first one will be returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2123"></a>2123</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2124"></a>2124</td> + <td></td> + <td></td> + <td> + <span class="code">The collection must not be empty. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2125"></a>2125</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2126"></a>2126</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2127"></a>2127</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2128"></a>2128</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmax([8,0.1,-9,pi]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2129"></a>2129</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2130"></a>2130</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2131"></a>2131</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmax([1,7,7,6]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2132"></a>2132</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2133"></a>2133</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2134"></a>2134</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmax([1,7,7,NaN]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2135"></a>2135</td> + <td></td> + <td></td> + <td> + <span class="code">4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2136"></a>2136</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2137"></a>2137</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2138"></a>2138</td> + <td></td> + <td></td> + <td> + <span class="code">argmax(a) = findmax(a)[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2139"></a>2139</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2140"></a>2140</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2141"></a>2141</td> + <td></td> + <td></td> + <td> + <span class="code"> argmin(itr) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2142"></a>2142</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2143"></a>2143</td> + <td></td> + <td></td> + <td> + <span class="code">Return the index of the minimum element in a collection. If there are multiple minimal +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2144"></a>2144</td> + <td></td> + <td></td> + <td> + <span class="code">elements, then the first one will be returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2145"></a>2145</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2146"></a>2146</td> + <td></td> + <td></td> + <td> + <span class="code">The collection must not be empty. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2147"></a>2147</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2148"></a>2148</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2149"></a>2149</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2150"></a>2150</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmin([8,0.1,-9,pi]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2151"></a>2151</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2152"></a>2152</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2153"></a>2153</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmin([7,1,1,6]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2154"></a>2154</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2155"></a>2155</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2156"></a>2156</td> + <td></td> + <td></td> + <td> + <span class="code">julia> argmin([7,1,1,NaN]) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2157"></a>2157</td> + <td></td> + <td></td> + <td> + <span class="code">4 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2158"></a>2158</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2159"></a>2159</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2160"></a>2160</td> + <td></td> + <td></td> + <td> + <span class="code">argmin(a) = findmin(a)[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2161"></a>2161</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2162"></a>2162</td> + <td></td> + <td></td> + <td> + <span class="code"># similar to Matlab's ismember +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2163"></a>2163</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2164"></a>2164</td> + <td></td> + <td></td> + <td> + <span class="code"> indexin(a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2165"></a>2165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2166"></a>2166</td> + <td></td> + <td></td> + <td> + <span class="code">Return an array containing the first index in `b` for +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2167"></a>2167</td> + <td></td> + <td></td> + <td> + <span class="code">each value in `a` that is a member of `b`. The output +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2168"></a>2168</td> + <td></td> + <td></td> + <td> + <span class="code">array contains `nothing` wherever `a` is not a member of `b`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2169"></a>2169</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2170"></a>2170</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2171"></a>2171</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2172"></a>2172</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = ['a', 'b', 'c', 'b', 'd', 'a']; +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2173"></a>2173</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2174"></a>2174</td> + <td></td> + <td></td> + <td> + <span class="code">julia> b = ['a', 'b', 'c']; +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2175"></a>2175</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2176"></a>2176</td> + <td></td> + <td></td> + <td> + <span class="code">julia> indexin(a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2177"></a>2177</td> + <td></td> + <td></td> + <td> + <span class="code">6-element Array{Union{Nothing, Int64},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2178"></a>2178</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2179"></a>2179</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2180"></a>2180</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2181"></a>2181</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2182"></a>2182</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2183"></a>2183</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2184"></a>2184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2185"></a>2185</td> + <td></td> + <td></td> + <td> + <span class="code">julia> indexin(b, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2186"></a>2186</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Union{Nothing, Int64},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2187"></a>2187</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2188"></a>2188</td> + <td></td> + <td></td> + <td> + <span class="code"> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2189"></a>2189</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2190"></a>2190</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2191"></a>2191</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2192"></a>2192</td> + <td></td> + <td></td> + <td> + <span class="code">function indexin(a, b::AbstractArray) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2193"></a>2193</td> + <td></td> + <td></td> + <td> + <span class="code"> inds = keys(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2194"></a>2194</td> + <td></td> + <td></td> + <td> + <span class="code"> bdict = Dict{eltype(b),eltype(inds)}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2195"></a>2195</td> + <td></td> + <td></td> + <td> + <span class="code"> for (val, ind) in zip(b, inds) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2196"></a>2196</td> + <td></td> + <td></td> + <td> + <span class="code"> get!(bdict, val, ind) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2197"></a>2197</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2198"></a>2198</td> + <td></td> + <td></td> + <td> + <span class="code"> return Union{eltype(inds), Nothing}[ +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2199"></a>2199</td> + <td></td> + <td></td> + <td> + <span class="code"> get(bdict, i, nothing) for i in a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2200"></a>2200</td> + <td></td> + <td></td> + <td> + <span class="code"> ] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2201"></a>2201</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2202"></a>2202</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2203"></a>2203</td> + <td></td> + <td></td> + <td> + <span class="code">function _findin(a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2204"></a>2204</td> + <td></td> + <td></td> + <td> + <span class="code"> ind = Int[] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2205"></a>2205</td> + <td></td> + <td></td> + <td> + <span class="code"> bset = Set(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2206"></a>2206</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for (i,ai) in enumerate(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2207"></a>2207</td> + <td></td> + <td></td> + <td> + <span class="code"> ai in bset && push!(ind, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2208"></a>2208</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2209"></a>2209</td> + <td></td> + <td></td> + <td> + <span class="code"> ind +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2210"></a>2210</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2211"></a>2211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2212"></a>2212</td> + <td></td> + <td></td> + <td> + <span class="code"># If two collections are already sorted, _findin can be computed with +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2213"></a>2213</td> + <td></td> + <td></td> + <td> + <span class="code"># a single traversal of the two collections. This is much faster than +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2214"></a>2214</td> + <td></td> + <td></td> + <td> + <span class="code"># using a hash table (although it has the same complexity). +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2215"></a>2215</td> + <td></td> + <td></td> + <td> + <span class="code">function _sortedfindin(v, w) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2216"></a>2216</td> + <td></td> + <td></td> + <td> + <span class="code"> viter, witer = eachindex(v), eachindex(w) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2217"></a>2217</td> + <td></td> + <td></td> + <td> + <span class="code"> out = eltype(viter)[] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2218"></a>2218</td> + <td></td> + <td></td> + <td> + <span class="code"> vy, wy = iterate(viter), iterate(witer) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2219"></a>2219</td> + <td></td> + <td></td> + <td> + <span class="code"> if vy === nothing || wy === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2220"></a>2220</td> + <td></td> + <td></td> + <td> + <span class="code"> return out +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2221"></a>2221</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2222"></a>2222</td> + <td></td> + <td></td> + <td> + <span class="code"> viteri, i = vy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2223"></a>2223</td> + <td></td> + <td></td> + <td> + <span class="code"> witerj, j = wy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2224"></a>2224</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2225"></a>2225</td> + <td></td> + <td></td> + <td> + <span class="code"> vi, wj = v[viteri], w[witerj] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2226"></a>2226</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2227"></a>2227</td> + <td></td> + <td></td> + <td> + <span class="code"> if isless(vi, wj) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2228"></a>2228</td> + <td></td> + <td></td> + <td> + <span class="code"> vy = iterate(viter, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2229"></a>2229</td> + <td></td> + <td></td> + <td> + <span class="code"> if vy === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2230"></a>2230</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2231"></a>2231</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2232"></a>2232</td> + <td></td> + <td></td> + <td> + <span class="code"> viteri, i = vy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2233"></a>2233</td> + <td></td> + <td></td> + <td> + <span class="code"> vi = v[viteri] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2234"></a>2234</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isless(wj, vi) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2235"></a>2235</td> + <td></td> + <td></td> + <td> + <span class="code"> wy = iterate(witer, j) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2236"></a>2236</td> + <td></td> + <td></td> + <td> + <span class="code"> if wy === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2237"></a>2237</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2238"></a>2238</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2239"></a>2239</td> + <td></td> + <td></td> + <td> + <span class="code"> witerj, j = wy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2240"></a>2240</td> + <td></td> + <td></td> + <td> + <span class="code"> wj = w[witerj] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2241"></a>2241</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2242"></a>2242</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(out, viteri) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2243"></a>2243</td> + <td></td> + <td></td> + <td> + <span class="code"> vy = iterate(viter, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2244"></a>2244</td> + <td></td> + <td></td> + <td> + <span class="code"> if vy === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2245"></a>2245</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2246"></a>2246</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2247"></a>2247</td> + <td></td> + <td></td> + <td> + <span class="code"> # We only increment the v iterator because v can have +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2248"></a>2248</td> + <td></td> + <td></td> + <td> + <span class="code"> # repeated matches to a single value in w +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2249"></a>2249</td> + <td></td> + <td></td> + <td> + <span class="code"> viteri, i = vy +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2250"></a>2250</td> + <td></td> + <td></td> + <td> + <span class="code"> vi = v[viteri] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2251"></a>2251</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2252"></a>2252</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2253"></a>2253</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2254"></a>2254</td> + <td></td> + <td></td> + <td> + <span class="code"> return out +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2255"></a>2255</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2256"></a>2256</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2257"></a>2257</td> + <td></td> + <td></td> + <td> + <span class="code">function findall(pred::Fix2{typeof(in),<:Union{Array{<:Real},Real}}, x::Array{<:Real}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2258"></a>2258</td> + <td></td> + <td></td> + <td> + <span class="code"> if issorted(x, Sort.Forward) && issorted(pred.x, Sort.Forward) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2259"></a>2259</td> + <td></td> + <td></td> + <td> + <span class="code"> return _sortedfindin(x, pred.x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2260"></a>2260</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2261"></a>2261</td> + <td></td> + <td></td> + <td> + <span class="code"> return _findin(x, pred.x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2262"></a>2262</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2263"></a>2263</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2264"></a>2264</td> + <td></td> + <td></td> + <td> + <span class="code"># issorted fails for some element types so the method above has to be restricted +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2265"></a>2265</td> + <td></td> + <td></td> + <td> + <span class="code"># to element with isless/< defined. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2266"></a>2266</td> + <td></td> + <td></td> + <td> + <span class="code">findall(pred::Fix2{typeof(in)}, x::Union{AbstractArray, Tuple}) = _findin(x, pred.x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2267"></a>2267</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2268"></a>2268</td> + <td></td> + <td></td> + <td> + <span class="code"># Copying subregions +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2269"></a>2269</td> + <td></td> + <td></td> + <td> + <span class="code">function indcopy(sz::Dims, I::Vector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2270"></a>2270</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2271"></a>2271</td> + <td></td> + <td></td> + <td> + <span class="code"> s = sz[n] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2272"></a>2272</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = n+1:length(sz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2273"></a>2273</td> + <td></td> + <td></td> + <td> + <span class="code"> s *= sz[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2274"></a>2274</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2275"></a>2275</td> + <td></td> + <td></td> + <td> + <span class="code"> dst = eltype(I)[_findin(I[i], i < n ? (1:sz[i]) : (1:s)) for i = 1:n] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2276"></a>2276</td> + <td></td> + <td></td> + <td> + <span class="code"> src = eltype(I)[I[i][_findin(I[i], i < n ? (1:sz[i]) : (1:s))] for i = 1:n] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2277"></a>2277</td> + <td></td> + <td></td> + <td> + <span class="code"> dst, src +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2278"></a>2278</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2279"></a>2279</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2280"></a>2280</td> + <td></td> + <td></td> + <td> + <span class="code">function indcopy(sz::Dims, I::Tuple{Vararg{RangeIndex}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2281"></a>2281</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2282"></a>2282</td> + <td></td> + <td></td> + <td> + <span class="code"> s = sz[n] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2283"></a>2283</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = n+1:length(sz) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2284"></a>2284</td> + <td></td> + <td></td> + <td> + <span class="code"> s *= sz[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2285"></a>2285</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2286"></a>2286</td> + <td></td> + <td></td> + <td> + <span class="code"> dst::typeof(I) = ntuple(i-> _findin(I[i], i < n ? (1:sz[i]) : (1:s)), n)::typeof(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2287"></a>2287</td> + <td></td> + <td></td> + <td> + <span class="code"> src::typeof(I) = ntuple(i-> I[i][_findin(I[i], i < n ? (1:sz[i]) : (1:s))], n)::typeof(I) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2288"></a>2288</td> + <td></td> + <td></td> + <td> + <span class="code"> dst, src +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2289"></a>2289</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2290"></a>2290</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2291"></a>2291</td> + <td></td> + <td></td> + <td> + <span class="code">## Filter ## +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2292"></a>2292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2293"></a>2293</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2294"></a>2294</td> + <td></td> + <td></td> + <td> + <span class="code"> filter(f, a::AbstractArray) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2295"></a>2295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2296"></a>2296</td> + <td></td> + <td></td> + <td> + <span class="code">Return a copy of `a`, removing elements for which `f` is `false`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2297"></a>2297</td> + <td></td> + <td></td> + <td> + <span class="code">The function `f` is passed one argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2298"></a>2298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2299"></a>2299</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2300"></a>2300</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2301"></a>2301</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = 1:10 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2302"></a>2302</td> + <td></td> + <td></td> + <td> + <span class="code">1:10 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2303"></a>2303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2304"></a>2304</td> + <td></td> + <td></td> + <td> + <span class="code">julia> filter(isodd, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2305"></a>2305</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2306"></a>2306</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2307"></a>2307</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2308"></a>2308</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2309"></a>2309</td> + <td></td> + <td></td> + <td> + <span class="code"> 7 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2310"></a>2310</td> + <td></td> + <td></td> + <td> + <span class="code"> 9 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2311"></a>2311</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2312"></a>2312</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2313"></a>2313</td> + <td></td> + <td></td> + <td> + <span class="code">filter(f, As::AbstractArray) = As[map(f, As)::AbstractArray{Bool}] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2314"></a>2314</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2315"></a>2315</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2316"></a>2316</td> + <td></td> + <td></td> + <td> + <span class="code"> filter!(f, a::AbstractVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2317"></a>2317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2318"></a>2318</td> + <td></td> + <td></td> + <td> + <span class="code">Update `a`, removing elements for which `f` is `false`. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2319"></a>2319</td> + <td></td> + <td></td> + <td> + <span class="code">The function `f` is passed one argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2320"></a>2320</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2321"></a>2321</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2322"></a>2322</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2323"></a>2323</td> + <td></td> + <td></td> + <td> + <span class="code">julia> filter!(isodd, Vector(1:10)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2324"></a>2324</td> + <td></td> + <td></td> + <td> + <span class="code">5-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2325"></a>2325</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2326"></a>2326</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2327"></a>2327</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2328"></a>2328</td> + <td></td> + <td></td> + <td> + <span class="code"> 7 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2329"></a>2329</td> + <td></td> + <td></td> + <td> + <span class="code"> 9 +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2330"></a>2330</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2331"></a>2331</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2332"></a>2332</td> + <td></td> + <td></td> + <td> + <span class="code">function filter!(f, a::AbstractVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2333"></a>2333</td> + <td></td> + <td></td> + <td> + <span class="code"> idx = eachindex(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2334"></a>2334</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2335"></a>2335</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2336"></a>2336</td> + <td></td> + <td></td> + <td> + <span class="code"> i, state = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2337"></a>2337</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2338"></a>2338</td> + <td></td> + <td></td> + <td> + <span class="code"> for acurr in a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2339"></a>2339</td> + <td></td> + <td></td> + <td> + <span class="code"> if f(acurr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2340"></a>2340</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = acurr +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2341"></a>2341</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(idx, state) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2342"></a>2342</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && (i += 1; break) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2343"></a>2343</td> + <td></td> + <td></td> + <td> + <span class="code"> i, state = y +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2344"></a>2344</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2345"></a>2345</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2346"></a>2346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2347"></a>2347</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(a, i:last(idx)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2348"></a>2348</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2349"></a>2349</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2350"></a>2350</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2351"></a>2351</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2352"></a>2352</td> + <td></td> + <td></td> + <td> + <span class="code">filter(f, a::Vector) = mapfilter(f, push!, a, empty(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2353"></a>2353</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2354"></a>2354</td> + <td></td> + <td></td> + <td> + <span class="code"># set-like operators for vectors +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2355"></a>2355</td> + <td></td> + <td></td> + <td> + <span class="code"># These are moderately efficient, preserve order, and remove dupes. +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2356"></a>2356</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2357"></a>2357</td> + <td></td> + <td></td> + <td> + <span class="code">_unique_filter!(pred, update!, state) = function (x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2358"></a>2358</td> + <td></td> + <td></td> + <td> + <span class="code"> if pred(x, state) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2359"></a>2359</td> + <td></td> + <td></td> + <td> + <span class="code"> update!(state, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2360"></a>2360</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2361"></a>2361</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2362"></a>2362</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2363"></a>2363</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2364"></a>2364</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2365"></a>2365</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2366"></a>2366</td> + <td></td> + <td></td> + <td> + <span class="code">_grow_filter!(seen) = _unique_filter!(∉, push!, seen) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2367"></a>2367</td> + <td></td> + <td></td> + <td> + <span class="code">_shrink_filter!(keep) = _unique_filter!(∈, pop!, keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2368"></a>2368</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2369"></a>2369</td> + <td></td> + <td></td> + <td> + <span class="code">function _grow!(pred!, v::AbstractVector, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2370"></a>2370</td> + <td></td> + <td></td> + <td> + <span class="code"> filter!(pred!, v) # uniquify v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2371"></a>2371</td> + <td></td> + <td></td> + <td> + <span class="code"> for itr in itrs +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2372"></a>2372</td> + <td></td> + <td></td> + <td> + <span class="code"> mapfilter(pred!, push!, itr, v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2373"></a>2373</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2374"></a>2374</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2375"></a>2375</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2376"></a>2376</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2377"></a>2377</td> + <td></td> + <td></td> + <td> + <span class="code">union!(v::AbstractVector{T}, itrs...) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2378"></a>2378</td> + <td></td> + <td></td> + <td> + <span class="code"> _grow!(_grow_filter!(sizehint!(Set{T}(), length(v))), v, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2379"></a>2379</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2380"></a>2380</td> + <td></td> + <td></td> + <td> + <span class="code">symdiff!(v::AbstractVector{T}, itrs...) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2381"></a>2381</td> + <td></td> + <td></td> + <td> + <span class="code"> _grow!(_shrink_filter!(symdiff!(Set{T}(), v, itrs...)), v, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2382"></a>2382</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2383"></a>2383</td> + <td></td> + <td></td> + <td> + <span class="code">function _shrink!(shrinker!, v::AbstractVector, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2384"></a>2384</td> + <td></td> + <td></td> + <td> + <span class="code"> seen = Set{eltype(v)}() +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2385"></a>2385</td> + <td></td> + <td></td> + <td> + <span class="code"> filter!(_grow_filter!(seen), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2386"></a>2386</td> + <td></td> + <td></td> + <td> + <span class="code"> shrinker!(seen, itrs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2387"></a>2387</td> + <td></td> + <td></td> + <td> + <span class="code"> filter!(_in(seen), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2388"></a>2388</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2389"></a>2389</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2390"></a>2390</td> + <td></td> + <td></td> + <td> + <span class="code">intersect!(v::AbstractVector, itrs...) = _shrink!(intersect!, v, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2391"></a>2391</td> + <td></td> + <td></td> + <td> + <span class="code">setdiff!( v::AbstractVector, itrs...) = _shrink!(setdiff!, v, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2392"></a>2392</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2393"></a>2393</td> + <td></td> + <td></td> + <td> + <span class="code">vectorfilter(f, v::AbstractVector) = filter(f, v) # TODO: do we want this special case? +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2394"></a>2394</td> + <td></td> + <td></td> + <td> + <span class="code">vectorfilter(f, v) = [x for x in v if f(x)] +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2395"></a>2395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2396"></a>2396</td> + <td></td> + <td></td> + <td> + <span class="code">function _shrink(shrinker!, itr, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2397"></a>2397</td> + <td></td> + <td></td> + <td> + <span class="code"> keep = shrinker!(Set(itr), itrs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2398"></a>2398</td> + <td></td> + <td></td> + <td> + <span class="code"> vectorfilter(_shrink_filter!(keep), itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2399"></a>2399</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2400"></a>2400</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2401"></a>2401</td> + <td></td> + <td></td> + <td> + <span class="code">intersect(itr, itrs...) = _shrink(intersect!, itr, itrs) +</span> + </td> + </tr> + + <tr> + <td><a name="Larray-jl-e331915c4fb281d94775-line.html-2402"></a>2402</td> + <td></td> + <td></td> + <td> + <span class="code">setdiff( itr, itrs...) = _shrink(setdiff!, itr, itrs) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/bignums-jl-e031ee9c77e42cd3aafb-line.html b/profiling/statprof/bignums-jl-e031ee9c77e42cd3aafb-line.html new file mode 100644 index 0000000000000000000000000000000000000000..3694c581cea3a9b3988b0a5ae7256b8d5e61972b --- /dev/null +++ b/profiling/statprof/bignums-jl-e031ee9c77e42cd3aafb-line.html @@ -0,0 +1,4987 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia, but is derived from +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"># https://github.com/google/double-conversion which has the following license +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"># Copyright 2006-2014, the V8 project authors. All rights reserved. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># Redistribution and use in source and binary forms, with or without +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"># modification, are permitted provided that the following conditions are +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"># met: +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions of source code must retain the above copyright +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"># notice, this list of conditions and the following disclaimer. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions in binary form must reproduce the above +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"># copyright notice, this list of conditions and the following +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"># disclaimer in the documentation and/or other materials provided +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"># with the distribution. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"># * Neither the name of Google Inc. nor the names of its +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"># contributors may be used to endorse or promote products derived +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"># from this software without specific prior written permission. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"># THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"># "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"># SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"># DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"># THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"># (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"># OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">module Bignums +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">import Base: ==, < +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">export Bignum +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">const kMaxSignificantBits = 3584 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">const Chunk = UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">const DoubleChunk = UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">const kChunkSize = sizeof(Chunk) * 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">const kDoubleChunkSize = sizeof(DoubleChunk) * 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"># With bigit size of 28 we loose some bits, but a double still fits easily +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"># into two chunks, and more importantly we can use the Comba multiplication. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">const kBigitSize = 28 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code">const kBigitMask = Chunk((1 << kBigitSize) - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"># Every instance allocates kBigitLength chunks on the stack. Bignums cannot +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"># grow. There are no checks if the stack-allocated space is sufficient. +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">const kBigitCapacity = div(kMaxSignificantBits, kBigitSize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct Bignum +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> bigits::Vector{UInt32} +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> used_digits::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> exponent::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> function Bignum() +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> bigits = Vector{UInt32}(undef, kBigitCapacity) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i = 1:kBigitCapacity +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> bigits[i] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> new(bigits,0,0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">==(a::Bignum,b::Bignum) = compare(a,b) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"><(a::Bignum,b::Bignum) = compare(a,b) < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">times10!(x::Bignum) = multiplybyuint32!(x,UInt32(10)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">plusequal(a,b,c) = pluscompare(a,b,c) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">pluslessequal(a,b,c) = pluscompare(a,b,c) <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">plusless(a,b,c) = pluscompare(a,b,c) < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">lessequal(a::Bignum,b::Bignum) = compare(a,b) <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">less(a::Bignum,b::Bignum) = compare(a,b) < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">bigitlength(x::Bignum) = x.used_digits + x.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">bitsize(value) = 8 * sizeof(value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">function zero!(x::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds x.bigits[i] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> x.exponent = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">function clamp!(x::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds while (x.used_digits > 0 && x.bigits[x.used_digits] == 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits == 0 && (x.exponent = 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">isclamped(x::Bignum) = x.used_digits == 0 || x.bigits[x.used_digits] != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">function align!(x::Bignum,other::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds if x.exponent > other.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> zero_digits = x.exponent - other.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = x.used_digits:-1:1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i + zero_digits] = x.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:zero_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits += zero_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> x.exponent -= zero_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">function bigitshiftleft!(x::Bignum,shift_amount) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> carry::UInt32 = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> new_carry::Chunk = x.bigits[i] >> (kBigitSize - shift_amount) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = ((x.bigits[i] << shift_amount) + carry) & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> carry = new_carry +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> if carry != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[x.used_digits+1] = carry +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">function subtracttimes!(x::Bignum,other::Bignum,factor) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> if factor < 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:factor +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> subtractbignum!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow::Chunk = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> exponent_diff = other.exponent - x.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:other.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> product::DoubleChunk = DoubleChunk(factor) * other.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> remove::DoubleChunk = borrow + product +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> difference::Chunk = (x.bigits[i+exponent_diff] - (remove & kBigitMask)) % Chunk +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i+exponent_diff] = difference & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = ((difference >> (kChunkSize - 1)) + (remove >> kBigitSize)) % Chunk +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = (other.used_digits + exponent_diff + 1):x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> difference::Chunk = x.bigits[i] - borrow +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = difference & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = difference >> (kChunkSize - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> clamp!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">function assignuint16!(x::Bignum,value::UInt16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> zero!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> value == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[1] = value +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code">const kUInt64Size = 64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code">function assignuint64!(x::Bignum,value::UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> zero!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> value == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> needed_bigits = div(kUInt64Size,kBigitSize) + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i = 1:needed_bigits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = value & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> value >>= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = needed_bigits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> clamp!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">function assignbignum!(x::Bignum,other::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> x.exponent = other.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:other.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = other.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = (other.used_digits+1):x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = other.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">function adduint64!(x::Bignum,operand::UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> operand == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> other = Bignum() +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> assignuint64!(other,operand) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> addbignum!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">function addbignum!(x::Bignum,other::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> align!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> carry::Chunk = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_pos = other.exponent - x.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds for i = 1:other.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> sum::Chunk = x.bigits[bigit_pos+1] + other.bigits[i] + carry +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[bigit_pos+1] = sum & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> carry = sum >> kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_pos += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds while carry != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> sum = x.bigits[bigit_pos+1] + carry +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[bigit_pos+1] = sum & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> carry = sum >> kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_pos += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = max(bigit_pos,x.used_digits) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">function subtractbignum!(x::Bignum,other::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> align!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> offset = other.exponent - x.exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = Chunk(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:other.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> difference = x.bigits[i+offset] - other.bigits[i] - borrow +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i+offset] = difference & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = difference >> (kChunkSize - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> i = other.used_digits+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> while borrow != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> difference = x.bigits[i+offset] - borrow +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i+offset] = difference & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = difference >> (kChunkSize - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> i += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> clamp!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">function shiftleft!(x::Bignum,shift_amount) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> x.exponent += div(shift_amount,kBigitSize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> local_shift = shift_amount % kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> bigitshiftleft!(x,local_shift) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">function multiplybyuint32!(x::Bignum,factor::UInt32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> factor == 1 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> if factor == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> zero!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> carry::DoubleChunk = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> product::DoubleChunk = (factor % DoubleChunk) * x.bigits[i] + carry +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = (product & kBigitMask) % Chunk +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> carry = product >> kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> while carry != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[x.used_digits+1] = carry & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> carry >>= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code">function multiplybyuint64!(x::Bignum,factor::UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> factor == 1 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> if factor == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> zero!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> carry::UInt64 = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> low::UInt64 = factor & 0xFFFFFFFF +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> high::UInt64 = factor >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> product_low::UInt64 = low * x.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> product_high::UInt64 = high * x.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> tmp::UInt64 = (carry & kBigitMask) + product_low +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = tmp & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> carry = (carry >> kBigitSize) + (tmp >> kBigitSize) + +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> (product_high << (32 - kBigitSize)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> while carry != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[x.used_digits+1] = carry & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> carry >>= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive27 = UInt64(0x6765c793fa10079d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive1 = UInt16(5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive2 = UInt16(kFive1 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive3 = UInt16(kFive2 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive4 = UInt16(kFive3 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive5 = UInt16(kFive4 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive6 = UInt16(kFive5 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive7 = UInt32(kFive6 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive8 = UInt32(kFive7 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive9 = UInt32(kFive8 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive10 = UInt32(kFive9 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive11 = UInt32(kFive10 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive12 = UInt32(kFive11 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive13 = UInt32(kFive12 * 5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">const kFive1_to_12 = UInt32[kFive1, kFive2, kFive3, kFive4, kFive5, kFive6, +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> kFive7, kFive8, kFive9, kFive10, kFive11, kFive12] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">function multiplybypoweroften!(x::Bignum,exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> exponent == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits == 0 && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> remaining_exponent = exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> while remaining_exponent >= 27 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> multiplybyuint64!(x,kFive27) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> remaining_exponent -= 27 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> while remaining_exponent >= 13 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> multiplybyuint32!(x,kFive13) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> remaining_exponent -= 13 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> remaining_exponent > 0 && multiplybyuint32!(x, +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> kFive1_to_12[remaining_exponent]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> shiftleft!(x,exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">function square!(x::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> product_length = 2 * x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> (1 << (2 * (kChunkSize - kBigitSize))) <= x.used_digits && error("unimplemented") +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> accumulator::DoubleChunk = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> copy_offset = x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[copy_offset + i] = x.bigits[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index1 = i-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index2 = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> while bigit_index1 >= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk1::Chunk = x.bigits[copy_offset + bigit_index1 + 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk2::Chunk = x.bigits[copy_offset + bigit_index2 + 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> accumulator += (chunk1 % DoubleChunk) * chunk2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index1 -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index2 += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = (accumulator % Chunk) & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> accumulator >>= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = x.used_digits+1:product_length +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index1 = x.used_digits - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index2 = i - bigit_index1 - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> while bigit_index2 < x.used_digits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk1::Chunk = x.bigits[copy_offset + bigit_index1 + 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk2::Chunk = x.bigits[copy_offset + bigit_index2 + 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> accumulator += (chunk1 % DoubleChunk) * chunk2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index1 -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_index2 += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[i] = (accumulator % Chunk) & kBigitMask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> accumulator >>= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> x.used_digits = product_length +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> x.exponent *= 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> clamp!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">function assignpoweruint16!(x::Bignum,base::UInt16,power_exponent::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> if power_exponent == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> assignuint16!(x,UInt16(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> zero!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> shifts::Int = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> while base & UInt16(1) == UInt16(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> base >>= UInt16(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> shifts += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> bit_size::Int = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> tmp_base::Int= base +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> while tmp_base != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> tmp_base >>= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> bit_size += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> final_size = bit_size * power_exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> mask::Int = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> while power_exponent >= mask +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> mask <<= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> mask >>= 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> this_value::UInt64 = base +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> delayed_multiplication = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> max_32bits::UInt64 = 0xFFFFFFFF +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> while mask != 0 && this_value <= max_32bits +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> this_value *= this_value +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> if (power_exponent & mask) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> base_bits_mask::UInt64 = ~(UInt64(1) << (64 - bit_size) - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> high_bits_zero = (this_value & base_bits_mask) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> if high_bits_zero +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> this_value *= base +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> delayed_multiplication = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> mask >>= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> assignuint64!(x,this_value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> delayed_multiplication && multiplybyuint32!(x,UInt32(base)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> while mask != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> square!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> (power_exponent & mask) != 0 && multiplybyuint32!(x,UInt32(base)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> mask >>= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> shiftleft!(x,shifts * power_exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-dividemodulointbignum-420"></a> + 1 (2.38%) samples spent in dividemodulointbignum!<br /> + </div> + <span class="code">function dividemodulointbignum!(x::Bignum,other::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-421"></a>421</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> bigitlength(x) < bigitlength(other) && return UInt16(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> align!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> result::UInt16 = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> while bigitlength(x) > bigitlength(other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> result += x.bigits[x.used_digits] % UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> subtracttimes!(x,other,x.bigits[x.used_digits]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> this_bigit::Chunk = x.bigits[x.used_digits] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> other_bigit::Chunk = other.bigits[other.used_digits] +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> if other.used_digits == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> quotient = reinterpret(Int32,div(this_bigit,other_bigit)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> x.bigits[x.used_digits] = this_bigit - other_bigit * reinterpret(UInt32,quotient) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> result += quotient % UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> clamp!(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> division_estimate = reinterpret(Int32,div(this_bigit,other_bigit+Chunk(1))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> result += division_estimate % UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> subtracttimes!(x,other,division_estimate) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> other_bigit * (division_estimate+1) > this_bigit && return result +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> while lessequal(other, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> subtractbignum!(x,other) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> result += UInt16(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">function pluscompare(a::Bignum,b::Bignum,c::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> bigitlength(a) < bigitlength(b) && return pluscompare(b,a,c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> bigitlength(a) + 1 < bigitlength(c) && return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> bigitlength(a) > bigitlength(c) && return 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> a.exponent >= bigitlength(b) && bigitlength(a) < bigitlength(c) && return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow::Chunk = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> min_exponent = min(a.exponent,b.exponent,c.exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = (bigitlength(c)-1):-1:min_exponent +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk_a::Chunk = bigitat(a,i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk_b::Chunk = bigitat(b,i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> chunk_c::Chunk = bigitat(c,i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> sum::Chunk = chunk_a + chunk_b +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> if sum > chunk_c + borrow +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> return 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow = chunk_c + borrow - sum +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow > 1 && return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow <<= kBigitSize +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> borrow == 0 && return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-compare-474"></a> + 1 (2.38%) samples spent in compare<br /> + </div> + <span class="code">function compare(a::Bignum,b::Bignum) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-475"></a>475</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> bigit_length_a = bigitlength(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_length_b = bigitlength(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_length_a < bigit_length_b && return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_length_a > bigit_length_b && return 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = (bigit_length_a-1):-1:min(a.exponent,b.exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_a::Chunk = bigitat(a,i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_b::Chunk = bigitat(b,i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_a < bigit_b && return -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> bigit_a > bigit_b && return 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">function bigitat(x::Bignum,index) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> index >= bigitlength(x) && return Chunk(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> index < x.exponent && return Chunk(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds ret = x.bigits[index - x.exponent+1]::Chunk +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lbignums-jl-e031ee9c77e42cd3aafb-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">end # module +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/boot-jl-1c95b3ccecba8d7f1acb-line.html b/profiling/statprof/boot-jl-1c95b3ccecba8d7f1acb-line.html new file mode 100644 index 0000000000000000000000000000000000000000..d766e667c37b09184215193c9c8049e5b361f438 --- /dev/null +++ b/profiling/statprof/boot-jl-1c95b3ccecba8d7f1acb-line.html @@ -0,0 +1,7563 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># commented-out definitions are implemented in C +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type Any <: Any end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type Type{T} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type Vararg{T} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># #opaque +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct TypeName +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"># name::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct DataType <: Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"># name::TypeName +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"># super::Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># parameters::Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># names::Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># types::Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"># ctor +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"># instance +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"># size::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"># abstract::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"># mutable::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"># pointerfree::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">#struct Union <: Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"># a +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"># b +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"># name::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"># lb::Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"># ub::Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">#struct UnionAll +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"># var::TypeVar +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"># body +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">#struct Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">#const nothing = Nothing() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type AbstractArray{T,N} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type DenseArray{T,N} <: AbstractArray{T,N} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Array{T,N} <: DenseArray{T,N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"># name::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Method +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct MethodInstance +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct CodeInfo +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct TypeMapLevel +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct TypeMapEntry +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">#abstract type Ref{T} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type Ptr{T} <: Ref{T} {32|64} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"># types for the front end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"># head::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"># args::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">#struct LineNumberNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"># line::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"># file::Any # nominally Union{Symbol,Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">#struct LineInfoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"># mod::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"># method::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"># file::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"># line::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"># inlined_at::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">#struct GotoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"># label::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">#struct PiNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"># val +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"># typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">#struct PhiNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"># edges::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"># values::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">#struct PhiCNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"># values::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">#struct UpsilonNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"># val +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">#struct QuoteNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"># value +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">#struct GlobalRef +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"># mod::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"># name::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">#mutable struct Task +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"># parent::Task +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"># storage::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"># state::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"># donenotify::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"># result::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"># exception::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"># backtrace::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"># logstate::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"># code::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">export +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> # key types +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> Any, DataType, Vararg, NTuple, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> Tuple, Type, UnionAll, TypeVar, Union, Nothing, Cvoid, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractArray, DenseArray, NamedTuple, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> # special objects +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> Function, Method, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> Module, Symbol, Task, Array, UndefInitializer, undef, WeakRef, VecElement, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> # numeric types +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> Number, Real, Integer, Bool, Ref, Ptr, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractFloat, Float16, Float32, Float64, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> Signed, Int, Int8, Int16, Int32, Int64, Int128, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> Unsigned, UInt, UInt8, UInt16, UInt32, UInt64, UInt128, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> # string types +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> AbstractChar, Char, AbstractString, String, IO, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> # errors +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> ErrorException, BoundsError, DivideError, DomainError, Exception, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> InterruptException, InexactError, OutOfMemoryError, ReadOnlyMemoryError, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> OverflowError, StackOverflowError, SegmentationFault, UndefRefError, UndefVarError, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> TypeError, ArgumentError, MethodError, AssertionError, LoadError, InitError, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> UndefKeywordError, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> # AST representation +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr, QuoteNode, LineNumberNode, GlobalRef, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> # object model functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldtype, getfield, setfield!, nfields, throw, tuple, ===, isdefined, eval, ifelse, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> # sizeof # not exported, to avoid conflicting with Base.sizeof +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> # type reflection +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> <:, typeof, isa, typeassert, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> # method reflection +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> applicable, invoke, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> # constants +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing, Main +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">const getproperty = getfield +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">const setproperty! = setfield! +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Number end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Real <: Number end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type AbstractFloat <: Real end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Integer <: Real end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Signed <: Integer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Unsigned <: Integer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Float16 <: AbstractFloat 16 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Float32 <: AbstractFloat 32 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Float64 <: AbstractFloat 64 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type Bool <: Integer 8 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type AbstractChar end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Char <: AbstractChar 32 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Int8 <: Signed 8 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type UInt8 <: Unsigned 8 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Int16 <: Signed 16 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type UInt16 <: Unsigned 16 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type Int32 <: Signed 32 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type UInt32 <: Unsigned 32 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type Int64 <: Signed 64 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">#primitive type UInt64 <: Unsigned 64 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type Int128 <: Signed 128 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">primitive type UInt128 <: Unsigned 128 end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">if Int === Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> const UInt = UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> const UInt = UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">function Typeof end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">ccall(:jl_toplevel_eval_in, Any, (Any, Any), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> Core, quote +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> (f::typeof(Typeof))(x) = ($(_expr(:meta,:nospecialize,:x)); isa(x,Type) ? Type{x} : typeof(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> end) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">macro nospecialize(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> _expr(:meta, :nospecialize, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">Expr(@nospecialize args...) = _expr(args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">struct ErrorException <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">macro _inline_meta() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:meta, :inline) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">macro _noinline_meta() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:meta, :noinline) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">struct BoundsError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> a::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> i::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> BoundsError() = new() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> BoundsError(@nospecialize(a)) = (@_noinline_meta; new(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> BoundsError(@nospecialize(a), i) = (@_noinline_meta; new(a,i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code">struct DivideError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">struct OutOfMemoryError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">struct ReadOnlyMemoryError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">struct SegmentationFault <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">struct StackOverflowError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">struct UndefRefError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">struct UndefVarError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> var::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">struct InterruptException <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">struct DomainError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> val +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> DomainError(@nospecialize(val)) = (@_noinline_meta; new(val, "")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> DomainError(@nospecialize(val), @nospecialize(msg)) = (@_noinline_meta; new(val, msg)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code">struct TypeError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> func::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> context::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> expected::Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> got +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">struct InexactError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> func::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> T # Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> val +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> InexactError(f::Symbol, @nospecialize(T), @nospecialize(val)) = (@_noinline_meta; new(f, T, val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">struct OverflowError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code">struct ArgumentError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code">struct UndefKeywordError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> var::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">struct MethodError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> f +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> args +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> world::UInt +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> MethodError(@nospecialize(f), @nospecialize(args), world::UInt) = new(f, args, world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">const typemax_UInt = ccall(:jl_typemax_uint, Any, (Any,), UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code">MethodError(@nospecialize(f), @nospecialize(args)) = MethodError(f, args, typemax_UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code">struct AssertionError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">AssertionError() = AssertionError("") +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type WrappedException <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code">struct LoadError <: WrappedException +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> file::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> line::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> error +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">struct InitError <: WrappedException +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> mod::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> error +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">String(s::String) = s # no constructor yet +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">const Cvoid = Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code">Nothing() = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"># This should always be inlined +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">getptls() = ccall(:jl_get_ptls_states, Ptr{Cvoid}, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-317"></a>317</td> + <td></td> + <td>40 (95.24%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-boot-jl-include-317"></a> + 40 (95.24%) samples spent in include<br /> + 0 (ex.), + 40 (100.00%) (incl.) + when called from + include_relative + <a href="loading-jl-267f08df202e5203e249-line.html#Lloading-jl-267f08df202e5203e249-line.html-1044">line 1044</a><br /> + </div> + <div class="callees"> + 40 (100.00%) + samples spent calling + <a href="Profile-jl-e79abb67faac09cf5e9b-line.html#S-buildworker-worker-package_linux64-build-usr-share-julia-stdlib-v1-0-Profile-src-Profile-jl-top-level-scope-25">top-level scope</a><br /> + </div> + <span class="code">include(m::Module, fname::String) = ccall(:jl_load_, Any, (Any, Any), m, fname) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">eval(m::Module, @nospecialize(e)) = ccall(:jl_toplevel_eval_in, Any, (Any, Any), m, e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">kwfunc(@nospecialize(f)) = ccall(:jl_get_keyword_sorter, Any, (Any,), f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">kwftype(@nospecialize(t)) = typeof(ccall(:jl_get_kwsorter, Any, (Any,), t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct Box +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> contents::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> Box(@nospecialize(x)) = new(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> Box() = new() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"># constructors for built-in types +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct WeakRef +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> value +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> WeakRef() = WeakRef(nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> WeakRef(@nospecialize(v)) = ccall(:jl_gc_new_weakref_th, Ref{WeakRef}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> (Ptr{Cvoid}, Any), getptls(), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">TypeVar(n::Symbol) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_new_typevar, Ref{TypeVar}, (Any, Any, Any), n, Union{}, Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">TypeVar(n::Symbol, @nospecialize(ub)) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_new_typevar, Ref{TypeVar}, (Any, Any, Any), n, Union{}, ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">TypeVar(n::Symbol, @nospecialize(lb), @nospecialize(ub)) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_new_typevar, Ref{TypeVar}, (Any, Any, Any), n, lb, ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">UnionAll(v::TypeVar, @nospecialize(t)) = ccall(:jl_type_unionall, Any, (Any, Any), v, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">(::Type{Tuple{}})() = () # Tuple{}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">struct VecElement{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> value::T +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> VecElement{T}(value::T) where {T} = new(value) # disable converting constructor in Core +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">VecElement(arg::T) where {T} = VecElement{T}(arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">_new(typ::Symbol, argty::Symbol) = eval(Core, :($typ(@nospecialize n::$argty) = $(Expr(:new, typ, :n)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">_new(:GotoNode, :Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code">_new(:NewvarNode, :SlotNumber) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">_new(:QuoteNode, :Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code">_new(:SSAValue, :Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(LineNumberNode(l::Int) = $(Expr(:new, :LineNumberNode, :l, nothing)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(LineNumberNode(l::Int, @nospecialize(f)) = $(Expr(:new, :LineNumberNode, :l, :f)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(GlobalRef(m::Module, s::Symbol) = $(Expr(:new, :GlobalRef, :m, :s)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(SlotNumber(n::Int) = $(Expr(:new, :SlotNumber, :n)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(TypedSlot(n::Int, @nospecialize(t)) = $(Expr(:new, :TypedSlot, :n, :t)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(PhiNode(edges::Array{Any, 1}, values::Array{Any, 1}) = $(Expr(:new, :PhiNode, :edges, :values)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(PiNode(val, typ) = $(Expr(:new, :PiNode, :val, :typ)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(PhiCNode(values::Array{Any, 1}) = $(Expr(:new, :PhiCNode, :values)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(UpsilonNode(val) = $(Expr(:new, :UpsilonNode, :val)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(UpsilonNode() = $(Expr(:new, :UpsilonNode)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code">eval(Core, :(LineInfoNode(mod::Module, method::Symbol, file::Symbol, line::Int, inlined_at::Int) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> $(Expr(:new, :LineInfoNode, :mod, :method, :file, :line, :inlined_at)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">Module(name::Symbol=:anonymous, std_imports::Bool=true) = ccall(:jl_f_new_module, Ref{Module}, (Any, Bool), name, std_imports) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">Task(@nospecialize(f)) = ccall(:jl_new_task, Ref{Task}, (Any, Int), f, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"># simple convert for use by constructors of types in Core +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"># note that there is no actual conversion defined here, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"># so the methods and ccall's in Core aren't permitted to use convert +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">convert(::Type{Any}, @nospecialize(x)) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code">convert(::Type{T}, x::T) where {T} = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">cconvert(::Type{T}, x) where {T} = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_convert(::Type{T}, x::T) where {T} = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">const NTuple{N,T} = Tuple{Vararg{T,N}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">## primitive Array constructors +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">struct UndefInitializer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code">const undef = UndefInitializer() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"># type and dimensionality specified, accepting dims as series of Ints +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,1}(::UndefInitializer, m::Int) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_alloc_array_1d, Array{T,1}, (Any, Int), Array{T,1}, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,2}(::UndefInitializer, m::Int, n::Int) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_alloc_array_2d, Array{T,2}, (Any, Int, Int), Array{T,2}, m, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,3}(::UndefInitializer, m::Int, n::Int, o::Int) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_alloc_array_3d, Array{T,3}, (Any, Int, Int, Int), Array{T,3}, m, n, o) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::UndefInitializer, d::Vararg{Int,N}) where {T,N} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_new_array, Array{T,N}, (Any, Any), Array{T,N}, d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"># type and dimensionality specified, accepting dims as tuples of Ints +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,1}(::UndefInitializer, d::NTuple{1,Int}) where {T} = Array{T,1}(undef, getfield(d,1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,2}(::UndefInitializer, d::NTuple{2,Int}) where {T} = Array{T,2}(undef, getfield(d,1), getfield(d,2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,3}(::UndefInitializer, d::NTuple{3,Int}) where {T} = Array{T,3}(undef, getfield(d,1), getfield(d,2), getfield(d,3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::UndefInitializer, d::NTuple{N,Int}) where {T,N} = ccall(:jl_new_array, Array{T,N}, (Any, Any), Array{T,N}, d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"># type but not dimensionality specified +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Int) where {T} = Array{T,1}(undef, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Int, n::Int) where {T} = Array{T,2}(undef, m, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Int, n::Int, o::Int) where {T} = Array{T,3}(undef, m, n, o) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, d::NTuple{N,Int}) where {T,N} = Array{T,N}(undef, d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"># empty vector constructor +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,1}() where {T} = Array{T,1}(undef, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">(::Type{Array{T,N} where T})(x::AbstractArray{S,N}) where {S,N} = Array{S,N}(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">Array(A::AbstractArray{T,N}) where {T,N} = Array{T,N}(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(A::AbstractArray{S,N}) where {T,N,S} = Array{T,N}(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code">AbstractArray{T}(A::AbstractArray{S,N}) where {T,S,N} = AbstractArray{T,N}(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"># primitive Symbol constructors +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">function Symbol(s::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:jl_symbol_n, Ref{Symbol}, (Ptr{UInt8}, Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_string_ptr, Ptr{UInt8}, (Any,), s), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> sizeof(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code">function Symbol(a::Array{UInt8,1}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:jl_symbol_n, Ref{Symbol}, (Ptr{UInt8}, Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_ptr, Ptr{UInt8}, (Any,), a), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> Intrinsics.arraylen(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">Symbol(s::Symbol) = s +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"># module providing the IR object model +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">module IR +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">export CodeInfo, MethodInstance, GotoNode, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> NewvarNode, SSAValue, Slot, SlotNumber, TypedSlot, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> PiNode, PhiNode, PhiCNode, UpsilonNode, LineInfoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">import Core: CodeInfo, MethodInstance, GotoNode, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> NewvarNode, SSAValue, Slot, SlotNumber, TypedSlot, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> PiNode, PhiNode, PhiCNode, UpsilonNode, LineInfoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"># docsystem basics +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code">const unescape = Symbol("hygienic-scope") +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">macro doc(x...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> docex = atdoc(__source__, __module__, x...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(docex, Expr) && docex.head === :escape && return docex +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> return Expr(:escape, Expr(unescape, docex, typeof(atdoc).name.module)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code">macro __doc__(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> return Expr(:escape, Expr(:block, Expr(:meta, :doc), x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code">atdoc = (source, mod, str, expr) -> Expr(:escape, expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">atdoc!(λ) = global atdoc = λ +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"># simple stand-alone print definitions for debugging +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">struct CoreSTDOUT <: IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code">struct CoreSTDERR <: IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code">const stdout = CoreSTDOUT() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code">const stderr = CoreSTDERR() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code">io_pointer(::CoreSTDOUT) = Intrinsics.pointerref(Intrinsics.cglobal(:jl_uv_stdout, Ptr{Cvoid}), 1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code">io_pointer(::CoreSTDERR) = Intrinsics.pointerref(Intrinsics.cglobal(:jl_uv_stderr, Ptr{Cvoid}), 1, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_write(io::IO, x::Ptr{UInt8}, nb::UInt) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> (ccall(:jl_uv_puts, Cvoid, (Ptr{Cvoid}, Ptr{UInt8}, UInt), io_pointer(io), x, nb); nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_write(io::IO, x::Ptr{UInt8}, nb::Int) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> (ccall(:jl_uv_puts, Cvoid, (Ptr{Cvoid}, Ptr{UInt8}, Int), io_pointer(io), x, nb); nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code">write(io::IO, x::UInt8) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> (ccall(:jl_uv_putb, Cvoid, (Ptr{Cvoid}, UInt8), io_pointer(io), x); 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code">function write(io::IO, x::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = sizeof(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, ccall(:jl_string_ptr, Ptr{UInt8}, (Any,), x), nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> return nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, @nospecialize x) = ccall(:jl_static_show, Cvoid, (Ptr{Cvoid}, Any), io_pointer(io), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, x::AbstractChar) = ccall(:jl_uv_putc, Cvoid, (Ptr{Cvoid}, Char), io_pointer(io), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, x::String) = (write(io, x); nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, @nospecialize x) = show(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, @nospecialize(x), @nospecialize a...) = (print(io, x); print(io, a...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">println(io::IO) = (write(io, 0x0a); nothing) # 0x0a = '\n' +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code">println(io::IO, @nospecialize x...) = (print(io, x...); println(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">show(@nospecialize a) = show(stdout, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code">print(@nospecialize a...) = print(stdout, a...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">println(@nospecialize a...) = println(stdout, a...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">struct GeneratedFunctionStub +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> gen +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> argnames::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> spnames::Union{Nothing, Array{Any,1}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> line::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> file::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> expand_early::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"># invoke and wrap the results of @generated +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code">function (g::GeneratedFunctionStub)(@nospecialize args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> body = g.gen(args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> if body isa CodeInfo +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> return body +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> lam = Expr(:lambda, g.argnames, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(Symbol("scope-block"), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:block, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> LineNumberNode(g.line, g.file), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:meta, :push_loc, g.file, Symbol("@generated body")), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:return, body), +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:meta, :pop_loc)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> if g.spnames === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> return lam +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> return Expr(Symbol("with-static-parameters"), lam, g.spnames...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code">NamedTuple() = NamedTuple{(),Tuple{}}(()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> NamedTuple{names}(args::Tuple) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code">Construct a named tuple with the given `names` (a tuple of Symbols) from a tuple of values. +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">NamedTuple{names}(args::Tuple) where {names} = NamedTuple{names,typeof(args)}(args) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code">using .Intrinsics: sle_int, add_int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code">macro generated() +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> return Expr(:generated) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code">function NamedTuple{names,T}(args::T) where {names, T <: Tuple} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> if @generated +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> N = nfields(names) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> flds = Array{Any,1}(undef, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> while sle_int(i, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> arrayset(false, flds, :(getfield(args, $i)), i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> i = add_int(i, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:new, :(NamedTuple{names,T}), flds...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> N = nfields(names) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> NT = NamedTuple{names,T} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> flds = Array{Any,1}(undef, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> while sle_int(i, N) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> arrayset(false, flds, getfield(args, i), i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> i = add_int(i, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_new_structv, Any, (Any, Ptr{Cvoid}, UInt32), NT, +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_array_ptr, Ptr{Cvoid}, (Any,), flds), toUInt32(N))::NT +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"># constructors for built-in types +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code">import .Intrinsics: eq_int, trunc_int, lshr_int, sub_int, shl_int, bitcast, sext_int, zext_int, and_int +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">throw_inexacterror(f::Symbol, @nospecialize(T), val) = (@_noinline_meta; throw(InexactError(f, T, val))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code">function is_top_bit_set(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> eq_int(trunc_int(UInt8, lshr_int(x, sub_int(shl_int(sizeof(x), 3), 1))), trunc_int(UInt8, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">function is_top_bit_set(x::Union{Int8,UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> eq_int(lshr_int(x, 7), trunc_int(typeof(x), 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code">function check_top_bit(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> is_top_bit_set(x) && throw_inexacterror(:check_top_bit, typeof(x), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code">function checked_trunc_sint(::Type{To}, x::From) where {To,From} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> y = trunc_int(To, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> back = sext_int(From, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> eq_int(x, back) || throw_inexacterror(:trunc, To, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> y +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code">function checked_trunc_uint(::Type{To}, x::From) where {To,From} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> y = trunc_int(To, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> back = zext_int(From, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> eq_int(x, back) || throw_inexacterror(:trunc, To, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> y +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Int8) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Int16) = checked_trunc_sint(Int8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Int32) = checked_trunc_sint(Int8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Int64) = checked_trunc_sint(Int8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Int128) = checked_trunc_sint(Int8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::UInt8) = bitcast(Int8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::UInt16) = checked_trunc_sint(Int8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::UInt32) = checked_trunc_sint(Int8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::UInt64) = checked_trunc_sint(Int8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::UInt128) = checked_trunc_sint(Int8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code">toInt8(x::Bool) = and_int(zext_int(Int8, x), Int8(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Int8) = sext_int(Int16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Int16) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Int32) = checked_trunc_sint(Int16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Int64) = checked_trunc_sint(Int16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Int128) = checked_trunc_sint(Int16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::UInt8) = zext_int(Int16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::UInt16) = bitcast(Int16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::UInt32) = checked_trunc_sint(Int16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::UInt64) = checked_trunc_sint(Int16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::UInt128) = checked_trunc_sint(Int16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code">toInt16(x::Bool) = and_int(zext_int(Int16, x), Int16(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Int8) = sext_int(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Int16) = sext_int(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Int32) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Int64) = checked_trunc_sint(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Int128) = checked_trunc_sint(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::UInt8) = zext_int(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::UInt16) = zext_int(Int32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::UInt32) = bitcast(Int32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::UInt64) = checked_trunc_sint(Int32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::UInt128) = checked_trunc_sint(Int32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code">toInt32(x::Bool) = and_int(zext_int(Int32, x), Int32(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Int8) = sext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Int16) = sext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Int32) = sext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Int64) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Int128) = checked_trunc_sint(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::UInt8) = zext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::UInt16) = zext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::UInt32) = zext_int(Int64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::UInt64) = bitcast(Int64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::UInt128) = checked_trunc_sint(Int64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code">toInt64(x::Bool) = and_int(zext_int(Int64, x), Int64(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Int8) = sext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Int16) = sext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Int32) = sext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Int64) = sext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Int128) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::UInt8) = zext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::UInt16) = zext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::UInt32) = zext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::UInt64) = zext_int(Int128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::UInt128) = bitcast(Int128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code">toInt128(x::Bool) = and_int(zext_int(Int128, x), Int128(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Int8) = bitcast(UInt8, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Int16) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Int32) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Int64) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Int128) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::UInt8) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::UInt16) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::UInt32) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::UInt64) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::UInt128) = checked_trunc_uint(UInt8, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt8(x::Bool) = and_int(zext_int(UInt8, x), UInt8(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Int8) = sext_int(UInt16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Int16) = bitcast(UInt16, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Int32) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Int64) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Int128) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::UInt8) = zext_int(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::UInt16) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::UInt32) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::UInt64) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::UInt128) = checked_trunc_uint(UInt16, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt16(x::Bool) = and_int(zext_int(UInt16, x), UInt16(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Int8) = sext_int(UInt32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Int16) = sext_int(UInt32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Int32) = bitcast(UInt32, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Int64) = checked_trunc_uint(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Int128) = checked_trunc_uint(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::UInt8) = zext_int(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::UInt16) = zext_int(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::UInt32) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::UInt64) = checked_trunc_uint(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::UInt128) = checked_trunc_uint(UInt32, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt32(x::Bool) = and_int(zext_int(UInt32, x), UInt32(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Int8) = sext_int(UInt64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Int16) = sext_int(UInt64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Int32) = sext_int(UInt64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Int64) = bitcast(UInt64, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Int128) = checked_trunc_uint(UInt64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::UInt8) = zext_int(UInt64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::UInt16) = zext_int(UInt64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::UInt32) = zext_int(UInt64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::UInt64) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::UInt128) = checked_trunc_uint(UInt64, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt64(x::Bool) = and_int(zext_int(UInt64, x), UInt64(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Int8) = sext_int(UInt128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Int16) = sext_int(UInt128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Int32) = sext_int(UInt128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Int64) = sext_int(UInt128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Int128) = bitcast(UInt128, check_top_bit(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::UInt8) = zext_int(UInt128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::UInt16) = zext_int(UInt128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::UInt32) = zext_int(UInt128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::UInt64) = zext_int(UInt128, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::UInt128) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code">toUInt128(x::Bool) = and_int(zext_int(UInt128, x), UInt128(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: this is here to work around the 4 method limit in inference (#23210). +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code">const BuiltinInts = Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8, Bool} +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code">Int8(x::BuiltinInts) = toInt8(x)::Int8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code">Int16(x::BuiltinInts) = toInt16(x)::Int16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code">Int32(x::BuiltinInts) = toInt32(x)::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code">Int64(x::BuiltinInts) = toInt64(x)::Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code">Int128(x::BuiltinInts) = toInt128(x)::Int128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code">UInt8(x::BuiltinInts) = toUInt8(x)::UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code">UInt16(x::BuiltinInts) = toUInt16(x)::UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code">UInt32(x::BuiltinInts) = toUInt32(x)::UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code">UInt64(x::BuiltinInts) = toUInt64(x)::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code">UInt128(x::BuiltinInts) = toUInt128(x)::UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code">(::Type{T})(x::T) where {T<:Number} = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code">Int(x::Ptr) = bitcast(Int, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code">UInt(x::Ptr) = bitcast(UInt, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code">if Int === Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code">Int64(x::Ptr) = Int64(UInt32(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code">UInt64(x::Ptr) = UInt64(UInt32(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code">Ptr{T}(x::Union{Int,UInt,Ptr}) where {T} = bitcast(Ptr{T}, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::UInt8) = Int8(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Int8) = UInt8(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::UInt16) = Int16(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Int16) = UInt16(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::UInt32) = Int32(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Int32) = UInt32(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::UInt64) = Int64(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Int64) = UInt64(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::UInt128) = Int128(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Int128) = UInt128(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code">Signed(x::Union{Float32, Float64, Bool}) = Int(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned(x::Union{Float32, Float64, Bool}) = UInt(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code">Integer(x::Integer) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">Integer(x::Union{Float32, Float64}) = Int(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lboot-jl-1c95b3ccecba8d7f1acb-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code">ccall(:jl_set_istopmod, Cvoid, (Any, Bool), Core, true) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/clickable_stacks.attrs b/profiling/statprof/clickable_stacks.attrs new file mode 100644 index 0000000000000000000000000000000000000000..bfce528795475a757d4024c13672e56946faf791 --- /dev/null +++ b/profiling/statprof/clickable_stacks.attrs @@ -0,0 +1,56 @@ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:803 href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-803 function=+ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035 href=loading-jl-267f08df202e5203e249-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-loading-jl-include_relative-1035 function=include_relative +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155 function=string href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-string-155 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22 function=include href=sysimg-jl-58aafbf6293fe483e566-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-sysimg-jl-include-22 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalize:48 function=normalize href=float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalize-48 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:_deleteend!:823 function=_deleteend! href=array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:StringVector:71 function=StringVector href=string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317 function=include href=boot-jl-1c95b3ccecba8d7f1acb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-boot-jl-include-317 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7 href=test-jl-6f8538a27ff3da5824d9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-profiling-test-jl-f-7 function=f +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:write:163 href=gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163 function=write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:165 function=print href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-165 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:ensureroom:293 href=iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293 function=ensureroom +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:compare:474 function=compare href=bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-compare-474 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl:process_events:98 function=process_events href=libuv-jl-530c66ad95b5a57763e9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111 function=print_to_string href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28 href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:roundweed:34 href=fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34 function=roundweed +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105 href=fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105 function=fastshortest +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_string_n:60 href=string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60 function=_string_n +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./coreio.jl:print:2 href=coreio-jl-465d134c20f8b0bc664b-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-coreio-jl-print-2 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193 href=client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-exec_options-193 function=exec_options +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52 function=grisu href=grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151 function=show href=grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-show-151 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64 function=digitgen href=fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:dividemodulointbignum!:420 function=dividemodulointbignum! href=bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-dividemodulointbignum-420 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:*:54 href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54 function=* +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:448 function=>> href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-448 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420 href=client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-_start-420 function=_start +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:tostr_sizehint:106 href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-tostr_sizehint-106 function=tostr_sizehint +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>>:603 function=>> href=operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-603 +nothing:Type function=Type href=nothing-0feca720e2c29dafb2c9-line.html#Snothing-Type +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./event.jl:wait:243 function=wait href=event-jl-9f2b370029d9fd3c8bef-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-event-jl-wait-243 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalizedbound:120 function=normalizedbound href=float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalizedbound-120 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:166 href=io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-166 function=print +/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25 href=Profile-jl-e79abb67faac09cf5e9b-line.html#S-buildworker-worker-package_linux64-build-usr-share-julia-stdlib-v1-0-Profile-src-Profile-jl-top-level-scope-25 function=top-level scope +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:div function=div href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-div +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:#IOBuffer#302:111 href=iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-IOBuffer-302-111 function=#IOBuffer#302 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:print:165 function=print href=gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-print-165 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl:==:425 function=== href=promotion-jl-fe649671ed190521a171-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-promotion-jl-425 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:binexp_cache:253 function=binexp_cache href=float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-binexp_cache-253 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:uv_write:773 function=uv_write href=stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-uv_write-773 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:53 href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53 function=+ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:442 href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-442 function=>> +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:StringVector:31 function=StringVector href=iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-StringVector-31 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89 href=grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-_show-89 function=_show +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:resize!:1011 function=resize! href=array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-resize-1011 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:Type:39 function=Type href=string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-Type-39 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:lastindex:110 href=string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110 function=lastindex +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>:286 href=operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-286 function=> +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl:unsafe_write:509 href=io-jl-7061b86fd468f75a7694-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-io-jl-unsafe_write-509 function=unsafe_write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:unsafe_write:828 function=unsafe_write href=stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-unsafe_write-828 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:==:432 href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-432 function=== +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_thisind_str:113 href=string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_thisind_str-113 function=_thisind_str +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:unsafe_write:401 function=unsafe_write href=iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:427 function=< href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-427 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:49 function=< href=int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-49 diff --git a/profiling/statprof/clickable_stacks_by_time.svg b/profiling/statprof/clickable_stacks_by_time.svg new file mode 100644 index 0000000000000000000000000000000000000000..735b92d66dcce6b41854a19b9d723fa08fc7debb --- /dev/null +++ b/profiling/statprof/clickable_stacks_by_time.svg @@ -0,0 +1,642 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="1200" height="386" onload="init(evt)" viewBox="0 0 1200 386" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. --> +<defs > + <linearGradient id="background" y1="0" y2="1" x1="0" x2="0" > + <stop stop-color="#eeeeee" offset="5%" /> + <stop stop-color="#eeeeb0" offset="95%" /> + </linearGradient> +</defs> +<style type="text/css"> + .func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; } +</style> +<script type="text/ecmascript"> +<![CDATA[ + var details, searchbtn, matchedtxt, svg; + function init(evt) { + details = document.getElementById("details").firstChild; + searchbtn = document.getElementById("search"); + matchedtxt = document.getElementById("matched"); + svg = document.getElementsByTagName("svg")[0]; + searching = 0; + } + + // mouse-over for info + function s(node) { // show + info = g_to_text(node); + details.nodeValue = "sub " + info; + } + function c() { // clear + details.nodeValue = ' '; + } + + // ctrl-F for search + window.addEventListener("keydown",function (e) { + if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) { + e.preventDefault(); + search_prompt(); + } + }) + + // functions + function find_child(parent, name, attr) { + var children = parent.childNodes; + for (var i=0; i<children.length;i++) { + if (children[i].tagName == name) + return (attr != undefined) ? children[i].attributes[attr].value : children[i]; + } + return; + } + function orig_save(e, attr, val) { + if (e.attributes["_orig_"+attr] != undefined) return; + if (e.attributes[attr] == undefined) return; + if (val == undefined) val = e.attributes[attr].value; + e.setAttribute("_orig_"+attr, val); + } + function orig_load(e, attr) { + if (e.attributes["_orig_"+attr] == undefined) return; + e.attributes[attr].value = e.attributes["_orig_"+attr].value; + e.removeAttribute("_orig_"+attr); + } + function g_to_text(e) { + var text = find_child(e, "title").firstChild.nodeValue; + return (text) + } + function g_to_func(e) { + var func = g_to_text(e); + if (func != null) + func = func.replace(/ .*/, ""); + return (func); + } + function update_text(e) { + var r = find_child(e, "rect"); + var t = find_child(e, "text"); + var w = parseFloat(r.attributes["width"].value) -3; + var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,""); + t.attributes["x"].value = parseFloat(r.attributes["x"].value) +3; + + // Smaller than this size won't fit anything + if (w < 2*12*0.59) { + t.textContent = ""; + return; + } + + t.textContent = txt; + // Fit in full text width + if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w) + return; + + for (var x=txt.length-2; x>0; x--) { + if (t.getSubStringLength(0, x+2) <= w) { + t.textContent = txt.substring(0,x) + ".."; + return; + } + } + t.textContent = ""; + } + + // zoom + function zoom_reset(e) { + if (e.attributes != undefined) { + orig_load(e, "x"); + orig_load(e, "width"); + } + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_reset(c[i]); + } + } + function zoom_child(e, x, ratio) { + if (e.attributes != undefined) { + if (e.attributes["x"] != undefined) { + orig_save(e, "x"); + e.attributes["x"].value = (parseFloat(e.attributes["x"].value) - x - 10) * ratio + 10; + if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 3; + } + if (e.attributes["width"] != undefined) { + orig_save(e, "width"); + e.attributes["width"].value = parseFloat(e.attributes["width"].value) * ratio; + } + } + + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_child(c[i], x-10, ratio); + } + } + function zoom_parent(e) { + if (e.attributes) { + if (e.attributes["x"] != undefined) { + orig_save(e, "x"); + e.attributes["x"].value = 10; + } + if (e.attributes["width"] != undefined) { + orig_save(e, "width"); + e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (10*2); + } + } + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_parent(c[i]); + } + } + function zoom(node) { + var attr = find_child(node, "rect").attributes; + var width = parseFloat(attr["width"].value); + var xmin = parseFloat(attr["x"].value); + var xmax = parseFloat(xmin + width); + var ymin = parseFloat(attr["y"].value); + var ratio = (svg.width.baseVal.value - 2*10) / width; + + // XXX: Workaround for JavaScript float issues (fix me) + var fudge = 0.0001; + + var unzoombtn = document.getElementById("unzoom"); + unzoombtn.style["opacity"] = "1.0"; + + var el = document.getElementsByTagName("g"); + for(var i=0;i<el.length;i++){ + var e = el[i]; + var a = find_child(e, "rect").attributes; + var ex = parseFloat(a["x"].value); + var ew = parseFloat(a["width"].value); + // Is it an ancestor + if (0 == 0) { + var upstack = parseFloat(a["y"].value) > ymin; + } else { + var upstack = parseFloat(a["y"].value) < ymin; + } + if (upstack) { + // Direct ancestor + if (ex <= xmin && (ex+ew+fudge) >= xmax) { + e.style["opacity"] = "0.5"; + zoom_parent(e); + e.onclick = function(e){unzoom(); zoom(this);}; + update_text(e); + } + // not in current path + else + e.style["display"] = "none"; + } + // Children maybe + else { + // no common path + if (ex < xmin || ex + fudge >= xmax) { + e.style["display"] = "none"; + } + else { + zoom_child(e, xmin, ratio); + e.onclick = function(e){zoom(this);}; + update_text(e); + } + } + } + } + function unzoom() { + var unzoombtn = document.getElementById("unzoom"); + unzoombtn.style["opacity"] = "0.0"; + + var el = document.getElementsByTagName("g"); + for(i=0;i<el.length;i++) { + el[i].style["display"] = "block"; + el[i].style["opacity"] = "1"; + zoom_reset(el[i]); + update_text(el[i]); + } + } + + // search + function reset_search() { + var el = document.getElementsByTagName("rect"); + for (var i=0; i < el.length; i++) { + orig_load(el[i], "fill") + } + } + function search_prompt() { + if (!searching) { + var term = prompt("Enter a search term (regexp " + + "allowed, eg: ^ext4_)", ""); + if (term != null) { + search(term) + } + } else { + reset_search(); + searching = 0; + searchbtn.style["opacity"] = "0.1"; + searchbtn.firstChild.nodeValue = "Search" + matchedtxt.style["opacity"] = "0.0"; + matchedtxt.firstChild.nodeValue = "" + } + } + function search(term) { + var re = new RegExp(term); + var el = document.getElementsByTagName("g"); + var matches = new Object(); + var maxwidth = 0; + for (var i = 0; i < el.length; i++) { + var e = el[i]; + if (e.attributes["class"].value != "func_g") + continue; + var func = g_to_func(e); + var rect = find_child(e, "rect"); + if (rect == null) { + // the rect might be wrapped in an anchor + // if nameattr href is being used + if (rect = find_child(e, "a")) { + rect = find_child(r, "rect"); + } + } + if (func == null || rect == null) + continue; + + // Save max width. Only works as we have a root frame + var w = parseFloat(rect.attributes["width"].value); + if (w > maxwidth) + maxwidth = w; + + if (func.match(re)) { + // highlight + var x = parseFloat(rect.attributes["x"].value); + orig_save(rect, "fill"); + rect.attributes["fill"].value = + "rgb(230,0,230)"; + + // remember matches + if (matches[x] == undefined) { + matches[x] = w; + } else { + if (w > matches[x]) { + // overwrite with parent + matches[x] = w; + } + } + searching = 1; + } + } + if (!searching) + return; + + searchbtn.style["opacity"] = "1.0"; + searchbtn.firstChild.nodeValue = "Reset Search" + + // calculate percent matched, excluding vertical overlap + var count = 0; + var lastx = -1; + var lastw = 0; + var keys = Array(); + for (k in matches) { + if (matches.hasOwnProperty(k)) + keys.push(k); + } + // sort the matched frames by their x location + // ascending, then width descending + keys.sort(function(a, b){ + return a - b; + if (a < b || a > b) + return a - b; + return matches[b] - matches[a]; + }); + // Step through frames saving only the biggest bottom-up frames + // thanks to the sort order. This relies on the tree property + // where children are always smaller than their parents. + for (var k in keys) { + var x = parseFloat(keys[k]); + var w = matches[keys[k]]; + if (x >= lastx + lastw) { + count += w; + lastx = x; + lastw = w; + } + } + // display matched percent + matchedtxt.style["opacity"] = "1.0"; + pct = 100 * count / maxwidth; + if (pct == 100) + pct = "100" + else + pct = pct.toFixed(1) + matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%"; + } + function searchover(e) { + searchbtn.style["opacity"] = "1.0"; + } + function searchout(e) { + if (searching) { + searchbtn.style["opacity"] = "1.0"; + } else { + searchbtn.style["opacity"] = "0.1"; + } + } +]]> +</script> +<rect x="0.0" y="0" width="1200.0" height="386.0" fill="url(#background)" /> +<text text-anchor="middle" x="600.00" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Graph</text> +<text text-anchor="" x="10.00" y="369" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text> +<text text-anchor="" x="10.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text> +<text text-anchor="" x="1090.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" >Search</text> +<text text-anchor="" x="1090.00" y="369" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="matched" > </text> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include (40 samples, 95.24%)</title><a xlink:href="boot-jl-1c95b3ccecba8d7f1acb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-boot-jl-include-317" target="_top"><rect x="10.0" y="257" width="1123.8" height="15.0" fill="rgb(243,181,51)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="267.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401" target="_top"><rect x="656.2" y="113" width="28.1" height="15.0" fill="rgb(230,128,54)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-803" target="_top"><rect x="459.5" y="65" width="28.1" height="15.0" fill="rgb(242,82,21)" rx="2" ry="2" /> +<text text-anchor="" x="462.52" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>normalizedbound (1 samples, 2.38%)</title><a xlink:href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalizedbound-120" target="_top"><rect x="628.1" y="81" width="28.1" height="15.0" fill="rgb(226,126,13)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >n..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53" target="_top"><rect x="459.5" y="49" width="28.1" height="15.0" fill="rgb(229,179,43)" rx="2" ry="2" /> +<text text-anchor="" x="462.52" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>write (1 samples, 2.38%)</title><a xlink:href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163" target="_top"><rect x="262.9" y="161" width="28.1" height="15.0" fill="rgb(206,1,20)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >w..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401" target="_top"><rect x="684.3" y="97" width="28.1" height="15.0" fill="rgb(253,172,21)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>f (40 samples, 95.24%)</title><a xlink:href="test-jl-6f8538a27ff3da5824d9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-profiling-test-jl-f-7" target="_top"><rect x="10.0" y="225" width="1123.8" height="15.0" fill="rgb(214,132,23)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="235.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >f</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>resize! (1 samples, 2.38%)</title><a xlink:href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-resize-1011" target="_top"><rect x="234.8" y="177" width="28.1" height="15.0" fill="rgb(228,153,41)" rx="2" ry="2" /> +<text text-anchor="" x="237.76" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >r..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>show (14 samples, 33.33%)</title><a xlink:href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-show-151" target="_top"><rect x="319.0" y="161" width="393.4" height="15.0" fill="rgb(230,185,14)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >show</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>Type (12 samples, 28.57%)</title><a xlink:href="nothing-0feca720e2c29dafb2c9-line.html#Snothing-Type" target="_top"><rect x="796.7" y="177" width="337.1" height="15.0" fill="rgb(205,29,4)" rx="2" ry="2" /> +<text text-anchor="" x="799.67" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Type</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>normalize (1 samples, 2.38%)</title><a xlink:href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalize-48" target="_top"><rect x="628.1" y="65" width="28.1" height="15.0" fill="rgb(218,104,22)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >n..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print_to_string (37 samples, 88.10%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111" target="_top"><rect x="94.3" y="193" width="1039.5" height="15.0" fill="rgb(226,199,36)" rx="2" ry="2" /> +<text text-anchor="" x="97.29" y="203.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print_to_string</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>lastindex (1 samples, 2.38%)</title><a xlink:href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110" target="_top"><rect x="712.4" y="161" width="28.1" height="15.0" fill="rgb(246,78,6)" rx="2" ry="2" /> +<text text-anchor="" x="715.38" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >l..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><a xlink:href="io-jl-7061b86fd468f75a7694-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-io-jl-unsafe_write-509" target="_top"><rect x="656.2" y="129" width="28.1" height="15.0" fill="rgb(230,50,17)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:(:49 (1 samples, 2.38%)</title><rect x="656.2" y="81" width="28.1" height="15.0" fill="rgb(226,4,10)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401" target="_top"><rect x="262.9" y="145" width="28.1" height="15.0" fill="rgb(250,8,25)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>exec_options (40 samples, 95.24%)</title><a xlink:href="client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-exec_options-193" target="_top"><rect x="10.0" y="305" width="1123.8" height="15.0" fill="rgb(238,103,40)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="315.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >exec_options</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:)):442 (1 samples, 2.38%)</title><rect x="571.9" y="33" width="28.1" height="15.0" fill="rgb(215,166,33)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="43.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>dividemodulointbignum! (1 samples, 2.38%)</title><a xlink:href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-dividemodulointbignum-420" target="_top"><rect x="1161.9" y="321" width="28.1" height="15.0" fill="rgb(217,151,49)" rx="2" ry="2" /> +<text text-anchor="" x="1164.90" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >d..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>string (37 samples, 88.10%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-string-155" target="_top"><rect x="94.3" y="209" width="1039.5" height="15.0" fill="rgb(240,113,33)" rx="2" ry="2" /> +<text text-anchor="" x="97.29" y="219.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >string</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>digitgen (8 samples, 19.05%)</title><a xlink:href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64" target="_top"><rect x="375.2" y="81" width="224.8" height="15.0" fill="rgb(211,162,3)" rx="2" ry="2" /> +<text text-anchor="" x="378.24" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >digitgen</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>#IOBuffer#302 (12 samples, 28.57%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-IOBuffer-302-111" target="_top"><rect x="796.7" y="161" width="337.1" height="15.0" fill="rgb(231,6,8)" rx="2" ry="2" /> +<text text-anchor="" x="799.67" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >#IOBuffer#302</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>compare (1 samples, 2.38%)</title><a xlink:href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-compare-474" target="_top"><rect x="1133.8" y="321" width="28.1" height="15.0" fill="rgb(233,210,54)" rx="2" ry="2" /> +<text text-anchor="" x="1136.81" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >c..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>== (1 samples, 2.38%)</title><a xlink:href="promotion-jl-fe649671ed190521a171-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-promotion-jl-425" target="_top"><rect x="628.1" y="33" width="28.1" height="15.0" fill="rgb(221,39,9)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="43.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >==</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>ensureroom (1 samples, 2.38%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293" target="_top"><rect x="262.9" y="129" width="28.1" height="15.0" fill="rgb(237,7,41)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >e..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_show (14 samples, 33.33%)</title><a xlink:href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-_show-89" target="_top"><rect x="319.0" y="145" width="393.4" height="15.0" fill="rgb(247,166,52)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_show</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>grisu (12 samples, 28.57%)</title><a xlink:href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52" target="_top"><rect x="319.0" y="113" width="337.2" height="15.0" fill="rgb(208,81,0)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >grisu</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>StringVector (6 samples, 14.29%)</title><a xlink:href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71" target="_top"><rect x="965.2" y="145" width="168.6" height="15.0" fill="rgb(207,8,54)" rx="2" ry="2" /> +<text text-anchor="" x="968.24" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >StringVector</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53" target="_top"><rect x="600.0" y="65" width="28.1" height="15.0" fill="rgb(219,141,18)" rx="2" ry="2" /> +<text text-anchor="" x="603.00" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (1 samples, 2.38%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-165" target="_top"><rect x="262.9" y="177" width="28.1" height="15.0" fill="rgb(216,70,48)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >p..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:(:427 (1 samples, 2.38%)</title><rect x="487.6" y="65" width="28.1" height="15.0" fill="rgb(214,34,27)" rx="2" ry="2" /> +<text text-anchor="" x="490.62" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (1 samples, 2.38%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-166" target="_top"><rect x="684.3" y="129" width="28.1" height="15.0" fill="rgb(229,53,54)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >p..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:)):448 (1 samples, 2.38%)</title><rect x="571.9" y="49" width="28.1" height="15.0" fill="rgb(205,204,25)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>wait (3 samples, 7.14%)</title><a xlink:href="event-jl-9f2b370029d9fd3c8bef-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-event-jl-wait-243" target="_top"><rect x="10.0" y="145" width="84.3" height="15.0" fill="rgb(208,25,26)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >wait</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>top-level scope (40 samples, 95.24%)</title><a xlink:href="Profile-jl-e79abb67faac09cf5e9b-line.html#S-buildworker-worker-package_linux64-build-usr-share-julia-stdlib-v1-0-Profile-src-Profile-jl-top-level-scope-25" target="_top"><rect x="10.0" y="241" width="1123.8" height="15.0" fill="rgb(252,80,47)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="251.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >top-level scope</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include_relative (40 samples, 95.24%)</title><a xlink:href="loading-jl-267f08df202e5203e249-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-loading-jl-include_relative-1035" target="_top"><rect x="10.0" y="273" width="1123.8" height="15.0" fill="rgb(229,229,9)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="283.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include_relative</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (3 samples, 7.14%)</title><a xlink:href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-unsafe_write-828" target="_top"><rect x="10.0" y="177" width="84.3" height="15.0" fill="rgb(245,170,11)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >unsafe_wr..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (3 samples, 7.14%)</title><a xlink:href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-print-165" target="_top"><rect x="10.0" y="193" width="84.3" height="15.0" fill="rgb(233,155,21)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="203.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_deleteend! (1 samples, 2.38%)</title><a xlink:href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823" target="_top"><rect x="234.8" y="161" width="28.1" height="15.0" fill="rgb(248,139,13)" rx="2" ry="2" /> +<text text-anchor="" x="237.76" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_start (40 samples, 95.24%)</title><a xlink:href="client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-_start-420" target="_top"><rect x="10.0" y="321" width="1123.8" height="15.0" fill="rgb(223,62,1)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_start</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (15 samples, 35.71%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28" target="_top"><rect x="291.0" y="177" width="421.4" height="15.0" fill="rgb(216,229,38)" rx="2" ry="2" /> +<text text-anchor="" x="293.95" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_string_n (5 samples, 11.90%)</title><a xlink:href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60" target="_top"><rect x="824.8" y="129" width="140.4" height="15.0" fill="rgb(226,188,45)" rx="2" ry="2" /> +<text text-anchor="" x="827.76" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_string_n</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>grisu (12 samples, 28.57%)</title><a xlink:href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52" target="_top"><rect x="319.0" y="129" width="337.2" height="15.0" fill="rgb(223,220,32)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >grisu</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>div (2 samples, 4.76%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-div" target="_top"><rect x="515.7" y="65" width="56.2" height="15.0" fill="rgb(212,164,46)" rx="2" ry="2" /> +<text text-anchor="" x="518.71" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >div</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include (40 samples, 95.24%)</title><a xlink:href="sysimg-jl-58aafbf6293fe483e566-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-sysimg-jl-include-22" target="_top"><rect x="10.0" y="289" width="1123.8" height="15.0" fill="rgb(243,131,38)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="299.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>write (1 samples, 2.38%)</title><a xlink:href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163" target="_top"><rect x="684.3" y="113" width="28.1" height="15.0" fill="rgb(221,139,36)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >w..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>StringVector (5 samples, 11.90%)</title><a xlink:href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-StringVector-31" target="_top"><rect x="824.8" y="145" width="140.4" height="15.0" fill="rgb(213,117,34)" rx="2" ry="2" /> +<text text-anchor="" x="827.76" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >StringVector</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>uv_write (3 samples, 7.14%)</title><a xlink:href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-uv_write-773" target="_top"><rect x="10.0" y="161" width="84.3" height="15.0" fill="rgb(221,36,36)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >uv_write</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>process_events (3 samples, 7.14%)</title><a xlink:href="libuv-jl-530c66ad95b5a57763e9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98" target="_top"><rect x="10.0" y="129" width="84.3" height="15.0" fill="rgb(212,149,13)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >process_e..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>fastshortest (11 samples, 26.19%)</title><a xlink:href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105" target="_top"><rect x="347.1" y="97" width="309.1" height="15.0" fill="rgb(219,79,19)" rx="2" ry="2" /> +<text text-anchor="" x="350.14" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >fastshortest</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>roundweed (1 samples, 2.38%)</title><a xlink:href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34" target="_top"><rect x="403.3" y="65" width="28.1" height="15.0" fill="rgb(244,52,44)" rx="2" ry="2" /> +<text text-anchor="" x="406.33" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >r..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>tostr_sizehint (1 samples, 2.38%)</title><a xlink:href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-tostr_sizehint-106" target="_top"><rect x="712.4" y="177" width="28.1" height="15.0" fill="rgb(217,137,22)" rx="2" ry="2" /> +<text text-anchor="" x="715.38" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >t..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>binexp_cache (1 samples, 2.38%)</title><a xlink:href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-binexp_cache-253" target="_top"><rect x="600.0" y="81" width="28.1" height="15.0" fill="rgb(246,202,7)" rx="2" ry="2" /> +<text text-anchor="" x="603.00" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >b..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:):286 (1 samples, 2.38%)</title><rect x="656.2" y="97" width="28.1" height="15.0" fill="rgb(250,144,38)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>Type (1 samples, 2.38%)</title><a xlink:href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-Type-39" target="_top"><rect x="740.5" y="177" width="28.1" height="15.0" fill="rgb(213,199,22)" rx="2" ry="2" /> +<text text-anchor="" x="743.48" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >T..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>all (42 samples, 100%)</title><rect x="10.0" y="337" width="1180.0" height="15.0" fill="rgb(205,18,32)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="347.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>== (1 samples, 2.38%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-432" target="_top"><rect x="628.1" y="49" width="28.1" height="15.0" fill="rgb(252,135,12)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >==</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_thisind_str (1 samples, 2.38%)</title><a xlink:href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_thisind_str-113" target="_top"><rect x="768.6" y="177" width="28.1" height="15.0" fill="rgb(251,121,11)" rx="2" ry="2" /> +<text text-anchor="" x="771.57" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_..</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:)):603 (1 samples, 2.38%)</title><rect x="571.9" y="65" width="28.1" height="15.0" fill="rgb(243,209,49)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (3 samples, 7.14%)</title><a xlink:href="coreio-jl-465d134c20f8b0bc664b-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-coreio-jl-print-2" target="_top"><rect x="10.0" y="209" width="84.3" height="15.0" fill="rgb(210,115,0)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="219.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</a> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>* (1 samples, 2.38%)</title><a xlink:href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54" target="_top"><rect x="431.4" y="65" width="28.1" height="15.0" fill="rgb(232,150,31)" rx="2" ry="2" /> +<text text-anchor="" x="434.43" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >*</text> +</a> +</g> +</svg> diff --git a/profiling/statprof/client-jl-74fbd6bc37c8328be022-line.html b/profiling/statprof/client-jl-74fbd6bc37c8328be022-line.html new file mode 100644 index 0000000000000000000000000000000000000000..c4050e8deb89c758779005aeeb736b62c69a77ca --- /dev/null +++ b/profiling/statprof/client-jl-74fbd6bc37c8328be022-line.html @@ -0,0 +1,4382 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## client.jl - frontend handling command line options, environment setup, +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">## and REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">have_color = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_warn = :yellow +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_error = :light_red +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_info = :cyan +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_debug = :blue +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_input = :normal +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">default_color_answer = :normal +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">color_normal = text_colors[:normal] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">function repl_color(key, default) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> env_str = get(ENV, key, "") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> c = tryparse(Int, env_str) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> c_conv = something(c, Symbol(env_str)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> haskey(text_colors, c_conv) ? c_conv : default +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">error_color() = repl_color("JULIA_ERROR_COLOR", default_color_error) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">warn_color() = repl_color("JULIA_WARN_COLOR" , default_color_warn) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">info_color() = repl_color("JULIA_INFO_COLOR" , default_color_info) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">debug_color() = repl_color("JULIA_DEBUG_COLOR" , default_color_debug) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">input_color() = text_colors[repl_color("JULIA_INPUT_COLOR", default_color_input)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">answer_color() = text_colors[repl_color("JULIA_ANSWER_COLOR", default_color_answer)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">stackframe_lineinfo_color() = repl_color("JULIA_STACKFRAME_LINEINFO_COLOR", :bold) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">stackframe_function_color() = repl_color("JULIA_STACKFRAME_FUNCTION_COLOR", :bold) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">function repl_cmd(cmd, out) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> shell_name = Base.basename(shell[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> # Immediately expand all arguments, so that typing e.g. ~/bin/foo works. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> cmd.exec .= expanduser.(cmd.exec) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(cmd.exec) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("no cmd to execute")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif cmd.exec[1] == "cd" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> new_oldpwd = pwd() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(cmd.exec) > 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("cd method only takes one argument")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif length(cmd.exec) == 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> dir = cmd.exec[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> if dir == "-" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> if !haskey(ENV, "OLDPWD") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> error("cd: OLDPWD not set") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> cd(ENV["OLDPWD"]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if !Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: this is a rather expensive way to copy a string, remove? +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> # If it's intended to simulate `cd`, it should instead be doing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> # more nearly `cd $dir && printf %s \$PWD` (with appropriate quoting), +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> # since shell `cd` does more than just `echo` the result. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> dir = read(`$shell -c "printf '%s' $(shell_escape_posixly(dir))"`, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> cd(dir) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> cd() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> ENV["OLDPWD"] = new_oldpwd +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> println(out, pwd()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if !Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> if shell_name == "fish" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> shell_escape_cmd = "begin; $(shell_escape_posixly(cmd)); and true; end" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> shell_escape_cmd = "($(shell_escape_posixly(cmd))) && true" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> cmd = `$shell -c $shell_escape_cmd` +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> run(ignorestatus(cmd)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">function ip_matches_func(ip, func::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> for fr in StackTraces.lookup(ip) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> if fr === StackTraces.UNKNOWN || fr.from_c +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> fr.func === func && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">function display_error(io::IO, er, bt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> printstyled(io, "ERROR: "; bold=true, color=Base.error_color()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> # remove REPL-related frames from interactive printing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> eval_ind = findlast(addr->ip_matches_func(addr, :eval), bt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> if eval_ind !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> bt = bt[1:eval_ind-1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> showerror(IOContext(io, :limit => true), er, bt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> println(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">display_error(er, bt) = display_error(stderr, er, bt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">display_error(er) = display_error(er, []) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">function eval_user_input(@nospecialize(ast), show_value::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> errcount, lasterr, bt = 0, (), nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> if have_color +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> print(color_normal) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> if errcount > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(display_error, lasterr, bt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> errcount, lasterr = 0, () +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> ast = Meta.lower(Main, ast) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> value = Core.eval(Main, ast) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_set_global, Cvoid, (Any, Any, Any), Main, :ans, value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(value === nothing) && show_value +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> if have_color +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> print(answer_color()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(display, value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> catch err +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> println(stderr, "Evaluation succeeded, but an error occurred while showing value of type ", typeof(value), ":") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow(err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> println() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> catch err +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> if errcount > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> println(stderr, "SYSTEM: show(lasterr) caused an error") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> errcount, lasterr = errcount+1, err +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> if errcount > 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> println(stderr, "WARNING: it is likely that something important is broken, and Julia will not be able to continue normally") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> bt = catch_backtrace() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(stdin, TTY) && println() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code">function parse_input_line(s::String; filename::String="none", depwarn=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> # For now, assume all parser warnings are depwarns +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> ex = if depwarn +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_parse_input_line, Any, (Ptr{UInt8}, Csize_t, Ptr{UInt8}, Csize_t), +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> s, sizeof(s), filename, sizeof(filename)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> with_logger(NullLogger()) do +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_parse_input_line, Any, (Ptr{UInt8}, Csize_t, Ptr{UInt8}, Csize_t), +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> s, sizeof(s), filename, sizeof(filename)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> return ex +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">parse_input_line(s::AbstractString) = parse_input_line(String(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">function parse_input_line(io::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> s = "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> s *= readline(io, keep=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> e = parse_input_line(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(isa(e,Expr) && e.head === :incomplete) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> return e +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"># detect the reason which caused an :incomplete expression +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"># from the error message +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"># NOTE: the error messages are defined in src/julia-parser.scm +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">incomplete_tag(ex) = :none +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">function incomplete_tag(ex::Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> Meta.isexpr(ex, :incomplete) || return :none +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> msg = ex.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin("string", msg) && return :string +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin("comment", msg) && return :comment +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin("requires end", msg) && return :block +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin("\"`\"", msg) && return :cmd +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin("character", msg) && return :char +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> return :other +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"># call include() on a file, ignoring if not found +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">include_ifexists(mod::Module, path::AbstractString) = isfile(path) && include(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-exec_options-193"></a> + 40 (95.24%) samples spent in exec_options<br /> + 0 (ex.), + 40 (100.00%) (incl.) + when called from + _start + <a href="client-jl-74fbd6bc37c8328be022-line.html#Lclient-jl-74fbd6bc37c8328be022-line.html-425">line 425</a><br /> + </div> + <span class="code">function exec_options(opts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> idxs = findall(x -> x == "--", ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> length(idxs) > 0 && deleteat!(ARGS, idxs[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> quiet = (opts.quiet != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> startup = (opts.startupfile != 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> history_file = (opts.historyfile != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> color_set = (opts.color != 0) # --color!=auto +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> global have_color = (opts.color == 1) # --color=on +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> global is_interactive = (opts.isinteractive != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> # pre-process command line argument list +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> arg_is_program = !isempty(ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> repl = !arg_is_program +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> cmds = unsafe_load_commands(opts.commands) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> for (cmd, arg) in cmds +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> if cmd == 'e' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> arg_is_program = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> repl = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif cmd == 'E' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> arg_is_program = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> repl = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif cmd == 'L' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> # nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "Unexpected command -$cmd'$arg'" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> # remove filename from ARGS +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> global PROGRAM_FILE = arg_is_program ? popfirst!(ARGS) : "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> # Load Distributed module only if any of the Distributed options have been specified. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> distributed_mode = (opts.worker == 1) || (opts.nprocs > 0) || (opts.machine_file != C_NULL) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> if distributed_mode +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> let Distributed = require(PkgId(UUID((0x8ba89e20_285c_5b6f, 0x9357_94700520ee1b)), "Distributed")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.eval(Main, :(const Distributed = $Distributed)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.eval(Main, :(using .Distributed)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(Main.Distributed.process_opts, opts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> # load ~/.julia/config/startup.jl file +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> startup && load_julia_startup() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> # process cmds list +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> for (cmd, arg) in cmds +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> if cmd == 'e' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.eval(Main, parse_input_line(arg)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif cmd == 'E' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(show, Core.eval(Main, parse_input_line(arg))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> println() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif cmd == 'L' +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> # load file immediately on all processors +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> if !distributed_mode +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> include(Main, arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Move this logic to Distributed and use a callback +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> @sync for p in invokelatest(Main.procs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> @async invokelatest(Main.remotecall_wait, include, p, Main, arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> # load file +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> if arg_is_program +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> # program +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> if !is_interactive +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_exit_on_sigint, Cvoid, (Cint,), 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-266"></a>266</td> + <td></td> + <td>40 (95.24%)</td> + <td> + <div class="callees"> + 40 (100.00%) + samples spent calling + <a href="sysimg-jl-58aafbf6293fe483e566-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-sysimg-jl-include-22">include</a><br /> + </div> + <span class="code"> include(Main, PROGRAM_FILE) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> repl |= is_interactive +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> if repl +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> interactiveinput = isa(stdin, TTY) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> if interactiveinput +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> global is_interactive = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> banner = (opts.banner != 0) # --banner!=no +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> banner = (opts.banner == 1) # --banner=yes +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> run_main_repl(interactiveinput, quiet, banner, history_file, color_set) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">function load_julia_startup() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> # If the user built us with a specific Base.SYSCONFDIR, check that location first for a startup.jl file +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> # If it is not found, then continue on to the relative path based on Sys.BINDIR +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> BINDIR = Sys.BINDIR::String +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> SYSCONFDIR = Base.SYSCONFDIR::String +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(SYSCONFDIR) && isfile(joinpath(BINDIR, SYSCONFDIR, "julia", "startup.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> include(Main, abspath(BINDIR, SYSCONFDIR, "julia", "startup.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> include_ifexists(Main, abspath(BINDIR, "..", "etc", "julia", "startup.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> include_ifexists(Main, abspath(homedir(), ".julia", "config", "startup.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">const repl_hooks = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> atreplinit(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">Register a one-argument function to be called before the REPL interface is initialized in +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">interactive sessions; this is useful to customize the interface. The argument of `f` is the +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">REPL object. This function should be called from within the `.julia/config/startup.jl` +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">initialization file. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code">atreplinit(f::Function) = (pushfirst!(repl_hooks, f); nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">function __atreplinit(repl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> for f in repl_hooks +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> f(repl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> catch err +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> showerror(stderr, err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> println(stderr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">_atreplinit(repl) = invokelatest(__atreplinit, repl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"># The REPL stdlib hooks into Base using this Ref +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">const REPL_MODULE_REF = Ref{Module}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"># run the requested sort of evaluation loop on stdio +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code">function run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> global active_repl +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> # load interactive-only libraries +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isdefined(Main, :InteractiveUtils) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> let InteractiveUtils = require(PkgId(UUID(0xb77e0a4c_d291_57a0_90e8_8db25a27a240), "InteractiveUtils")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.eval(Main, :(const InteractiveUtils = $InteractiveUtils)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.eval(Main, :(using .InteractiveUtils)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> catch ex +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "Failed to import InteractiveUtils into module Main" exception=(ex, catch_backtrace()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> if interactive && isassigned(REPL_MODULE_REF) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(REPL_MODULE_REF[]) do REPL +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> term_env = get(ENV, "TERM", @static Sys.iswindows() ? "" : "dumb") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> term = REPL.Terminals.TTYTerminal(term_env, stdin, stdout, stderr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> color_set || (global have_color = REPL.Terminals.hascolor(term)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> banner && Base.banner(term) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> if term.term_type == "dumb" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> active_repl = REPL.BasicREPL(term) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> quiet || @warn "Terminal not fully functional" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> active_repl = REPL.LineEditREPL(term, have_color, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> active_repl.history_file = history_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> # Make sure any displays pushed in .julia/config/startup.jl ends up above the +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> # REPLDisplay +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> pushdisplay(REPL.REPLDisplay(active_repl)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> _atreplinit(active_repl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> REPL.run_repl(active_repl, backend->(global active_repl_backend = backend)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> # otherwise provide a simple fallback +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> if interactive && !quiet +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "REPL provider not available: using basic fallback" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> banner && Base.banner() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> let input = stdin +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(input, File) || isa(input, IOStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> # for files, we can slurp in the whole thing at once +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> ex = parse_input_line(read(input, String)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> if Meta.isexpr(ex, :toplevel) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> # if we get back a list of statements, eval them sequentially +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> # as if we had parsed them sequentially +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> for stmt in ex.args +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> eval_user_input(stmt, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> body = ex.args +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> eval_user_input(ex, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(input) || !eof(input) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> if interactive +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> print("julia> ") +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> flush(stdout) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> eval_user_input(parse_input_line(input), true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">baremodule MainInclude +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code">include(fname::AbstractString) = Main.Base.include(Main, fname) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code">eval(x) = Core.eval(Main, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> eval(expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">Evaluate an expression in the global scope of the containing module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">Every `Module` (except those defined with `baremodule`) has its own 1-argument +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code">definition of `eval`, which evaluates expressions in that module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code">MainInclude.eval +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> include(path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">Evaluate the contents of the input source file in the global scope of the containing module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">Every module (except those defined with `baremodule`) has its own 1-argument +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">definition of `include`, which evaluates the file in that module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">Returns the result of the last evaluated expression of the input file. During including, +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code">a task-local include path is set to the directory containing the file. Nested calls to +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">`include` will search relative to that path. This function is typically used to load source +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">interactively, or to combine files in packages that are broken into multiple source files. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`Base.include`](@ref) to evaluate a file into another module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">MainInclude.include +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-_start-420"></a> + 40 (95.24%) samples spent in _start<br /> + </div> + <span class="code">function _start() +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> empty!(ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(ARGS, Core.ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval Main import Base.MainInclude: eval, include +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-425"></a>425</td> + <td></td> + <td>40 (95.24%)</td> + <td> + <div class="callees"> + 40 (100.00%) + samples spent calling + <a href="client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-exec_options-193">exec_options</a><br /> + </div> + <span class="code"> exec_options(JLOptions()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> catch err +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(display_error, err, catch_backtrace()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> exit(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_interactive && have_color +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> print(color_normal) +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lclient-jl-74fbd6bc37c8328be022-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/coreio-jl-465d134c20f8b0bc664b-line.html b/profiling/statprof/coreio-jl-465d134c20f8b0bc664b-line.html new file mode 100644 index 0000000000000000000000000000000000000000..9c1d8da4cbe408895008e7b0064a9e7afa470526 --- /dev/null +++ b/profiling/statprof/coreio-jl-465d134c20f8b0bc664b-line.html @@ -0,0 +1,353 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./coreio.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-coreio-jl-print-2"></a> + 3 (7.14%) samples spent in print<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + f + <a href="test-jl-6f8538a27ff3da5824d9-line.html#Ltest-jl-6f8538a27ff3da5824d9-line.html-14">line 14</a><br /> + </div> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-3"></a>3</td> + <td></td> + <td>3 (7.14%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-print-165">print</a><br /> + </div> + <span class="code">print(xs...) = print(stdout::IO, xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">println(xs...) = println(stdout::IO, xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">println(io::IO) = print(io, '\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">struct DevNull <: IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">const devnull = DevNull() +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">isreadable(::DevNull) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">iswritable(::DevNull) = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">isopen(::DevNull) = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">read(::DevNull, ::Type{UInt8}) = throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">write(::DevNull, ::UInt8) = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_write(::DevNull, ::Ptr{UInt8}, n::UInt)::Int = n +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">close(::DevNull) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">flush(::DevNull) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">wait_connected(::DevNull) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">wait_readnb(::DevNull) = wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">wait_readbyte(::DevNull) = wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">wait_close(::DevNull) = wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">eof(::DevNull) = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">let CoreIO = Union{Core.CoreSTDOUT, Core.CoreSTDERR} +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> global write, unsafe_write +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io::CoreIO, x::UInt8) = Core.write(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io::CoreIO, x::Ptr{UInt8}, nb::UInt) = Core.unsafe_write(io, x, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">stdin = devnull +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">stdout = Core.stdout +</span> + </td> + </tr> + + <tr> + <td><a name="Lcoreio-jl-465d134c20f8b0bc664b-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">stderr = Core.stderr +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/driver-jl-4d4652571be99309ac0c-line.html b/profiling/statprof/driver-jl-4d4652571be99309ac0c-line.html new file mode 100644 index 0000000000000000000000000000000000000000..c15448242c9718f688148822f5e36ac7b3e2d230 --- /dev/null +++ b/profiling/statprof/driver-jl-4d4652571be99309ac0c-line.html @@ -0,0 +1,1393 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/ssair/driver.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">using Core: LineInfoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">const NullLineInfo = LineInfoNode(@__MODULE__, Symbol(""), Symbol(""), 0, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">if false +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> import Base: Base, @show +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> macro show(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> return :(println(stdout, $(QuoteNode(s)), " = ", $(esc(s)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/ir.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/domtree.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/slot2ssa.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/queries.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/passes.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/inlining.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/verify.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/legacy.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">#@isdefined(Base) && include("compiler/ssair/show.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">function normalize_expr(stmt::Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt.head === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> return GotoIfNot(stmt.args[1], stmt.args[2]::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head === :return +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> return (length(stmt.args) == 0) ? ReturnNode(nothing) : ReturnNode(stmt.args[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head === :unreachable +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> return ReturnNode() +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">function normalize(@nospecialize(stmt), meta::Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt.head == :meta +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> args = stmt.args +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(args) > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(meta, stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head === :line +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing # deprecated - we shouldn't encounter this +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> return normalize_expr(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">function just_construct_ssa(ci::CodeInfo, code::Vector{Any}, nargs::Int, sv::OptimizationState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> # Go through and add an unreachable node after every +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> # Union{} call. Then reindex labels. +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> idx = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> oldidx = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> changemap = fill(0, length(code)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> while idx <= length(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> if code[idx] isa Expr && ci.ssavaluetypes[idx] === Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(idx < length(code) && isexpr(code[idx+1], :unreachable)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> insert!(code, idx + 1, ReturnNode()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> insert!(ci.codelocs, idx + 1, ci.codelocs[idx]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> insert!(ci.ssavaluetypes, idx + 1, Union{}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> if oldidx < length(changemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> changemap[oldidx + 1] = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> oldidx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> renumber_ir_elements!(code, changemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> inbounds_depth = 0 # Number of stacked inbounds +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> meta = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> flags = fill(0x00, length(code)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = code[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> if isexpr(stmt, :inbounds) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> arg1 = stmt.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> if arg1 === true # push +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> inbounds_depth += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif arg1 === false # clear +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> inbounds_depth = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif inbounds_depth > 0 # pop +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> inbounds_depth -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = normalize(stmt, meta) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> code[i] = stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(stmt === nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> if inbounds_depth > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> flags[i] |= IR_FLAG_INBOUNDS +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> strip_trailing_junk!(ci, code, flags) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> cfg = compute_basic_blocks(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> defuse_insts = scan_slot_def_use(nargs, ci, code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "domtree 1" domtree = construct_domtree(cfg) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> ir = let code = Any[nothing for _ = 1:length(code)] +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> argtypes = sv.slottypes[1:(nargs+1)] +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> IRCode(code, Any[], ci.codelocs, flags, cfg, collect(LineInfoNode, ci.linetable), argtypes, meta, sv.sp) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "construct_ssa" ir = construct_ssa!(ci, code, ir, domtree, defuse_insts, nargs, sv.sp, sv.slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> return ir +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-driver-jl-run_passes-113"></a> + 1 (2.70%) samples spent in run_passes<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + optimize + <a href="optimize-jl-9a25bbc7af72ab9ad4ff-line.html#Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-166">line 166</a><br /> + </div> + <span class="code">function run_passes(ci::CodeInfo, nargs::Int, sv::OptimizationState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> ir = just_construct_ssa(ci, copy_exprargs(ci.code), nargs, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ("after_construct", ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Domsorting can produce an updated domtree - no need to recompute here +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "compact 1" ir = compact!(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "Inlining" ir = ssa_inlining_pass!(ir, ir.linetable, sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> #@timeit "verify 2" verify_ir(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "domtree 2" domtree = construct_domtree(ir.cfg) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-121"></a>121</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="ir-jl-bebdc9bf648f41024d37-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-compact-1023">compact!</a><br /> + </div> + <span class="code"> ir = compact!(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ("before_sroa", ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "SROA" ir = getfield_elim_pass!(ir, domtree) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ir.new_nodes +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ("after_sroa", ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> ir = adce_pass!(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ("after_adce", ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "type lift" ir = type_lift_pass!(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "compact 3" ir = compact!(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> #@Base.show ir +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> if JLOptions().debug_level == 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> @timeit "verify 3" (verify_ir(ir); verify_linetable(ir.linetable)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> return ir +</span> + </td> + </tr> + + <tr> + <td><a name="Ldriver-jl-4d4652571be99309ac0c-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/event-jl-9f2b370029d9fd3c8bef-line.html b/profiling/statprof/event-jl-9f2b370029d9fd3c8bef-line.html new file mode 100644 index 0000000000000000000000000000000000000000..b265660bc0d54a83aac354f2a4ce4cf263576845 --- /dev/null +++ b/profiling/statprof/event-jl-9f2b370029d9fd3c8bef-line.html @@ -0,0 +1,4863 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./event.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## condition variables +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">Create an edge-triggered event source that tasks can wait for. Tasks that call [`wait`](@ref) on a +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">`Condition` are suspended and queued. Tasks are woken up when [`notify`](@ref) is later called on +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">the `Condition`. Edge triggering means that only tasks waiting at the time [`notify`](@ref) is +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">called can be woken up. For level-triggered notifications, you must keep extra state to keep +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">track of whether a notification has happened. The [`Channel`](@ref) type does +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">this, and so can be used for level-triggered events. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> waitq::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition() = new([]) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> wait([x]) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">Block the current task until some event occurs, depending on the type of the argument: +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">* [`Channel`](@ref): Wait for a value to be appended to the channel. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">* [`Condition`](@ref): Wait for [`notify`](@ref) on a condition. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">* `Process`: Wait for a process or process chain to exit. The `exitcode` field of a process +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> can be used to determine success or failure. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">* [`Task`](@ref): Wait for a `Task` to finish. If the task fails with an exception, the +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> exception is propagated (re-thrown in the task that called `wait`). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">* [`RawFD`](@ref): Wait for changes on a file descriptor (see the `FileWatching` package). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">If no argument is passed, the task blocks for an undefined period. A task can only be +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">restarted by an explicit call to [`schedule`](@ref) or [`yieldto`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">Often `wait` is called within a `while` loop to ensure a waited-for condition is met before +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">proceeding. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">function wait(c::Condition) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> ct = current_task() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(c.waitq, ct) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> return wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> catch +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> filter!(x->x!==ct, c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(condition, val=nothing; all=true, error=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">Wake up tasks waiting for a condition, passing them `val`. If `all` is `true` (the default), +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">all waiting tasks are woken, otherwise only one is. If `error` is `true`, the passed value +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">is raised as an exception in the woken tasks. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">Return the count of tasks woken up. Return 0 if no tasks are waiting on `condition`. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">notify(c::Condition, @nospecialize(arg = nothing); all=true, error=false) = notify(c, arg, all, error) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">function notify(c::Condition, arg, all, error) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> if all +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt = length(c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> for t in c.waitq +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> error ? schedule(t, arg, error=error) : schedule(t, arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> empty!(c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !isempty(c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> t = popfirst!(c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> error ? schedule(t, arg, error=error) : schedule(t, arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> cnt +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">notify_error(c::Condition, err) = notify(c, err, true, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">n_waiters(c::Condition) = length(c.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">## scheduler and work queue +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">global const Workqueue = Task[] +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">function enq_work(t::Task) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state == :runnable || error("schedule: Task not runnable") +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_stop, Cvoid, (Ptr{Cvoid},), eventloop()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(Workqueue, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state = :queued +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> return t +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">schedule(t::Task) = enq_work(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> schedule(t::Task, [val]; error=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">Add a [`Task`](@ref) to the scheduler's queue. This causes the task to run constantly when the system +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">is otherwise idle, unless the task performs a blocking operation such as [`wait`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">If a second argument `val` is provided, it will be passed to the task (via the return value of +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">[`yieldto`](@ref)) when it runs again. If `error` is `true`, the value is raised as an exception in +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">the woken task. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a5() = sum(i for i in 1:1000); +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">julia> b = Task(a5); +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">julia> istaskstarted(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">julia> schedule(b); +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">julia> yield(); +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">julia> istaskstarted(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">julia> istaskdone(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">function schedule(t::Task, arg; error=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> # schedule a task to be (re)started with the given value or exception +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> if error +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> t.exception = arg +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> t.result = arg +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> return enq_work(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"># fast version of `schedule(t, arg); wait()` +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">function schedule_and_wait(t::Task, arg=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state == :runnable || error("schedule: Task not runnable") +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(Workqueue) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> return yieldto(t, arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> t.result = arg +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(Workqueue, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state = :queued +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> return wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> yield() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code">Switch to the scheduler to allow another scheduled task to run. A task that calls this +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">function is still runnable, and will be restarted immediately if there are no other runnable +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">tasks. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">yield() = (enq_work(current_task()); wait()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> yield(t::Task, arg = nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">A fast, unfair-scheduling version of `schedule(t, arg); yield()` which +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code">immediately yields to `t` before calling the scheduler. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code">function yield(t::Task, @nospecialize x = nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state == :runnable || error("schedule: Task not runnable") +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> t.result = x +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> enq_work(current_task()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> return try_yieldto(ensure_rescheduled, Ref(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> yieldto(t::Task, arg = nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">Switch to the given task. The first time a task is switched to, the task's function is +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">called with no arguments. On subsequent switches, `arg` is returned from the task's last +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">call to `yieldto`. This is a low-level call that only switches tasks, not considering states +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">or scheduling in any way. Its use is discouraged. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">function yieldto(t::Task, @nospecialize x = nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> t.result = x +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> return try_yieldto(identity, Ref(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">function try_yieldto(undo, reftask::Ref{Task}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_switchto, Cvoid, (Any,), reftask) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> catch e +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> undo(reftask[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> ct = current_task() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> exc = ct.exception +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> if exc !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> ct.exception = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(exc) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> result = ct.result +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> ct.result = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"># yield to a task, throwing an exception in it +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code">function throwto(t::Task, @nospecialize exc) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> t.exception = exc +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> return yieldto(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">function ensure_rescheduled(othertask::Task) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> ct = current_task() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> if ct !== othertask && othertask.state == :runnable +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> # we failed to yield to othertask +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> # return it to the head of the queue to be scheduled later +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> pushfirst!(Workqueue, othertask) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> othertask.state = :queued +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> if ct.state == :queued +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> # if the current task was queued, +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> # also need to return it to the runnable state +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> # before throwing an error +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> i = findfirst(t->t===ct, Workqueue) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> i === nothing || deleteat!(Workqueue, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> ct.state = :runnable +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline function poptask() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> t = popfirst!(Workqueue) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.state != :queued +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> # assume this somehow got queued twice, +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> # probably broken now, but try discarding this switch and keep going +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> # can't throw here, because it's probably not the fault of the caller to wait +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> # and don't want to use print() here, because that may try to incur a task switch +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_safe_printf, Cvoid, (Ptr{UInt8}, Int32...), +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> "\nWARNING: Workqueue inconsistency detected: popfirst!(Workqueue).state != :queued\n") +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> t.state = :runnable +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> return Ref(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-event-jl-wait-243"></a> + 3 (7.14%) samples spent in wait<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + uv_write + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#Lstream-jl-9a841f596a6f3ffbe5b9-line.html-782">line 782</a><br /> + </div> + <span class="code">function wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(Workqueue) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-246"></a>246</td> + <td></td> + <td>3 (7.14%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="libuv-jl-530c66ad95b5a57763e9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98">process_events</a><br /> + </div> + <span class="code"> c = process_events(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> if c == 0 && eventloop() != C_NULL && isempty(Workqueue) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> # if there are no active handles and no runnable tasks, just +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> # wait for signals. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> pause() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> reftask = poptask() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> if reftask !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> result = try_yieldto(ensure_rescheduled, reftask) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> process_events(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> # return when we come out of the queue +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> # unreachable +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> pause() = ccall(:Sleep, stdcall, Cvoid, (UInt32,), 0xffffffff) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> pause() = ccall(:pause, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code">## async event notifications +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> AsyncCondition() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">Create a async condition that wakes up tasks waiting for it +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code">(by calling [`wait`](@ref) on the object) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code">when notified from C by a call to `uv_async_send`. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">Waiting tasks are woken with an error when the object is closed (by [`close`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`isopen`](@ref) to check whether it is still active. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct AsyncCondition +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> handle::Ptr{Cvoid} +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> cond::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> function AsyncCondition() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> this = new(Libc.malloc(_sizeof_uv_async), Condition(), true) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> associate_julia_struct(this.handle, this) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> finalizer(uvfinalize, this) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_async_init, Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}), +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> eventloop(), this, uv_jl_asynccb::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> if err != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> #TODO: this codepath is currently not tested +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(this.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> this.handle = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(_UVError("uv_async_init", err)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> return this +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> AsyncCondition(callback::Function) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">Create a async condition that calls the given `callback` function. The `callback` is passed one argument, +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">the async condition object itself. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">function AsyncCondition(cb::Function) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> async = AsyncCondition() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> waiter = Task(function() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(async) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> success = try +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(async) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> catch exc # ignore possible exception on close() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(exc, EOFError) || rethrow(exc) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> success && cb(async) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> end) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> # must start the task right away so that it can wait for the AsyncCondition before +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> # we re-enter the event loop. this avoids a race condition. see issue #12719 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> yield(waiter) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> return async +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">## timer-based notifications +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> Timer(delay; interval = 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">Create a timer that wakes up tasks waiting for it (by calling [`wait`](@ref) on the timer object). +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">Waiting tasks are woken after an initial delay of `delay` seconds, and then repeating with the given +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code">`interval` in seconds. If `interval` is equal to `0`, the timer is only triggered once. When +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code">the timer is closed (by [`close`](@ref) waiting tasks are woken with an error. Use [`isopen`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">to check whether a timer is still active. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct Timer +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> handle::Ptr{Cvoid} +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> cond::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> function Timer(timeout::Real; interval::Real = 0.0) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> timeout ≥ 0 || throw(ArgumentError("timer cannot have negative timeout of $timeout seconds")) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> interval ≥ 0 || throw(ArgumentError("timer cannot have negative repeat interval of $interval seconds")) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> this = new(Libc.malloc(_sizeof_uv_timer), Condition(), true) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_timer_init, Cint, (Ptr{Cvoid}, Ptr{Cvoid}), eventloop(), this) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> if err != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> #TODO: this codepath is currently not tested +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(this.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> this.handle = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(_UVError("uv_timer_init", err)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> associate_julia_struct(this.handle, this) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> finalizer(uvfinalize, this) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_update_time, Cvoid, (Ptr{Cvoid},), eventloop()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_timer_start, Cint, (Ptr{Cvoid}, Ptr{Cvoid}, UInt64, UInt64), +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> this, uv_jl_timercb::Ptr{Cvoid}, +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> UInt64(round(timeout * 1000)) + 1, UInt64(round(interval * 1000))) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> return this +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_convert(::Type{Ptr{Cvoid}}, t::Timer) = t.handle +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_convert(::Type{Ptr{Cvoid}}, async::AsyncCondition) = async.handle +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">function wait(t::Union{Timer, AsyncCondition}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen(t) || throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> stream_wait(t, t.cond) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code">isopen(t::Union{Timer, AsyncCondition}) = t.isopen +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code">function close(t::Union{Timer, AsyncCondition}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.handle != C_NULL && isopen(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> t.isopen = false +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(t, Timer) && ccall(:uv_timer_stop, Cint, (Ptr{Cvoid},), t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code">function uvfinalize(t::Union{Timer, AsyncCondition}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.handle != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> disassociate_julia_struct(t.handle) # not going to call the usual close hooks +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> close(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> t.handle = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> t.isopen = false +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">function _uv_hook_close(t::Union{Timer, AsyncCondition}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> uvfinalize(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> notify_error(t.cond, EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_asynccb(handle::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> async = @handle_as handle AsyncCondition +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(async.cond) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_timercb(handle::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> t = @handle_as handle Timer +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> if ccall(:uv_timer_get_repeat, UInt64, (Ptr{Cvoid},), t) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> # timer is stopped now +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> close(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(t.cond) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> sleep(seconds) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">Block the current task for a specified number of seconds. The minimum sleep time is 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code">millisecond or input of `0.001`. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code">function sleep(sec::Real) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> sec ≥ 0 || throw(ArgumentError("cannot sleep for $sec seconds")) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(Timer(sec)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"># timer with repeated callback +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> Timer(callback::Function, delay; interval = 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">Create a timer that wakes up tasks waiting for it (by calling [`wait`](@ref) on the timer object) and +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">calls the function `callback`. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">Waiting tasks are woken and the function `callback` is called after an initial delay of `delay` seconds, +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">and then repeating with the given `interval` in seconds. If `interval` is equal to `0`, the timer +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">is only triggered once. The function `callback` is called with a single argument, the timer itself. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">When the timer is closed (by [`close`](@ref) waiting tasks are woken with an error. Use [`isopen`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">to check whether a timer is still active. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">Here the first number is printed after a delay of two seconds, then the following numbers are printed quickly. +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">```julia-repl +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">julia> begin +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> cb(timer) = (global i += 1; println(i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Timer(cb, 2, interval = 0.2) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> sleep(0.5) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> close(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">function Timer(cb::Function, timeout::Real; interval::Real = 0.0) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Timer(timeout, interval = interval) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> waiter = Task(function() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> success = try +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> true +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> catch exc # ignore possible exception on close() +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(exc, EOFError) || rethrow(exc) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> false +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> success && cb(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> end) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> # must start the task right away so that it can wait for the Timer before +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> # we re-enter the event loop. this avoids a race condition. see issue #12719 +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> yield(waiter) +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> return t +</span> + </td> + </tr> + + <tr> + <td><a name="Levent-jl-9f2b370029d9fd3c8bef-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/fastshortest-jl-253e248589e118f4dde7-line.html b/profiling/statprof/fastshortest-jl-253e248589e118f4dde7-line.html new file mode 100644 index 0000000000000000000000000000000000000000..0d7144d394f743a5aa7ca1b767223d8c137c8375 --- /dev/null +++ b/profiling/statprof/fastshortest-jl-253e248589e118f4dde7-line.html @@ -0,0 +1,1279 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia, but is derived from +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"># https://github.com/google/double-conversion which has the following license +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"># Copyright 2006-2014, the V8 project authors. All rights reserved. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># Redistribution and use in source and binary forms, with or without +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"># modification, are permitted provided that the following conditions are +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"># met: +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions of source code must retain the above copyright +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"># notice, this list of conditions and the following disclaimer. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions in binary form must reproduce the above +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"># copyright notice, this list of conditions and the following +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"># disclaimer in the documentation and/or other materials provided +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"># with the distribution. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"># * Neither the name of Google Inc. nor the names of its +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"># contributors may be used to endorse or promote products derived +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"># from this software without specific prior written permission. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"># THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"># "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"># SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"># DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"># THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"># (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"># OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">const kMinExp = -60 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">const kMaxExp = -32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34"></a> + 1 (2.38%) samples spent in roundweed<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + digitgen + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-98">line 98</a><br /> + </div> + <span class="code">function roundweed(buffer,len,rest,tk,unit,kappa,too_high::UInt64,unsafe_interval::UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> small = too_high - unit +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> big = too_high + unit +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> while rest < small && +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_interval - rest >= tk && +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> (rest + tk < small || +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> small - rest >= rest + tk - small) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer[len-1] -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> rest += tk +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> if rest < big && +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_interval - rest >= tk && +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> (rest + tk < big || +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> big - rest > rest + tk - big) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> return false, kappa +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-50"></a>50</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> return (2 * unit <= rest) && (rest <= unsafe_interval - 4 * unit), kappa +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">const SmallPowersOfTen = [ +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> 0, 1, 10, 100, 1000, 10000, 100000, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> 1000000, 10000000, 100000000, 1000000000] +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">function bigpowten(n,n_bits) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> guess = ((n_bits + 1) * 1233) >> 12 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> guess += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> i = SmallPowersOfTen[guess+1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> return n < i ? (SmallPowersOfTen[guess], guess-1) : (i,guess) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64"></a> + 8 (19.05%) samples spent in digitgen<br /> + 1 (100.00%) (ex.), + 8 (100.00%) (incl.) + when called from + fastshortest + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-114">line 114</a><br /> + </div> + <span class="code">function digitgen(low,w,high,buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> unit::UInt64 = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> one = Float(unit << -w.e, w.e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> too_high = Float(high.s+unit,high.e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_interval = too_high - Float(low.s-unit,low.e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> integrals = too_high.s >> -one.e +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> fractionals = too_high.s & (one.s-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> divisor, kappa = bigpowten(integrals, 64 + one.e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> len = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> rest = UInt64(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> while kappa > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-75"></a>75</td> + <td></td> + <td>2 (4.76%)</td> + <td> + <div class="callees"> + 2 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-div">div</a><br /> + </div> + <span class="code"> digit = div(integrals,divisor) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer[len] = 0x30 + digit +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> len += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> integrals %= divisor +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> kappa -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> rest = (UInt64(integrals) << -one.e) + fractionals +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> if rest < unsafe_interval.s +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> r, kappa = roundweed(buffer, len, rest, UInt64(divisor) << -one.e, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> unit,kappa,(too_high - w).s,unsafe_interval.s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> return r, kappa, len +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> divisor = div(divisor,10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> fractionals *= 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> unit *= 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_interval = Float(unsafe_interval.s*10,unsafe_interval.e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-92"></a>92</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-603">>></a><br /> + </div> + <span class="code"> digit = fractionals >> -one.e +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-93"></a>93</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-803">+</a><br /> + </div> + <span class="code"> buffer[len] = 0x30 + digit +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> len += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> fractionals &= one.s - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> kappa -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-97"></a>97</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-427"><</a><br /> + </div> + <span class="code"> if fractionals < unsafe_interval.s +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-98"></a>98</td> + <td></td> + <td>2 (4.76%)</td> + <td> + <div class="callees"> + 1 (50.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54">*</a><br /> + 1 (50.00%) + samples spent calling + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34">roundweed</a><br /> + </div> + <span class="code"> r, kappa = roundweed(buffer,len,fractionals,one.s, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> unit,kappa,(too_high - w).s*unit,unsafe_interval.s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-100"></a>100</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> return r, kappa, len +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105"></a> + 11 (26.19%) samples spent in fastshortest<br /> + 1 (100.00%) (ex.), + 11 (100.00%) (incl.) + when called from + grisu + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-71">line 71</a><br /> + </div> + <span class="code">function fastshortest(v, buffer = Vector{UInt8}(undef, 17)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> f = normalize(Float64(v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-107"></a>107</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalizedbound-120">normalizedbound</a><br /> + </div> + <span class="code"> bound_minus, bound_plus = normalizedbound(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> ten_mk_min_exp = kMinExp - (f.e + FloatSignificandSize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> ten_mk_max_exp = kMaxExp - (f.e + FloatSignificandSize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-110"></a>110</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-binexp_cache-253">binexp_cache</a><br /> + </div> + <span class="code"> cp = binexp_cache(ten_mk_min_exp,ten_mk_max_exp) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> scaled_w = f * cp +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> scaled_bound_minus = bound_minus * cp +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> scaled_bound_plus = bound_plus * cp +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-114"></a>114</td> + <td></td> + <td>8 (19.05%)</td> + <td> + <div class="callees"> + 8 (100.00%) + samples spent calling + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64">digitgen</a><br /> + </div> + <span class="code"> r, kappa, len = digitgen(scaled_bound_minus,scaled_w, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> scaled_bound_plus,buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> decimal_exponent = -cp.de + kappa +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-117"></a>117</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> return r, len, decimal_exponent+len-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfastshortest-jl-253e248589e118f4dde7-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/files.html b/profiling/statprof/files.html new file mode 100644 index 0000000000000000000000000000000000000000..e89ea0d0de04aeda681961c46e8a416dac52a1ea --- /dev/null +++ b/profiling/statprof/files.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + <script src="sorttable.js"></script> + <title>StatProfilerHTML.jl: file list</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table class="sortable"> + <caption>Files, sorted by exclusive sample count</caption> + <tr> + <th class="sorttable_sorted">Exclusive</th> + <th>Report</th> + </tr> + + <tr> + <td sorttable_customkey="14">14 (33.33%)</td> + <td><a href="string-jl-d20bff96b5e2c46b112e-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="8">8 (19.05%)</td> + <td><a href="int-jl-af434f8f2b4fe43f173a-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="6">6 (14.29%)</td> + <td><a href="io-jl-f839edf29063078eece4-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="3">3 (7.14%)</td> + <td><a href="fastshortest-jl-253e248589e118f4dde7-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="3">3 (7.14%)</td> + <td><a href="libuv-jl-530c66ad95b5a57763e9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="3">3 (7.14%)</td> + <td><a href="iobuffer-jl-0cfbb4403b3061764f48-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="2">2 (4.76%)</td> + <td><a href="bignums-jl-e031ee9c77e42cd3aafb-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td><a href="grisu-jl-fab39581eb10ad2e545a-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td><a href="promotion-jl-fe649671ed190521a171-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td><a href="array-jl-e331915c4fb281d94775-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="io-jl-7061b86fd468f75a7694-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="test-jl-6f8538a27ff3da5824d9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="operators-jl-714ade2c8745dd55a410-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="client-jl-74fbd6bc37c8328be022-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="float-jl-2e7d768064d970d2b754-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="boot-jl-1c95b3ccecba8d7f1acb-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="loading-jl-267f08df202e5203e249-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="gcutils-jl-226c838c61f0891410cd-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="stream-jl-9a841f596a6f3ffbe5b9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="Profile-jl-e79abb67faac09cf5e9b-line.html">/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="sysimg-jl-58aafbf6293fe483e566-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="coreio-jl-465d134c20f8b0bc664b-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./coreio.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="event-jl-9f2b370029d9fd3c8bef-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./event.jl</a></td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td><a href="nothing-0feca720e2c29dafb2c9-line.html">nothing</a></td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/float-jl-2e7d768064d970d2b754-line.html b/profiling/statprof/float-jl-2e7d768064d970d2b754-line.html new file mode 100644 index 0000000000000000000000000000000000000000..c0f4dd85612f3565436067a00262daf9ab413667 --- /dev/null +++ b/profiling/statprof/float-jl-2e7d768064d970d2b754-line.html @@ -0,0 +1,2651 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia, but is derived from +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"># https://github.com/google/double-conversion which has the following license +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"># Copyright 2006-2014, the V8 project authors. All rights reserved. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># Redistribution and use in source and binary forms, with or without +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"># modification, are permitted provided that the following conditions are +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"># met: +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions of source code must retain the above copyright +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"># notice, this list of conditions and the following disclaimer. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># * Redistributions in binary form must reproduce the above +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"># copyright notice, this list of conditions and the following +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"># disclaimer in the documentation and/or other materials provided +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"># with the distribution. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"># * Neither the name of Google Inc. nor the names of its +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"># contributors may be used to endorse or promote products derived +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"># from this software without specific prior written permission. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"># +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"># THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"># "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"># SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"># LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"># DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"># THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"># (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"># OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">import Base: -, * +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">struct Float +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> s::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> e::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> de::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">Float() = Float(0,0,0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">Float(x,y) = Float(x,y,Int32(0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">Float(d::AbstractFloat) = Float(_significand(d), _exponent(d)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"># Consts +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">const Float10MSBits = 0xFFC0000000000000 # used normalize(Float) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">const FloatSignMask = 0x8000000000000000 # used in normalize(Float) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">const FloatSignificandSize = Int32(64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalize-48"></a> + 1 (2.38%) samples spent in normalize<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + normalizedbound + <a href="float-jl-2e7d768064d970d2b754-line.html#Lfloat-jl-2e7d768064d970d2b754-line.html-122">line 122</a><br /> + </div> + <span class="code">function normalize(v::Float) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> f = v.s +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> e::Int32 = v.e +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-51"></a>51</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-432">==</a><br /> + </div> + <span class="code"> while (f & Float10MSBits) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> f <<= 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> e -= 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> while (f & FloatSignMask) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> f <<= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> e -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> return Float(f,e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">function normalize(v::Float64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> s = _significand(v); e = _exponent(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> while (s & HiddenBit(Float64)) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> s <<= UInt64(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> e -= Int32(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> s <<= UInt64(FloatSignificandSize - SignificandSize(Float64)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> e -= Int32( FloatSignificandSize - SignificandSize(Float64)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> return Float(s, e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"># Float128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">#DenormalExponent(::Type{Float128}) = Int32(-ExponentBias(Float128) + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">#ExponentMask(::Type{Float128}) = 0x7fff0000000000000000000000000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">#PhysicalSignificandSize(::Type{Float128}) = Int32(112) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">#SignificandSize(::Type{Float128}) = Int32(113) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">#ExponentBias(::Type{Float128}) = Int32(0x00003fff + PhysicalSignificandSize(Float128)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">#SignificandMask(::Type{Float128}) = 0x0000ffffffffffffffffffffffffffff +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">#HiddenBit(::Type{Float128}) = 0x00010000000000000000000000000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">#uint_t(d::Float128) = reinterpret(UInt128,d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"># Float64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">DenormalExponent(::Type{Float64}) = Int32(-ExponentBias(Float64) + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentMask(::Type{Float64}) = 0x7FF0000000000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">PhysicalSignificandSize(::Type{Float64}) = Int32(52) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandSize(::Type{Float64}) = Int32(53) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentBias(::Type{Float64}) = Int32(0x3FF + PhysicalSignificandSize(Float64)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandMask(::Type{Float64}) = 0x000FFFFFFFFFFFFF +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code">HiddenBit(::Type{Float64}) = 0x0010000000000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">uint_t(d::Float64) = reinterpret(UInt64,d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"># Float32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">DenormalExponent(::Type{Float32}) = Int32(-ExponentBias(Float32) + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentMask(::Type{Float32}) = 0x7F800000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">PhysicalSignificandSize(::Type{Float32}) = Int32(23) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandSize(::Type{Float32}) = Int32(24) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentBias(::Type{Float32}) = Int32(0x7F + PhysicalSignificandSize(Float32)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandMask(::Type{Float32}) = 0x007FFFFF +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">HiddenBit(::Type{Float32}) = 0x00800000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">uint_t(d::Float32) = reinterpret(UInt32,d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"># Float16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">DenormalExponent(::Type{Float16}) = Int32(-ExponentBias(Float16) + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentMask(::Type{Float16}) = 0x7c00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">PhysicalSignificandSize(::Type{Float16}) = Int32(10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandSize(::Type{Float16}) = Int32(11) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">ExponentBias(::Type{Float16}) = Int32(0x000f + PhysicalSignificandSize(Float16)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">SignificandMask(::Type{Float16}) = 0x03ff +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">HiddenBit(::Type{Float16}) = 0x0400 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">uint_t(d::Float16) = reinterpret(UInt16,d) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">function _exponent(d::T) where T<:AbstractFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> isdenormal(d) && return DenormalExponent(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> biased_e::Int32 = Int32((uint_t(d) & ExponentMask(T)) >> PhysicalSignificandSize(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int32(biased_e - ExponentBias(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">function _significand(d::T) where T<:AbstractFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> s = uint_t(d) & SignificandMask(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> return !isdenormal(d) ? s + HiddenBit(T) : s +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">isdenormal(d::T) where {T<:AbstractFloat} = (uint_t(d) & ExponentMask(T)) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalizedbound-120"></a> + 1 (2.38%) samples spent in normalizedbound<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + fastshortest + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-107">line 107</a><br /> + </div> + <span class="code">function normalizedbound(f::AbstractFloat) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> v = Float(_significand(f),_exponent(f)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-122"></a>122</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalize-48">normalize</a><br /> + </div> + <span class="code"> m_plus = normalize(Float((v.s << 1) + 1, v.e - 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> if lowerboundaryiscloser(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> m_minus = Float((v.s << 2) - 1, v.e - 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> m_minus = Float((v.s << 1) - 1, v.e - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> return Float(m_minus.s << (m_minus.e - m_plus.e), m_plus.e), m_plus +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">function lowerboundaryiscloser(f::T) where T<:AbstractFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> physical_significand_is_zero = (uint_t(f) & SignificandMask(T)) == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> return physical_significand_is_zero && (_exponent(f) != DenormalExponent(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">(-)(a::Float,b::Float) = Float(a.s - b.s,a.e,a.de) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">const FloatM32 = 0xFFFFFFFF +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">function (*)(this::Float,other::Float) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> a::UInt64 = this.s >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> b::UInt64 = this.s & FloatM32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> c::UInt64 = other.s >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> d::UInt64 = other.s & FloatM32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> ac::UInt64 = a * c +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> bc::UInt64 = b * c +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> ad::UInt64 = a * d +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> bd::UInt64 = b * d +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> tmp::UInt64 = (bd >> 32) + (ad & FloatM32) + (bc & FloatM32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> # By adding 1U << 31 to tmp we round the final result. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> # Halfway cases will be round up. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> tmp += UInt64(1) << 31 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> result_f::UInt64 = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> return Float(result_f,this.e + other.e + 64,this.de) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">const CachedPowers = Float[ +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xfa8fd5a0081c0288, -1220, -348), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xbaaee17fa23ebf76, -1193, -340), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8b16fb203055ac76, -1166, -332), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xcf42894a5dce35ea, -1140, -324), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9a6bb0aa55653b2d, -1113, -316), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xe61acf033d1a45df, -1087, -308), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xab70fe17c79ac6ca, -1060, -300), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xff77b1fcbebcdc4f, -1034, -292), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xbe5691ef416bd60c, -1007, -284), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8dd01fad907ffc3c, -980, -276), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd3515c2831559a83, -954, -268), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9d71ac8fada6c9b5, -927, -260), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xea9c227723ee8bcb, -901, -252), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xaecc49914078536d, -874, -244), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x823c12795db6ce57, -847, -236), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc21094364dfb5637, -821, -228), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9096ea6f3848984f, -794, -220), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd77485cb25823ac7, -768, -212), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa086cfcd97bf97f4, -741, -204), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xef340a98172aace5, -715, -196), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb23867fb2a35b28e, -688, -188), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x84c8d4dfd2c63f3b, -661, -180), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc5dd44271ad3cdba, -635, -172), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x936b9fcebb25c996, -608, -164), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xdbac6c247d62a584, -582, -156), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa3ab66580d5fdaf6, -555, -148), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xf3e2f893dec3f126, -529, -140), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb5b5ada8aaff80b8, -502, -132), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x87625f056c7c4a8b, -475, -124), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc9bcff6034c13053, -449, -116), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x964e858c91ba2655, -422, -108), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xdff9772470297ebd, -396, -100), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa6dfbd9fb8e5b88f, -369, -92), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xf8a95fcf88747d94, -343, -84), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb94470938fa89bcf, -316, -76), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8a08f0f8bf0f156b, -289, -68), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xcdb02555653131b6, -263, -60), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x993fe2c6d07b7fac, -236, -52), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xe45c10c42a2b3b06, -210, -44), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xaa242499697392d3, -183, -36), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xfd87b5f28300ca0e, -157, -28), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xbce5086492111aeb, -130, -20), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8cbccc096f5088cc, -103, -12), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd1b71758e219652c, -77, -4), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9c40000000000000, -50, 4), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xe8d4a51000000000, -24, 12), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xad78ebc5ac620000, 3, 20), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x813f3978f8940984, 30, 28), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc097ce7bc90715b3, 56, 36), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8f7e32ce7bea5c70, 83, 44), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd5d238a4abe98068, 109, 52), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9f4f2726179a2245, 136, 60), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xed63a231d4c4fb27, 162, 68), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb0de65388cc8ada8, 189, 76), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x83c7088e1aab65db, 216, 84), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc45d1df942711d9a, 242, 92), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x924d692ca61be758, 269, 100), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xda01ee641a708dea, 295, 108), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa26da3999aef774a, 322, 116), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xf209787bb47d6b85, 348, 124), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb454e4a179dd1877, 375, 132), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x865b86925b9bc5c2, 402, 140), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xc83553c5c8965d3d, 428, 148), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x952ab45cfa97a0b3, 455, 156), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xde469fbd99a05fe3, 481, 164), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa59bc234db398c25, 508, 172), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xf6c69a72a3989f5c, 534, 180), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xb7dcbf5354e9bece, 561, 188), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x88fcf317f22241e2, 588, 196), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xcc20ce9bd35c78a5, 614, 204), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x98165af37b2153df, 641, 212), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xe2a0b5dc971f303a, 667, 220), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xa8d9d1535ce3b396, 694, 228), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xfb9b7cd9a4a7443c, 720, 236), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xbb764c4ca7a44410, 747, 244), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8bab8eefb6409c1a, 774, 252), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd01fef10a657842c, 800, 260), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9b10a4e5e9913129, 827, 268), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xe7109bfba19c0c9d, 853, 276), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xac2820d9623bf429, 880, 284), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x80444b5e7aa7cf85, 907, 292), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xbf21e44003acdd2d, 933, 300), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x8e679c2f5e44ff8f, 960, 308), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xd433179d9c8cb841, 986, 316), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0x9e19db92b4e31ba9, 1013, 324), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xeb96bf6ebadf77d9, 1039, 332), +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> Float(0xaf87023b9bf0ee6b, 1066, 340)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">const CachedPowersLength = length(CachedPowers) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">const CachedPowersOffset = 348 # -1 * the first decimal_exponent. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">const D_1_LOG2_10 = 0.30102999566398114 # 1 / lg(10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"># Difference between the decimal exponents in the table above. +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">const DecimalExponentDistance = 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">const MinDecimalExponent = -348 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">const MaxDecimalExponent = 340 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-binexp_cache-253"></a> + 1 (2.38%) samples spent in binexp_cache<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + fastshortest + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-110">line 110</a><br /> + </div> + <span class="code">function binexp_cache(min_exponent,max_exponent) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-254"></a>254</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53">+</a><br /> + </div> + <span class="code"> k = ceil(Integer,(min_exponent+63)*D_1_LOG2_10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> index = div(CachedPowersOffset+k-1,DecimalExponentDistance) + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> cp = CachedPowers[index+1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> return cp +</span> + </td> + </tr> + + <tr> + <td><a name="Lfloat-jl-2e7d768064d970d2b754-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/gcutils-jl-226c838c61f0891410cd-line.html b/profiling/statprof/gcutils-jl-226c838c61f0891410cd-line.html new file mode 100644 index 0000000000000000000000000000000000000000..2e854aa4019f5060029e32442311db64a4ec3814 --- /dev/null +++ b/profiling/statprof/gcutils-jl-226c838c61f0891410cd-line.html @@ -0,0 +1,967 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">==(w::WeakRef, v::WeakRef) = isequal(w.value, v.value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">==(w::WeakRef, v) = isequal(w.value, v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">==(w, v::WeakRef) = isequal(w, v.value) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> finalizer(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">Register a function `f(x)` to be called when there are no program-accessible references to +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">`x`, and return `x`. The type of `x` must be a `mutable struct`, otherwise the behavior of +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">this function is unpredictable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">function finalizer(@nospecialize(f), @nospecialize(o)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> if isimmutable(o) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> error("objects of type ", typeof(o), " cannot be finalized") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_gc_add_finalizer_th, Cvoid, (Ptr{Cvoid}, Any, Any), +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.getptls(), o, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> return o +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">function finalizer(f::Ptr{Cvoid}, o::T) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> if isimmutable(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> error("objects of type ", T, " cannot be finalized") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_gc_add_ptr_finalizer, Cvoid, (Ptr{Cvoid}, Any, Ptr{Cvoid}), +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.getptls(), o, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> return o +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> finalize(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">Immediately run finalizers registered for object `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">finalize(@nospecialize(o)) = ccall(:jl_finalize_th, Cvoid, (Ptr{Cvoid}, Any,), +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.getptls(), o) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.GC +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">Module with garbage collection utilities. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">module GC +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.gc() +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">Perform garbage collection. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">!!! warning +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> Excessive use will likely lead to poor performance. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">gc(full::Bool=true) = ccall(:jl_gc_collect, Cvoid, (Int32,), full) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.enable(on::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">Control whether garbage collection is enabled using a boolean argument (`true` for enabled, +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">`false` for disabled). Return previous GC state. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">!!! warning +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> Disabling garbage collection should be used only with caution, as it can cause memory +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> use to grow without bound. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">enable(on::Bool) = ccall(:jl_gc_enable, Int32, (Int32,), on) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve x1 x2 ... xn expr +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">Temporarily protect the given objects from being garbage collected, even if they would +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">otherwise be unreferenced. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">The last argument is the expression during which the object(s) will be preserved. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">The previous arguments are the objects to preserve. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">macro preserve(args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> syms = args[1:end-1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in syms +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(x, Symbol) || error("Preserved variable must be a symbol") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> s, r = gensym(), gensym() +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> esc(quote +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> $s = $(Expr(:gc_preserve_begin, syms...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-87"></a>87</td> + <td></td> + <td>5 (11.90%)</td> + <td> + <div class="callees"> + 2 (40.00%) + samples spent calling + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401">unsafe_write</a><br /> + 3 (60.00%) + samples spent calling + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-unsafe_write-828">unsafe_write</a><br /> + </div> + <span class="code"> $r = $(args[end]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> $(Expr(:gc_preserve_end, s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> $r +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> end) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgcutils-jl-226c838c61f0891410cd-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">end # module GC +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/grisu-jl-fab39581eb10ad2e545a-line.html b/profiling/statprof/grisu-jl-fab39581eb10ad2e545a-line.html new file mode 100644 index 0000000000000000000000000000000000000000..2c2b392a2c0be748a2def564c9edaaa741dcd405 --- /dev/null +++ b/profiling/statprof/grisu-jl-fab39581eb10ad2e545a-line.html @@ -0,0 +1,2391 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">module Grisu +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">export print_shortest +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">export DIGITS, DIGITSs, grisu +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">const SHORTEST = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">const FIXED = 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">const PRECISION = 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/float.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/fastshortest.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/fastprecision.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/fastfixed.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/bignums.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/bignum.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">const DIGITS = Vector{UInt8}(undef, 309+17) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">const BIGNUMS = [Bignums.Bignum(),Bignums.Bignum(),Bignums.Bignum(),Bignums.Bignum()] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># thread-safe code should use a per-thread DIGITS buffer DIGITSs[Threads.threadid()] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">const DIGITSs = [DIGITS] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">const BIGNUMSs = [BIGNUMS] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">function __init__() +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> Threads.resize_nthreads!(DIGITSs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> Threads.resize_nthreads!(BIGNUMSs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> (len, point, neg) = Grisu.grisu(v::AbstractFloat, mode, requested_digits, +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer=DIGITSs[Threads.threadid()], bignums=BIGNUMSs[Threads.threadid()]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">Convert the number `v` to decimal using the Grisu algorithm. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">`mode` can be one of: +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> - `Grisu.SHORTEST`: convert to the shortest decimal representation which can be "round-tripped" back to `v`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> - `Grisu.FIXED`: round to `requested_digits` digits. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> - `Grisu.PRECISION`: round to `requested_digits` significant digits. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">The characters are written as bytes to `buffer`, with a terminating NUL byte, and `bignums` are used internally as part of the correction step. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">The returned tuple contains: +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> - `len`: the number of digits written to `buffer` (excluding NUL) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> - `point`: the location of the radix point relative to the start of the array (e.g. if +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> `point == 3`, then the radix point should be inserted between the 3rd and 4th +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> digit). Note that this can be negative (for very small values), or greater than `len` +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> (for very large values). +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> - `neg`: the signbit of `v` (see [`signbit`](@ref)). +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52"></a> + 12 (28.57%) samples spent in grisu<br /> + 0 (ex.), + 12 (100.00%) (incl.) + when called from + _show + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-97">line 97</a><br /> + 1 (100.00%) (ex.), + 12 (100.00%) (incl.) + when called from + grisu + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-53">line 53</a><br /> + </div> + <span class="code">function grisu(v::AbstractFloat,mode,requested_digits,buffer=DIGITSs[Threads.threadid()],bignums=BIGNUMSs[Threads.threadid()]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-53"></a>53</td> + <td></td> + <td>12 (28.57%)</td> + <td> + <div class="callees"> + 12 (100.00%) + samples spent calling + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52">grisu</a><br /> + </div> + <span class="code"> if signbit(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> neg = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> v = -v +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> neg = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> if mode == PRECISION && requested_digits == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer[1] = 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> len = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0, 0, neg +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> if v == 0.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer[1] = 0x30 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer[2] = 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> len = point = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> return len, point, neg +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> if mode == SHORTEST +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-71"></a>71</td> + <td></td> + <td>11 (26.19%)</td> + <td> + <div class="callees"> + 11 (100.00%) + samples spent calling + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105">fastshortest</a><br /> + </div> + <span class="code"> status,len,point = fastshortest(v,buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif mode == FIXED +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> status,len,point = fastfixedtoa(v,0,requested_digits,buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif mode == PRECISION +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> status,len,point = fastprecision(v,requested_digits,buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> status && return len-1, point, neg +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> status, len, point = bignumdtoa(v,mode,requested_digits,buffer,bignums) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> return len-1, point, neg +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">nanstr(x::AbstractFloat) = "NaN" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">nanstr(x::Float32) = "NaN32" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">nanstr(x::Float16) = "NaN16" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">infstr(x::AbstractFloat) = "Inf" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">infstr(x::Float32) = "Inf32" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">infstr(x::Float16) = "Inf16" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-_show-89"></a> + 14 (33.33%) samples spent in _show<br /> + 0 (ex.), + 14 (100.00%) (incl.) + when called from + show + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-151">line 151</a><br /> + </div> + <span class="code">function _show(io::IO, x::AbstractFloat, mode, n::Int, typed, compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> isnan(x) && return print(io, typed ? nanstr(x) : "NaN") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> if isinf(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> signbit(x) && print(io,'-') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, typed ? infstr(x) : "Inf") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> typed && isa(x,Float16) && print(io, "Float16(") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-97"></a>97</td> + <td></td> + <td>12 (28.57%)</td> + <td> + <div class="callees"> + 12 (100.00%) + samples spent calling + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52">grisu</a><br /> + </div> + <span class="code"> (len,pt,neg),buffer = grisu(x,mode,n),DIGITSs[Threads.threadid()] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> pdigits = pointer(buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> if mode == PRECISION +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> while len > 1 && buffer[len] == 0x30 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> len -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> neg && print(io,'-') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> exp_form = pt <= -4 || pt > 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> exp_form = exp_form || (pt >= len && abs(mod(x + 0.05, 10^(pt - len)) - 0.05) > 0.05) # see issue #6608 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> if exp_form # .00001 to 100000. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> # => #.#######e### +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> # assumes ASCII/UTF8 encoding of digits is okay for out: +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '.') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> if len > 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+1, len-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, (typed && isa(x,Float32)) ? 'f' : 'e') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, string(pt - 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> typed && isa(x,Float16) && print(io, ")") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pt <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> # => 0.00######## +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-123"></a>123</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-166">print</a><br /> + </div> + <span class="code"> print(io, "0.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> while pt < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> pt += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-128"></a>128</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="io-jl-7061b86fd468f75a7694-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-io-jl-unsafe_write-509">unsafe_write</a><br /> + </div> + <span class="code"> unsafe_write(io, pdigits, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pt >= len +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> # => ########00.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> while pt > len +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> len += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, ".0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> else # => ####.#### +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits, pt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '.') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+pt, len-pt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> typed && !compact && isa(x,Float32) && print(io, "f0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> typed && isa(x,Float16) && print(io, ")") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">function Base.show(io::IO, x::Union{Float64,Float32}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> if get(io, :compact, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> _show(io, x, PRECISION, 6, x isa Float64, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-151"></a>151</td> + <td></td> + <td>14 (33.33%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-show-151"></a> + 14 (33.33%) samples spent in show<br /> + 0 (ex.), + 14 (100.00%) (incl.) + when called from + print + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-31">line 31</a><br /> + </div> + <div class="callees"> + 14 (100.00%) + samples spent calling + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-_show-89">_show</a><br /> + </div> + <span class="code"> _show(io, x, SHORTEST, 0, get(io, :typeinfo, Any) !== typeof(x), false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">function Base.show(io::IO, x::Float16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> hastypeinfo = Float16 === get(io, :typeinfo, Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> # if hastypeinfo, the printing would be more compact using `SHORTEST` +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> # while still retaining all the information +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> # BUT: we want to print all digits in `show`, not in display, so we rely +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> # on the :compact property to make the decision +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> # (cf. https://github.com/JuliaLang/julia/pull/24651#issuecomment-345535687) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> if get(io, :compact, false) && !hastypeinfo +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> _show(io, x, PRECISION, 5, false, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> _show(io, x, SHORTEST, 0, !hastypeinfo, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">Base.print(io::IO, x::Float32) = _show(io, x, SHORTEST, 0, false, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">Base.print(io::IO, x::Float16) = _show(io, x, SHORTEST, 0, false, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"># normal: +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"># 0 < pt < len ####.#### len+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"># pt <= 0 0.000######## len-pt+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"># len <= pt (dot) ########000. pt+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"># len <= pt (no dot) ########000 pt +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"># exponential: +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"># pt <= 0 ########e-### len+k+2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"># 0 < pt ########e### len+k+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">function _print_shortest(io::IO, x::AbstractFloat, dot::Bool, mode, n::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> isnan(x) && return print(io, "NaN") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> x < 0 && print(io,'-') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> isinf(x) && return print(io, "Inf") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> (len,pt,neg),buffer = grisu(x,mode,n),DIGITSs[Threads.threadid()] +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> pdigits = pointer(buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> e = pt-len +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> k = -9<=e<=9 ? 1 : 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> if -pt > k+1 || e+dot > k+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> # => ########e### +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+0, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, 'e') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, string(e)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pt <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> # => 0.000######## +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "0.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> while pt < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> pt += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+0, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif e >= dot +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> # => ########000. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+0, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> while e > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> e -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> if dot +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '.') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> else # => ####.#### +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+0, pt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '.') +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io, pdigits+pt, len-pt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> print_shortest(io::IO, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">Print the shortest possible representation, with the minimum number of consecutive non-zero +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">digits, of number `x`, ensuring that it would parse to the exact same number. +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">print_shortest(io::IO, x::AbstractFloat, dot::Bool) = _print_shortest(io, x, dot, SHORTEST, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">print_shortest(io::IO, x::Union{AbstractFloat,Integer}) = print_shortest(io, float(x), false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lgrisu-jl-fab39581eb10ad2e545a-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">end # module +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/index.html b/profiling/statprof/index.html new file mode 100644 index 0000000000000000000000000000000000000000..11676677ce56b41d5b5a60959d43e22e15d8a96d --- /dev/null +++ b/profiling/statprof/index.html @@ -0,0 +1,317 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + <title>StatProfilerHTML.jl: main report</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <object data="clickable_stacks_by_time.svg" width="90%" type="image/svg+xml" style="display: block" id="zoomable_flamegraph"> + SVG not supported + </object> + <object data="zoomable_stacks_by_time.svg" width="90%" type="image/svg+xml" style="display: none" id="clickable_flamegraph"> + SVG not supported + </object> + <div><a href="#" onclick="switch_flamegraph()">Switch flamegraph</a></div> + <br /><br /> + <table> + <caption>Subroutines, sorted by exclusive sample count</caption> + <tr> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Subroutine</th> + </tr> + + <tr> + <td>6 (14.29%)</td> + <td>6 (14.29%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71">StringVector</a> + </td> + </tr> + + <tr> + <td>5 (11.90%)</td> + <td>37 (88.10%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111">print_to_string</a> + </td> + </tr> + + <tr> + <td>5 (11.90%)</td> + <td>5 (11.90%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60">_string_n</a> + </td> + </tr> + + <tr> + <td>3 (7.14%)</td> + <td>3 (7.14%)</td> + <td> + <a href="libuv-jl-530c66ad95b5a57763e9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98">process_events</a> + </td> + </tr> + + <tr> + <td>2 (4.76%)</td> + <td>2 (4.76%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53">+</a> + </td> + </tr> + + <tr> + <td>2 (4.76%)</td> + <td>2 (4.76%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-div">div</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>15 (35.71%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28">print</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>12 (28.57%)</td> + <td> + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52">grisu</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>12 (28.57%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-IOBuffer-302-111">#IOBuffer#302</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>11 (26.19%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105">fastshortest</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>8 (19.05%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64">digitgen</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>3 (7.14%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401">unsafe_write</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34">roundweed</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-dividemodulointbignum-420">dividemodulointbignum!</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54">*</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823">_deleteend!</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-compare-474">compare</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293">ensureroom</a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-442">>></a> + </td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110">lastindex</a> + </td> + </tr> + </table> + <a href="subs.html">All subroutines</a> + <br /><br /> + <table> + <caption>Files, sorted by exclusive sample count</caption> + <tr> + <th>Exclusive</th> + <th>Report</th> + </tr> + + <tr> + <td>14 (33.33%)</td> + <td><a href="string-jl-d20bff96b5e2c46b112e-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl</a></td> + </tr> + + <tr> + <td>8 (19.05%)</td> + <td><a href="int-jl-af434f8f2b4fe43f173a-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl</a></td> + </tr> + + <tr> + <td>6 (14.29%)</td> + <td><a href="io-jl-f839edf29063078eece4-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl</a></td> + </tr> + + <tr> + <td>3 (7.14%)</td> + <td><a href="fastshortest-jl-253e248589e118f4dde7-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl</a></td> + </tr> + + <tr> + <td>3 (7.14%)</td> + <td><a href="libuv-jl-530c66ad95b5a57763e9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl</a></td> + </tr> + + <tr> + <td>3 (7.14%)</td> + <td><a href="iobuffer-jl-0cfbb4403b3061764f48-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl</a></td> + </tr> + + <tr> + <td>2 (4.76%)</td> + <td><a href="bignums-jl-e031ee9c77e42cd3aafb-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl</a></td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td><a href="grisu-jl-fab39581eb10ad2e545a-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl</a></td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td><a href="promotion-jl-fe649671ed190521a171-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl</a></td> + </tr> + + <tr> + <td>1 (2.38%)</td> + <td><a href="array-jl-e331915c4fb281d94775-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="io-jl-7061b86fd468f75a7694-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="test-jl-6f8538a27ff3da5824d9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="operators-jl-714ade2c8745dd55a410-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="client-jl-74fbd6bc37c8328be022-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="float-jl-2e7d768064d970d2b754-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="boot-jl-1c95b3ccecba8d7f1acb-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="loading-jl-267f08df202e5203e249-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="gcutils-jl-226c838c61f0891410cd-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="stream-jl-9a841f596a6f3ffbe5b9-line.html">/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl</a></td> + </tr> + + <tr> + <td>0</td> + <td><a href="Profile-jl-e79abb67faac09cf5e9b-line.html">/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl</a></td> + </tr> + </table> + <a href="files.html">All files</a> + </div> + <script> +function switch_flamegraph() { + var clickable = document.getElementById("clickable_flamegraph"); + var zoomable = document.getElementById("zoomable_flamegraph"); + + var t = clickable.style.display; + clickable.style.display = zoomable.style.display; + zoomable.style.display = t; + + return 0; +} + </script> + </body> +</html> diff --git a/profiling/statprof/int-jl-af434f8f2b4fe43f173a-line.html b/profiling/statprof/int-jl-af434f8f2b4fe43f173a-line.html new file mode 100644 index 0000000000000000000000000000000000000000..d9622225f930a28e4b9077b9918407d9f9246a66 --- /dev/null +++ b/profiling/statprof/int-jl-af434f8f2b4fe43f173a-line.html @@ -0,0 +1,8171 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## integer arithmetic ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># The tuples and types that do not include 128 bit sizes are necessary to handle +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"># certain issues on 32-bit machines, and also to simplify promotion rules, as +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"># they are also used elsewhere where Int128/UInt128 support is separated out, +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"># such as in hashing2.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned32_types = (Int8, Int16, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned32_types = (UInt8, UInt16, UInt32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger32_types = (BitSigned32_types..., BitUnsigned32_types...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned64_types = (BitSigned32_types..., Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned64_types = (BitUnsigned32_types..., UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger64_types = (BitSigned64_types..., BitUnsigned64_types...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned_types = (BitSigned64_types..., Int128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned_types = (BitUnsigned64_types..., UInt128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger_types = (BitSigned_types..., BitUnsigned_types...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSignedSmall_types = Int === Int64 ? ( Int8, Int16, Int32) : ( Int8, Int16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsignedSmall_types = Int === Int64 ? (UInt8, UInt16, UInt32) : (UInt8, UInt16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">const BitIntegerSmall_types = (BitSignedSmall_types..., BitUnsignedSmall_types...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned32 = Union{BitSigned32_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned32 = Union{BitUnsigned32_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger32 = Union{BitInteger32_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned64 = Union{BitSigned64_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned64 = Union{BitUnsigned64_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger64 = Union{BitInteger64_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned = Union{BitSigned_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned = Union{BitUnsigned_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">const BitInteger = Union{BitInteger_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSignedSmall = Union{BitSignedSmall_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsignedSmall = Union{BitUnsignedSmall_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">const BitIntegerSmall = Union{BitIntegerSmall_types...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">const BitSigned64T = Union{Type{Int8}, Type{Int16}, Type{Int32}, Type{Int64}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">const BitUnsigned64T = Union{Type{UInt8}, Type{UInt16}, Type{UInt32}, Type{UInt64}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">const BitIntegerType = Union{map(T->Type{T}, BitInteger_types)...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code">## integer comparisons ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-49"></a>49</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-49"></a> + 1 (2.38%) samples spent in <<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + > + <a href="operators-jl-714ade2c8745dd55a410-line.html#Loperators-jl-714ade2c8745dd55a410-line.html-286">line 286</a><br /> + </div> + <span class="code">(<)(x::T, y::T) where {T<:BitSigned} = slt_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">(-)(x::BitInteger) = neg_int(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">(-)(x::T, y::T) where {T<:BitInteger} = sub_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-53"></a>53</td> + <td>2 (4.76%)</td> + <td>2 (4.76%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53"></a> + 2 (4.76%) samples spent in +<br /> + 1 (50.00%) (ex.), + 1 (50.00%) (incl.) + when called from + + + <a href="int-jl-af434f8f2b4fe43f173a-line.html#Lint-jl-af434f8f2b4fe43f173a-line.html-803">line 803</a><br /> + 1 (50.00%) (ex.), + 1 (50.00%) (incl.) + when called from + binexp_cache + <a href="float-jl-2e7d768064d970d2b754-line.html#Lfloat-jl-2e7d768064d970d2b754-line.html-254">line 254</a><br /> + </div> + <span class="code">(+)(x::T, y::T) where {T<:BitInteger} = add_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-54"></a>54</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54"></a> + 1 (2.38%) samples spent in *<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + digitgen + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-98">line 98</a><br /> + </div> + <span class="code">(*)(x::T, y::T) where {T<:BitInteger} = mul_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">inv(x::Integer) = float(one(x)) / float(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">(/)(x::T, y::T) where {T<:Integer} = float(x) / float(y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"># skip promotion for system integer types +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code">(/)(x::BitInteger, y::BitInteger) = float(x) / float(y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> isodd(x::Integer) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if `x` is odd (that is, not divisible by 2), and `false` otherwise. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isodd(9) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isodd(10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">isodd(n::Integer) = rem(n, 2) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> iseven(x::Integer) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` is `x` is even (that is, divisible by 2), and `false` otherwise. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">julia> iseven(9) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">julia> iseven(10) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">iseven(n::Integer) = !isodd(n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">signbit(x::Integer) = x < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">signbit(x::Unsigned) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::T, y::T) where {T<:BitSigned} = flipsign_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::BitSigned, y::BitSigned) = flipsign_int(promote(x, y)...) % typeof(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::Signed, y::Float16) = flipsign(x, bitcast(Int16, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::Signed, y::Float32) = flipsign(x, bitcast(Int32, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::Signed, y::Float64) = flipsign(x, bitcast(Int64, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::Signed, y::Real) = flipsign(x, -oftype(x, signbit(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">copysign(x::Signed, y::Signed) = flipsign(x, x ⊻ y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">copysign(x::Signed, y::Float16) = copysign(x, bitcast(Int16, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">copysign(x::Signed, y::Float32) = copysign(x, bitcast(Int32, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">copysign(x::Signed, y::Float64) = copysign(x, bitcast(Int64, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">copysign(x::Signed, y::Real) = copysign(x, -oftype(x, signbit(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> abs(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">The absolute value of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code">When `abs` is applied to signed integers, overflow may occur, +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">resulting in the return of a negative value. This overflow occurs only +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">when `abs` is applied to the minimum representable value of a signed +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">integer. That is, when `x == typemin(typeof(x))`, `abs(x) == x < 0`, +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code">not `-x` as might be expected. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">julia> abs(-3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">julia> abs(1 + im) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">1.4142135623730951 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">julia> abs(typemin(Int64)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">-9223372036854775808 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code">function abs end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">abs(x::Unsigned) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">abs(x::Signed) = flipsign(x,x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">~(n::Integer) = -n-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">unsigned(x::BitSigned) = reinterpret(typeof(convert(Unsigned, zero(x))), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">unsigned(x::Bool) = convert(Unsigned, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> unsigned(x) -> Unsigned +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">Convert a number to an unsigned integer. If the argument is signed, it is reinterpreted as +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">unsigned without checking for negative values. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code">julia> unsigned(-2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code">0xfffffffffffffffe +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">julia> unsigned(2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">0x0000000000000002 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">julia> signed(unsigned(-2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">-2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">unsigned(x) = convert(Unsigned, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">signed(x::Unsigned) = reinterpret(typeof(convert(Signed, zero(x))), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> signed(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">Convert a number to a signed integer. If the argument is unsigned, it is reinterpreted as +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">signed without checking for overflow. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">signed(x) = convert(Signed, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::BitSigned, y::Unsigned) = flipsign(signed(div(unsigned(abs(x)), y)), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::Unsigned, y::BitSigned) = unsigned(flipsign(signed(div(x, unsigned(abs(y)))), y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::BitSigned, y::Unsigned) = flipsign(signed(rem(unsigned(abs(x)), y)), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::Unsigned, y::BitSigned) = rem(x, unsigned(abs(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">fld(x::Signed, y::Unsigned) = div(x, y) - (signbit(x) & (rem(x, y) != 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">fld(x::Unsigned, y::Signed) = div(x, y) - (signbit(y) & (rem(x, y) != 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> mod(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> rem(x, y, RoundDown) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">The reduction of `x` modulo `y`, or equivalently, the remainder of `x` after floored +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">division by `y`, i.e. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">```julia +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code">x - y*fld(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">if computed without intermediate rounding. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">The result will have the same sign as `y`, and magnitude less than `abs(y)` (with some +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">exceptions, see note below). +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> When used with floating point values, the exact result may not be representable by the +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> type, and so rounding error may occur. In particular, if the exact result is very +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> close to `y`, then it may be rounded to `y`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod(8, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod(9, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod(8.9, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">2.9000000000000004 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod(eps(), 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code">2.220446049250313e-16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod(-eps(), 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code">3.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">function mod(x::T, y::T) where T<:Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> y == -1 && return T(0) # avoid potential overflow in fld +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> return x - fld(x, y) * y +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::BitSigned, y::Unsigned) = rem(y + unsigned(rem(x, y)), y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::Unsigned, y::Signed) = rem(y + signed(rem(x, y)), y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::T, y::T) where {T<:Unsigned} = rem(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">cld(x::Signed, y::Unsigned) = div(x, y) + (!signbit(x) & (rem(x, y) != 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">cld(x::Unsigned, y::Signed) = div(x, y) + (!signbit(y) & (rem(x, y) != 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"># Don't promote integers for div/rem/mod since there is no danger of overflow, +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"># while there is a substantial performance penalty to 64-bit promotion. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::T, y::T) where {T<:BitSigned64} = checked_sdiv_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::T, y::T) where {T<:BitSigned64} = checked_srem_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::T, y::T) where {T<:BitUnsigned64} = checked_udiv_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::T, y::T) where {T<:BitUnsigned64} = checked_urem_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"># fld(x,y) == div(x,y) - ((x>=0) != (y>=0) && rem(x,y) != 0 ? 1 : 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code">fld(x::T, y::T) where {T<:Unsigned} = div(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">function fld(x::T, y::T) where T<:Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> d = div(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> return d - (signbit(x ⊻ y) & (d * y != x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"># cld(x,y) = div(x,y) + ((x>0) == (y>0) && rem(x,y) != 0 ? 1 : 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">function cld(x::T, y::T) where T<:Unsigned +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> d = div(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> return d + (d * y != x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">function cld(x::T, y::T) where T<:Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> d = div(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> return d + (((x > 0) == (y > 0)) & (d * y != x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code">## integer bitwise operations ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> ~(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">Bitwise not. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ~4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">-5 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ~10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code">-11 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ~true +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">(~)(x::BitInteger) = not_int(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> &(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code">Bitwise and. Implements [three-valued logic](https://en.wikipedia.org/wiki/Three-valued_logic), +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">returning [`missing`](@ref) if one operand is `missing` and the other is `true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 4 & 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code">0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 4 & 12 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code">julia> true & missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code">missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">julia> false & missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">(&)(x::T, y::T) where {T<:BitInteger} = and_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> |(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">Bitwise or. Implements [three-valued logic](https://en.wikipedia.org/wiki/Three-valued_logic), +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">returning [`missing`](@ref) if one operand is `missing` and the other is `false`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 4 | 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">14 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 4 | 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">5 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">julia> true | missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">julia> false | missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">(|)(x::T, y::T) where {T<:BitInteger} = or_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">xor(x::T, y::T) where {T<:BitInteger} = xor_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> bswap(n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code">Reverse the byte order of `n`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = bswap(0x10203040) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">0x40302010 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bswap(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">0x10203040 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">julia> string(1, base = 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code">"1" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">julia> string(bswap(1), base = 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">"100000000000000000000000000000000000000000000000000000000" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">bswap(x::Union{Int8, UInt8}) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">bswap(x::Union{Int16, UInt16, Int32, UInt32, Int64, UInt64, Int128, UInt128}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> bswap_int(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> count_ones(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">Number of ones in the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code">julia> count_ones(7) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">count_ones(x::BitInteger) = Int(ctpop_int(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> leading_zeros(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">Number of zeros leading the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">julia> leading_zeros(Int32(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">31 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">leading_zeros(x::BitInteger) = Int(ctlz_int(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> trailing_zeros(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">Number of zeros trailing the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code">julia> trailing_zeros(2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">trailing_zeros(x::BitInteger) = Int(cttz_int(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> count_zeros(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code">Number of zeros in the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code">julia> count_zeros(Int32(2 ^ 16 - 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code">count_zeros(x::Integer) = count_ones(~x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> leading_ones(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">Number of ones leading the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">julia> leading_ones(UInt32(2 ^ 32 - 2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code">31 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">leading_ones(x::Integer) = leading_zeros(~x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> trailing_ones(x::Integer) -> Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code">Number of ones trailing the binary representation of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">julia> trailing_ones(3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code">trailing_ones(x::Integer) = trailing_zeros(~x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code">## integer comparisons ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-427"></a>427</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-427"></a> + 1 (2.38%) samples spent in <<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + digitgen + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-97">line 97</a><br /> + </div> + <span class="code">(< )(x::T, y::T) where {T<:BitUnsigned} = ult_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">(<=)(x::T, y::T) where {T<:BitSigned} = sle_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code">(<=)(x::T, y::T) where {T<:BitUnsigned} = ule_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code">==(x::BitSigned, y::BitUnsigned) = (x >= 0) & (unsigned(x) == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-432"></a>432</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-432"></a> + 1 (2.38%) samples spent in ==<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + normalize + <a href="float-jl-2e7d768064d970d2b754-line.html#Lfloat-jl-2e7d768064d970d2b754-line.html-51">line 51</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="promotion-jl-fe649671ed190521a171-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-promotion-jl-425">==</a><br /> + </div> + <span class="code">==(x::BitUnsigned, y::BitSigned ) = (y >= 0) & (x == unsigned(y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"><( x::BitSigned, y::BitUnsigned) = (x < 0) | (unsigned(x) < y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"><( x::BitUnsigned, y::BitSigned ) = (y >= 0) & (x < unsigned(y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"><=(x::BitSigned, y::BitUnsigned) = (x < 0) | (unsigned(x) <= y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"><=(x::BitUnsigned, y::BitSigned ) = (y >= 0) & (x <= unsigned(y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">## integer shifts ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"># unsigned shift counts always shift in the same direction +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">>>(x::BitSigned, y::BitUnsigned) = ashr_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-442"></a>442</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-442"></a> + 1 (2.38%) samples spent in >><br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + >> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#Lint-jl-af434f8f2b4fe43f173a-line.html-448">line 448</a><br /> + </div> + <span class="code">>>(x::BitUnsigned, y::BitUnsigned) = lshr_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"><<(x::BitInteger, y::BitUnsigned) = shl_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">>>>(x::BitInteger, y::BitUnsigned) = lshr_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"># signed shift counts can shift in either direction +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"># note: this early during bootstrap, `>=` is not yet available +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"># note: we only define Int shift counts here; the generic case is handled later +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-448"></a>448</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-448"></a> + 1 (2.38%) samples spent in >><br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + >> + <a href="operators-jl-714ade2c8745dd55a410-line.html#Loperators-jl-714ade2c8745dd55a410-line.html-603">line 603</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-442">>></a><br /> + </div> + <span class="code">>>(x::BitInteger, y::Int) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> ifelse(0 <= y, x >> unsigned(y), x << unsigned(-y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"><<(x::BitInteger, y::Int) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> ifelse(0 <= y, x << unsigned(y), x >> unsigned(-y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code">>>>(x::BitInteger, y::Int) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> ifelse(0 <= y, x >>> unsigned(y), x << unsigned(-y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code">for to in BitInteger_types, from in (BitInteger_types..., Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(to === from) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> if to.size < from.size +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval rem(x::($from), ::Type{$to}) = trunc_int($to, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif from === Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval rem(x::($from), ::Type{$to}) = convert($to, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif from.size < to.size +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> if from <: Signed +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval rem(x::($from), ::Type{$to}) = sext_int($to, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval rem(x::($from), ::Type{$to}) = convert($to, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval rem(x::($from), ::Type{$to}) = bitcast($to, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"># @doc isn't available when running in Core at this point. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"># Tuple syntax for documentation two function signatures at the same time +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"># doesn't work either at this point. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code">if nameof(@__MODULE__) === :Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> for fname in (:mod, :rem) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval @doc """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> rem(x::Integer, T::Type{<:Integer}) -> T +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> mod(x::Integer, T::Type{<:Integer}) -> T +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> %(x::Integer, T::Type{<:Integer}) -> T +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> Find `y::T` such that `x` ≡ `y` (mod n), where n is the number of integers representable +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> in `T`, and `y` is an integer in `[typemin(T),typemax(T)]`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> If `T` can represent any integer (e.g. `T == BigInt`), then this operation corresponds to +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> a conversion to `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> # Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> ```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> julia> 129 % Int8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> -127 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> ``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> """ $fname(x::Integer, T::Type{<:Integer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::T, ::Type{T}) where {T<:Integer} = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::Integer, T::Type{<:Integer}) = convert(T, x) # `x % T` falls back to `convert` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::Integer, ::Type{Bool}) = ((x & 1) != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::Integer, ::Type{T}) where {T<:Integer} = rem(x, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_trunc(::Type{T}, x::Integer) where {T<:Integer} = rem(x, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> trunc([T,] x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> trunc(x; digits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> trunc(x; sigdigits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code">`trunc(x)` returns the nearest integral value of the same type as `x` whose absolute value +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code">is less than or equal to `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">`trunc(T, x)` converts the result to type `T`, throwing an `InexactError` if the value is +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code">not representable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code">`digits`, `sigdigits` and `base` work as for [`round`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">function trunc end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> floor([T,] x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> floor(x; digits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> floor(x; sigdigits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code">`floor(x)` returns the nearest integral value of the same type as `x` that is less than or +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code">equal to `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code">`floor(T, x)` converts the result to type `T`, throwing an `InexactError` if the value is +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code">not representable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code">`digits`, `sigdigits` and `base` work as for [`round`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code">function floor end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> ceil([T,] x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> ceil(x; digits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> ceil(x; sigdigits::Integer= [, base = 10]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code">`ceil(x)` returns the nearest integral value of the same type as `x` that is greater than or +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code">equal to `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code">`ceil(T, x)` converts the result to type `T`, throwing an `InexactError` if the value is not +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code">representable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code">`digits`, `sigdigits` and `base` work as for [`round`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code">function ceil end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code">round(::Type{T}, x::Integer) where {T<:Integer} = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">trunc(::Type{T}, x::Integer) where {T<:Integer} = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code">floor(::Type{T}, x::Integer) where {T<:Integer} = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> ceil(::Type{T}, x::Integer) where {T<:Integer} = convert(T, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">## integer construction ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> @int128_str str +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> @int128_str(str) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code">`@int128_str` parses a string into a Int128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code">Throws an `ArgumentError` if the string is not a valid integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code">macro int128_str(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> return parse(Int128, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> @uint128_str str +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> @uint128_str(str) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code">`@uint128_str` parses a string into a UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code">Throws an `ArgumentError` if the string is not a valid integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">macro uint128_str(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> return parse(UInt128, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> @big_str str +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> @big_str(str) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code">Parse a string into a [`BigInt`](@ref) or [`BigFloat`](@ref), +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code">and throw an `ArgumentError` if the string is not a valid number. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code">For integers `_` is allowed in the string as a separator. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code">julia> big"123_456" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code">123456 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code">julia> big"7891.5" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code">7.8915e+03 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code">macro big_str(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> if '_' in s +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> # remove _ in s[2:end-1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> bf = IOBuffer(maxsize=lastindex(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> print(bf, s[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> for c in SubString(s, 2, lastindex(s)-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> c != '_' && print(bf, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> print(bf, s[end]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> seekstart(bf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> n = tryparse(BigInt, String(take!(bf))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> n === nothing || return n +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> n = tryparse(BigInt, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> n === nothing || return n +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> n = tryparse(BigFloat, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> n === nothing || return n +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> message = "invalid number format $s for BigInt or BigFloat" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> return :(throw(ArgumentError($message))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code">## integer promotions ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"># with different sizes, promote to larger type +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Int16}, ::Union{Type{Int8}, Type{UInt8}}) = Int16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Int32}, ::Union{Type{Int16}, Type{Int8}, Type{UInt16}, Type{UInt8}}) = Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Int64}, ::Union{Type{Int16}, Type{Int32}, Type{Int8}, Type{UInt16}, Type{UInt32}, Type{UInt8}}) = Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Int128}, ::Union{Type{Int16}, Type{Int32}, Type{Int64}, Type{Int8}, Type{UInt16}, Type{UInt32}, Type{UInt64}, Type{UInt8}}) = Int128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt16}, ::Union{Type{Int8}, Type{UInt8}}) = UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt32}, ::Union{Type{Int16}, Type{Int8}, Type{UInt16}, Type{UInt8}}) = UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt64}, ::Union{Type{Int16}, Type{Int32}, Type{Int8}, Type{UInt16}, Type{UInt32}, Type{UInt8}}) = UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt128}, ::Union{Type{Int16}, Type{Int32}, Type{Int64}, Type{Int8}, Type{UInt16}, Type{UInt32}, Type{UInt64}, Type{UInt8}}) = UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"># with mixed signedness and same size, Unsigned wins +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt8}, ::Type{Int8} ) = UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt16}, ::Type{Int16} ) = UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt32}, ::Type{Int32} ) = UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt64}, ::Type{Int64} ) = UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{UInt128}, ::Type{Int128}) = UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">_default_type(::Type{Unsigned}) = UInt +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code">_default_type(::Union{Type{Integer},Type{Signed}}) = Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code">## traits ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> typemin(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code">The lowest value representable by the given (real) numeric DataType `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code">julia> typemin(Float16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code">-Inf16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code">julia> typemin(Float32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code">-Inf32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code">function typemin end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> typemax(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code">The highest value representable by the given (real) numeric `DataType`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code">julia> typemax(Int8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code">127 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code">julia> typemax(UInt32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code">0xffffffff +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code">function typemax end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{Int8 }) = Int8(-128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{Int8 }) = Int8(127) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{UInt8 }) = UInt8(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{UInt8 }) = UInt8(255) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{Int16 }) = Int16(-32768) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{Int16 }) = Int16(32767) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{UInt16}) = UInt16(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{UInt16}) = UInt16(65535) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{Int32 }) = Int32(-2147483648) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{Int32 }) = Int32(2147483647) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{UInt32}) = UInt32(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{UInt32}) = UInt32(4294967295) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{Int64 }) = -9223372036854775808 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{Int64 }) = 9223372036854775807 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{UInt64}) = UInt64(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code">typemax(::Type{UInt64}) = 0xffffffffffffffff +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code">@eval typemin(::Type{UInt128}) = $(convert(UInt128, 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code">@eval typemax(::Type{UInt128}) = $(bitcast(UInt128, convert(Int128, -1))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code">@eval typemin(::Type{Int128} ) = $(convert(Int128, 1) << 127) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code">@eval typemax(::Type{Int128} ) = $(bitcast(Int128, typemax(UInt128) >> 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{Int8}) = Int16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{Int16}) = Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{Int32}) = Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{Int64}) = Int128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{UInt8}) = UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{UInt16}) = UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{UInt32}) = UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code">widen(::Type{UInt64}) = UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"># a few special cases, +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"># Int64*UInt64 => Int128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"># |x|<=2^(k-1), |y|<=2^k-1 => |x*y|<=2^(2k-1)-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code">widemul(x::Signed,y::Unsigned) = widen(x) * signed(widen(y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code">widemul(x::Unsigned,y::Signed) = signed(widen(x)) * widen(y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"># multplication by Bool doesn't require widening +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code">widemul(x::Bool,y::Bool) = x * y +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code">widemul(x::Bool,y::Number) = x * y +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code">widemul(x::Number,y::Bool) = x * y +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code">## wide multiplication, Int128 multiply and divide ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code">if Core.sizeof(Int) == 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"> function widemul(u::Int64, v::Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> local u0::UInt64, v0::UInt64, w0::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code"> local u1::Int64, v1::Int64, w1::UInt64, w2::Int64, t::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> u0 = u & 0xffffffff; u1 = u >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> v0 = v & 0xffffffff; v1 = v >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> w0 = u0 * v0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> t = reinterpret(UInt64, u1) * v0 + (w0 >>> 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> w2 = reinterpret(Int64, t) >> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> w1 = u0 * reinterpret(UInt64, v1) + (t & 0xffffffff) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"> hi = u1 * v1 + w2 + (reinterpret(Int64, w1) >> 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> lo = w0 & 0xffffffff + (w1 << 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int128(hi) << 64 + Int128(lo) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"> function widemul(u::UInt64, v::UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> local u0::UInt64, v0::UInt64, w0::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> local u1::UInt64, v1::UInt64, w1::UInt64, w2::UInt64, t::UInt64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> u0 = u & 0xffffffff; u1 = u >>> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> v0 = v & 0xffffffff; v1 = v >>> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> w0 = u0 * v0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> t = u1 * v0 + (w0 >>> 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> w2 = t >>> 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> w1 = u0 * v1 + (t & 0xffffffff) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> hi = u1 * v1 + w2 + (w1 >>> 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> lo = w0 & 0xffffffff + (w1 << 32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> return UInt128(hi) << 64 + UInt128(lo) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> function *(u::Int128, v::Int128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> u0 = u % UInt64; u1 = Int64(u >> 64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> v0 = v % UInt64; v1 = Int64(v >> 64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code"> lolo = widemul(u0, v0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> lohi = widemul(reinterpret(Int64, u0), v1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> hilo = widemul(u1, reinterpret(Int64, v0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> t = reinterpret(UInt128, hilo) + (lolo >>> 64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> w1 = reinterpret(UInt128, lohi) + (t & 0xffffffffffffffff) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int128(lolo & 0xffffffffffffffff) + reinterpret(Int128, w1) << 64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> function *(u::UInt128, v::UInt128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code"> u0 = u % UInt64; u1 = UInt64(u>>>64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> v0 = v % UInt64; v1 = UInt64(v>>>64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code"> lolo = widemul(u0, v0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> lohi = widemul(u0, v1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> hilo = widemul(u1, v0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> t = hilo + (lolo >>> 64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> w1 = lohi + (t & 0xffffffffffffffff) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> return (lolo & 0xffffffffffffffff) + UInt128(w1) << 64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code"> function div(x::Int128, y::Int128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> (x == typemin(Int128)) & (y == -1) && throw(DivideError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int128(div(BigInt(x), BigInt(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"> function div(x::UInt128, y::UInt128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code"> return UInt128(div(BigInt(x), BigInt(y)))::UInt128 +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> function rem(x::Int128, y::Int128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int128(rem(BigInt(x), BigInt(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> function rem(x::UInt128, y::UInt128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> return UInt128(rem(BigInt(x), BigInt(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> function mod(x::Int128, y::Int128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int128(mod(BigInt(x), BigInt(y))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> *(x::T, y::T) where {T<:Union{Int128,UInt128}} = mul_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> div(x::Int128, y::Int128) = checked_sdiv_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> div(x::UInt128, y::UInt128) = checked_udiv_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> rem(x::Int128, y::Int128) = checked_srem_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> rem(x::UInt128, y::UInt128) = checked_urem_int(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code"># issue #15489: since integer ops are unchecked, they shouldn't check promotion +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code">for op in (:+, :-, :*, :&, :|, :xor) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval function $op(a::Integer, b::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"> T = promote_typeof(a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> aT, bT = a % T, b % T +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> not_sametype((a, b), (aT, bT)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-803"></a>803</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-803"></a> + 1 (2.38%) samples spent in +<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + digitgen + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-93">line 93</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53">+</a><br /> + </div> + <span class="code"> return $op(aT, bT) +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lint-jl-af434f8f2b4fe43f173a-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/io-jl-7061b86fd468f75a7694-line.html b/profiling/statprof/io-jl-7061b86fd468f75a7694-line.html new file mode 100644 index 0000000000000000000000000000000000000000..dd010dedb2eba48bee6121b513526370d763db6f --- /dev/null +++ b/profiling/statprof/io-jl-7061b86fd468f75a7694-line.html @@ -0,0 +1,10293 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># Generic IO stubs -- all subtypes should implement these (if meaningful) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> EOFError() +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">No more data was available to read from a file or stream. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">struct EOFError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> SystemError(prefix::AbstractString, [errno::Int32]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">A system call failed with an error code (in the `errno` global variable). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">struct SystemError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> prefix::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> errnum::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> extrainfo +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> SystemError(p::AbstractString, e::Integer, extrainfo) = new(p, e, extrainfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> SystemError(p::AbstractString, e::Integer) = new(p, e, nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> SystemError(p::AbstractString) = new(p, Libc.errno()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">lock(::IO) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">unlock(::IO) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">reseteof(x::IO) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">const SZ_UNBUFFERED_IO = 65536 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">buffer_writes(x::IO, bufsize=SZ_UNBUFFERED_IO) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen(object) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether an object - such as a stream or timer +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">-- is not yet closed. Once an object is closed, it will never produce a new event. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">However, since a closed stream may still have data to read in its buffer, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">use [`eof`](@ref) to check for the ability to read data. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">Use the `FileWatching` package to be notified when a stream might be writable or readable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = open("my_file.txt", "w+"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isopen(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">julia> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isopen(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">function isopen end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> close(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">Close an I/O stream. Performs a [`flush`](@ref) first. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">function close end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">function flush end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_connected end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readnb end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readbyte end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_close end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">function bytesavailable end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> readavailable(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">Read all available data on the stream, blocking the task only if no data is available. The +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">result is a `Vector{UInt8,1}`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">function readavailable end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> isreadable(io) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if the specified IO object is readable (if that can be determined). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("myfile.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "Hello world!"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> isreadable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("myfile.txt", "r") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> isreadable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("myfile.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">function isreadable end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> iswritable(io) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if the specified IO object is writable (if that can be determined). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("myfile.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "Hello world!"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> iswritable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("myfile.txt", "r") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> iswritable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("myfile.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">function iswritable end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">function copy end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">function eof end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> read(io::IO, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">Read a single value of type `T` from `io`, in canonical binary representation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> read(io::IO, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code">Read the entirety of `io`, as a `String`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">julia> read(io, Char) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">'J': ASCII/Unicode U+004a (category Lu: Letter, uppercase) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">julia> read(io, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">read(stream, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io::IO, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> write(filename::AbstractString, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">Write the canonical binary representation of a value to the given I/O stream or file. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">Return the number of bytes written into the stream. See also [`print`](@ref) to +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">write a text representation (with an encoding that may depend upon `io`). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">You can write multiple values with the same `write` call. i.e. the following are equivalent: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, x, y...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, x) + write(io, y...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">56 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization. It has many members." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "Sometimes those members") + write(io, " write documentation.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">44 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">"Sometimes those members write documentation." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">function write end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, ::Type{UInt8}) = error(typeof(s)," does not support byte I/O") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">write(s::IO, x::UInt8) = error(typeof(s)," does not support byte I/O") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(io::IO, ref, nbytes::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">Copy `nbytes` from `ref` (converted to a pointer) into the `IO` object. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">It is recommended that subtypes `T<:IO` override the following method signature +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">to provide more efficient implementations: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">`unsafe_write(s::T, p::Ptr{UInt8}, n::UInt)` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_write(s::IO, p::Ptr{UInt8}, n::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> written::Int = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:n +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> written += write(s, unsafe_load(p, i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> return written +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_read(io::IO, ref, nbytes::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">Copy `nbytes` from the `IO` stream object into `ref` (converted to a pointer). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">It is recommended that subtypes `T<:IO` override the following method signature +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code">to provide more efficient implementations: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">`unsafe_read(s::T, p::Ptr{UInt8}, n::UInt)` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_read(s::IO, p::Ptr{UInt8}, n::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:n +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p, read(s, UInt8)::UInt8, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"># Generic wrappers around other IO objects +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type AbstractPipe <: IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">function pipe_reader end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">function pipe_writer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">write(io::AbstractPipe, byte::UInt8) = write(pipe_writer(io), byte) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_write(io::AbstractPipe, p::Ptr{UInt8}, nb::UInt) = unsafe_write(pipe_writer(io), p, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">buffer_writes(io::AbstractPipe, args...) = buffer_writes(pipe_writer(io), args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">flush(io::AbstractPipe) = flush(pipe_writer(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">read(io::AbstractPipe, byte::Type{UInt8}) = read(pipe_reader(io), byte) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_read(io::AbstractPipe, p::Ptr{UInt8}, nb::UInt) = unsafe_read(pipe_reader(io), p, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code">read(io::AbstractPipe) = read(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil(io::AbstractPipe, arg::UInt8; kw...) = readuntil(pipe_reader(io), arg; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil(io::AbstractPipe, arg::AbstractChar; kw...) = readuntil(pipe_reader(io), arg; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil(io::AbstractPipe, arg::AbstractString; kw...) = readuntil(pipe_reader(io), arg; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil(io::AbstractPipe, arg::AbstractVector; kw...) = readuntil(pipe_reader(io), arg; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil_vector!(io::AbstractPipe, target::AbstractVector, keep::Bool, out) = readuntil_vector!(pipe_reader(io), target, keep, out) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">for f in ( +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> # peek/mark interface +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> :peek, :mark, :unmark, :reset, :ismarked, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> # Simple reader functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> :readavailable, :isreadable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval $(f)(io::AbstractPipe) = $(f)(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">iswritable(io::AbstractPipe) = iswritable(pipe_writer(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">isopen(io::AbstractPipe) = isopen(pipe_writer(io)) || isopen(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">close(io::AbstractPipe) = (close(pipe_writer(io)); close(pipe_reader(io))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">wait_readnb(io::AbstractPipe, nb::Int) = wait_readnb(pipe_reader(io), nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">wait_readbyte(io::AbstractPipe, byte::UInt8) = wait_readbyte(pipe_reader(io), byte) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">wait_close(io::AbstractPipe) = (wait_close(pipe_writer(io)); wait_close(pipe_reader(io))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">Return the number of bytes available for reading before a read from this stream or buffer will block. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bytesavailable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">34 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code">bytesavailable(io::AbstractPipe) = bytesavailable(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> eof(stream) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">Test whether an I/O stream is at end-of-file. If the stream is not yet exhausted, this +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code">function will block to wait for more data if necessary, and then return `false`. Therefore +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">it is always safe to read one byte after seeing `eof` return `false`. `eof` will return +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">`false` as long as buffered data is still available, even if the remote end of a connection +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code">is closed. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">eof(io::AbstractPipe) = eof(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code">reseteof(io::AbstractPipe) = reseteof(pipe_reader(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"># Exception-safe wrappers (io = open(); try f(io) finally close(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code">write(filename::AbstractString, a1, args...) = open(io->write(io, a1, args...), filename, "w") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> read(filename::AbstractString, args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">Open a file and read its contents. `args` is passed to `read`: this is equivalent to +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code">`open(io->read(io, args...), filename)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> read(filename::AbstractString, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">Read the entire contents of a file as a string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">read(filename::AbstractString, args...) = open(io->read(io, args...), filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">read(filename::AbstractString, ::Type{T}) where {T} = open(io->read(io, T), filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> read!(stream::IO, array::Union{Array, BitArray}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> read!(filename::AbstractString, array::Union{Array, BitArray}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">Read binary data from an I/O stream or file, filling in `array`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">function read! end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">read!(filename::AbstractString, a) = open(io->read!(io, a), filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> readuntil(stream::IO, delim; keep::Bool = false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> readuntil(filename::AbstractString, delim; keep::Bool = false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">Read a string from an I/O stream or a file, up to the given delimiter. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">The delimiter can be a `UInt8`, `AbstractChar`, string, or vector. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">Keyword argument `keep` controls whether the delimiter is included in the result. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">The text is assumed to be encoded in UTF-8. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("my_file.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "JuliaLang is a GitHub organization.\\nIt has many members.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">57 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readuntil("my_file.txt", 'L') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code">"Julia" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readuntil("my_file.txt", '.', keep = true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil(filename::AbstractString, args...; kw...) = open(io->readuntil(io, args...; kw...), filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> readline(io::IO=stdin; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> readline(filename::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">Read a single line of text from the given I/O stream or file (defaults to `stdin`). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">When reading from a file, the text is assumed to be encoded in UTF-8. Lines in the +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">input end with `'\\n'` or `"\\r\\n"` or the end of an input stream. When `keep` is +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">false (as it is by default), these trailing newline characters are removed from the +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">line before it is returned. When `keep` is true, they are returned as part of the +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">line. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("my_file.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "JuliaLang is a GitHub organization.\\nIt has many members.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code">57 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readline("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readline("my_file.txt", keep=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization.\\n" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">function readline(filename::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> open(filename) do f +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> readline(f, keep=keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code">function readline(s::IO=stdin; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> line = readuntil(s, 0x0a, keep=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> i = length(line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> if keep || i == 0 || line[i] != 0x0a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif i < 2 || line[i-1] != 0x0d +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(resize!(line,i-1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(resize!(line,i-2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> readlines(io::IO=stdin; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> readlines(filename::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code">Read all lines of an I/O stream or a file as a vector of strings. Behavior is +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">equivalent to saving the result of reading [`readline`](@ref) repeatedly with the same +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">arguments and saving the resulting lines as a vector of strings. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("my_file.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "JuliaLang is a GitHub organization.\\nIt has many members.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">57 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readlines("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{String,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> "JuliaLang is a GitHub organization." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> "It has many members." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readlines("my_file.txt", keep=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{String,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> "JuliaLang is a GitHub organization.\\n" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> "It has many members.\\n" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">function readlines(filename::AbstractString; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> open(filename) do f +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> readlines(f; kw...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">readlines(s=stdin; kw...) = collect(eachline(s; kw...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">## byte-order mark, ntoh & hton ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">let a = UInt32[0x01020304] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> endian_bom = GC.@preserve a unsafe_load(convert(Ptr{UInt8}, pointer(a))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> global ntoh, hton, ltoh, htol +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> if endian_bom == 0x01 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> ntoh(x) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> hton(x) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> ltoh(x) = bswap(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> htol(x) = bswap(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> const global ENDIAN_BOM = 0x01020304 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif endian_bom == 0x04 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> ntoh(x) = bswap(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> hton(x) = bswap(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> ltoh(x) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> htol(x) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> const global ENDIAN_BOM = 0x04030201 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> error("seriously? what is this machine?") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> ENDIAN_BOM +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">The 32-bit byte-order-mark indicates the native byte order of the host machine. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">Little-endian machines will contain the value `0x04030201`. Big-endian machines will contain +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">the value `0x01020304`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code">ENDIAN_BOM +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> ntoh(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">Convert the endianness of a value from Network byte order (big-endian) to that used by the Host. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code">ntoh(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> hton(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code">Convert the endianness of a value from that used by the Host to Network byte order (big-endian). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">hton(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> ltoh(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">Convert the endianness of a value from Little-endian to that used by the Host. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code">ltoh(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> htol(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">Convert the endianness of a value from that used by the Host to Little-endian. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">htol(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> isreadonly(io) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether a stream is read-only. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isreadonly(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isreadonly(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code">isreadonly(s) = isreadable(s) && !iswritable(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code">## binary I/O ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code">write(io::IO, x) = throw(MethodError(write, (io, x))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code">function write(io::IO, x1, xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> written::Int = write(io, x1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> written += write(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> return written +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline unsafe_write(s::IO, p::Ref{T}, n::Integer) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(s, unsafe_convert(Ref{T}, p)::Ptr, n) # mark noinline to ensure ref is gc-rooted somewhere (by the caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-509"></a>509</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-io-jl-unsafe_write-509"></a> + 1 (2.38%) samples spent in unsafe_write<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + _show + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-128">line 128</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401">unsafe_write</a><br /> + </div> + <span class="code">unsafe_write(s::IO, p::Ptr, n::Integer) = unsafe_write(s, convert(Ptr{UInt8}, p), convert(UInt, n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code">write(s::IO, x::Ref{T}) where {T} = unsafe_write(s, x, Core.sizeof(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code">write(s::IO, x::Int8) = write(s, reinterpret(UInt8, x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">function write(s::IO, x::Union{Int16,UInt16,Int32,UInt32,Int64,UInt64,Int128,UInt128,Float16,Float32,Float64}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> return write(s, Ref(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">write(s::IO, x::Bool) = write(s, UInt8(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">write(to::IO, p::Ptr) = write(to, convert(UInt, p)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code">function write(s::IO, A::AbstractArray) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isbitstype(eltype(A)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> error("`write` is not supported on non-isbits arrays") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> for a in A +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> nb += write(s, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> return nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code">function write(s::IO, a::Array) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(eltype(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> return GC.@preserve a unsafe_write(s, pointer(a), sizeof(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> error("`write` is not supported on non-isbits arrays") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code">function write(s::IO, a::SubArray{T,N,<:Array}) where {T,N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isbitstype(T) || !isa(a, StridedArray) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> return invoke(write, Tuple{IO, AbstractArray}, s, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> elsz = sizeof(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> colsz = size(a,1) * elsz +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve a if stride(a,1) != 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> for idxs in CartesianIndices(size(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(s, pointer(a, idxs.I), elsz) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> return elsz * length(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif N <= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> return unsafe_write(s, pointer(a, 1), colsz) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> for idxs in CartesianIndices((1, size(a)[2:end]...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_write(s, pointer(a, idxs.I), colsz) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> return colsz * trailingsize(a,2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code">function write(io::IO, c::Char) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> u = bswap(reinterpret(UInt32, c)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, u % UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> (u >>= 8) == 0 && return n +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> n += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"># write(io, ::AbstractChar) is not defined: implementations +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"># must provide their own encoding-specific method. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code">function write(io::IO, s::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> pname = unsafe_convert(Ptr{UInt8}, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> return unsafe_write(io, pname, Int(ccall(:strlen, Csize_t, (Cstring,), pname))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code">function write(to::IO, from::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(from) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> n += write(to, readavailable(from)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> return n +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline unsafe_read(s::IO, p::Ref{T}, n::Integer) where {T} = unsafe_read(s, unsafe_convert(Ref{T}, p)::Ptr, n) # mark noinline to ensure ref is gc-rooted somewhere (by the caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_read(s::IO, p::Ptr, n::Integer) = unsafe_read(s, convert(Ptr{UInt8}, p), convert(UInt, n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code">read!(s::IO, x::Ref{T}) where {T} = (unsafe_read(s, x, Core.sizeof(T)); x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, ::Type{Int8}) = reinterpret(Int8, read(s, UInt8)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code">function read(s::IO, T::Union{Type{Int16},Type{UInt16},Type{Int32},Type{UInt32},Type{Int64},Type{UInt64},Type{Int128},Type{UInt128},Type{Float16},Type{Float32},Type{Float64}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> return read!(s, Ref{T}(0))[]::T +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, ::Type{Bool}) = (read(s, UInt8) != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, ::Type{Ptr{T}}) where {T} = convert(Ptr{T}, read(s, UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code">function read!(s::IO, a::Array{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve a unsafe_read(s, pointer(a), sizeof(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code">function read!(s::IO, a::Array{T}) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve a unsafe_read(s, pointer(a), sizeof(a)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in eachindex(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = read(s, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code">function read(io::IO, ::Type{Char}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> b0 = read(io, UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> l = 8(4-leading_ones(b0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> c = UInt32(b0) << 24 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> if l < 24 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> s = 16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> while s ≥ l && !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> peek(io) & 0xc0 == 0x80 || break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> b = read(io, UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> c |= UInt32(b) << s +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> s -= 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> return reinterpret(Char, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"># read(io, T) is not defined for other AbstractChar: implementations +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"># must provide their own encoding-specific method. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"># readuntil_string is useful below since it has +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"># an optimized method for s::IOStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">readuntil_string(s::IO, delim::UInt8, keep::Bool) = String(readuntil(s, delim, keep=keep)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(s::IO, delim::AbstractChar; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code"> if delim ≤ '\x7f' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> return readuntil_string(s, delim % UInt8, keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> out = IOBuffer() +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> c = read(s, Char) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> if c == delim +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> keep && write(out, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> write(out, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(take!(out)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(s::IO, delim::T; keep::Bool=false) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> out = (T === UInt8 ? StringVector(0) : Vector{T}()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> c = read(s, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> if c == delim +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> keep && push!(out, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(out, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> return out +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"># requires that indices for target are the integer unit range from firstindex to lastindex +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"># returns whether the delimiter was matched +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"># uses the Knuth–Morris–Pratt_algorithm, with the first and second cache entries unrolled +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"># For longer targets, the cache improves the big-O efficiency of scanning of sequences +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"># with repeated patterns +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"># Each cache entry tells us which index we should start the search at. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"># We assume this is unlikely, so we only lazy-initialize as much of the cache as we need to use +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"># When we allocate the cache, we initialize it to 0 (and offset by the first index afterwards). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"># Suppose target is: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"># Index: 1245689 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"># Value: "aδcaδcx" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"># We would set the cache to +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"># 0 0 0 1 2 3 4 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"># So after if we mismatch after the second aδc sequence, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"># we can immediately jump back to index 5 (4 + 1). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil_vector!(io::IO, target::AbstractVector{T}, keep::Bool, out) where {T} +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"> first = firstindex(target) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code"> last = lastindex(target) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> len = last - first + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code"> if len < 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code"> pos = 0 # array-offset +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> max_pos = 1 # array-offset in cache +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> local cache # will be lazy initialized when needed +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> output! = (isa(out, IO) ? write : push!) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> c = read(io, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> # Backtrack until the next target character matches what was found +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> c1 = target[pos + first] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> if c == c1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> pos += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pos == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif pos == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> if !keep +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> output!(out, target[first]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> pos = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"> # grow cache to contain up to `pos` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> if !@isdefined(cache) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> cache = zeros(Int, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code"> while max_pos < pos +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> ci = target[max_pos + first] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> b = max_pos +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> max_pos += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> while b != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code"> b = cache[b] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> cb = target[b + first] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> if ci == cb +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"> cache[max_pos] = b + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> # read new position from cache +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> pos1 = cache[pos] +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> if !keep +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> # and add the removed prefix from the target to the output +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> # if not always keeping the match +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"> for b in 1:(pos - pos1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> output!(out, target[b - 1 + first]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> pos = pos1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> if keep || pos == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"> output!(out, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> pos == len && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> if !keep +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> # failed early without finishing the match, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> # add the partial match to the output +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> # if not always keeping the match +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> for b in 1:pos +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> output!(out, target[b - 1 + first]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(io::IO, target::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> # small-string target optimizations +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(target) && return "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> c, rest = Iterators.peel(target) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(rest) && c <= '\x7f' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code"> return readuntil_string(io, c % UInt8, keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code"> # convert String to a utf8-byte-iterator +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(target isa String) && !(target isa SubString{String}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code"> target = String(target) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code"> target = codeunits(target)::AbstractVector +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(readuntil(io, target, keep=keep)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(io::IO, target::AbstractVector{T}; keep::Bool=false) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> out = (T === UInt8 ? StringVector(0) : Vector{T}()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> readuntil_vector!(io, target, keep, out) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> return out +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> readchomp(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code">Read the entirety of `x` as a string and remove a single trailing newline +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code">if there is one. Equivalent to `chomp(read(x, String))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("my_file.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "JuliaLang is a GitHub organization.\\nIt has many members.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> end; +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code">julia> readchomp("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization.\\nIt has many members." +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("my_file.txt"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code">readchomp(x) = chomp(read(x, String)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"># read up to nb bytes into nb, returning # bytes read +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> readbytes!(stream::IO, b::AbstractVector{UInt8}, nb=length(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code">Read at most `nb` bytes from `stream` into `b`, returning the number of bytes read. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code">The size of `b` will be increased if needed (i.e. if `nb` is greater than `length(b)` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code">and enough bytes could be read), but it will never be decreased. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code">function readbytes!(s::IO, b::AbstractArray{UInt8}, nb=length(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> olb = lb = length(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> nr = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> while nr < nb && !eof(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code"> a = read(s, UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> nr += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> if nr > lb +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = nr * 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(b, lb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code"> b[nr] = a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> if lb > olb +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(b, nr) # shrink to just contain input data if was resized +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> return nr +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> read(s::IO, nb=typemax(Int)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code">Read at most `nb` bytes from `s`, returning a `Vector{UInt8}` of the bytes read. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code">function read(s::IO, nb::Integer = typemax(Int)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"> # Let readbytes! grow the array progressively by default +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> # instead of taking of risk of over-allocating +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> b = Vector{UInt8}(undef, nb == typemax(Int) ? 1024 : nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> nr = readbytes!(s, b, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> return resize!(b, nr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, ::Type{String}) = String(read(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::IO, T::Type) = error("The IO stream does not support reading objects of type $T.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code">## high-level iterator interfaces ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code">struct EachLine{IOT <: IO} +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> stream::IOT +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> ondone::Function +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> keep::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> EachLine(stream::IO=stdin; ondone::Function=()->nothing, keep::Bool=false) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> new{typeof(stream)}(stream, ondone, keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> eachline(io::IO=stdin; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> eachline(filename::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code">Create an iterable `EachLine` object that will yield each line from an I/O stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code">or a file. Iteration calls [`readline`](@ref) on the stream argument repeatedly with +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code">`keep` passed through, determining whether trailing end-of-line characters are +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code">retained. When called with a file name, the file is opened once at the beginning of +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code">iteration and closed at the end. If iteration is interrupted, the file will be +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code">closed when the `EachLine` object is garbage collected. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code">julia> open("my_file.txt", "w") do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "JuliaLang is a GitHub organization.\\n It has many members.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> end; +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code">julia> for line in eachline("my_file.txt") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> print(line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code">JuliaLang is a GitHub organization. It has many members. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code">julia> rm("my_file.txt"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code">function eachline(stream::IO=stdin; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> EachLine(stream, keep=keep)::EachLine +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code">function eachline(filename::AbstractString; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code"> s = open(filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> EachLine(s, ondone=()->close(s), keep=keep)::EachLine +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code">function iterate(itr::EachLine, state=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> eof(itr.stream) && return (itr.ondone(); nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> (readline(itr.stream, keep=itr.keep), nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code">eltype(::Type{<:EachLine}) = String +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code">IteratorSize(::Type{<:EachLine}) = SizeUnknown() +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"># IOStream Marking +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"># Note that these functions expect that io.mark exists for +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"># the concrete IO type. This may not be true for IO types +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code"># not in base. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> mark(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code">Add a mark at the current position of stream `s`. Return the marked position. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`unmark`](@ref), [`reset`](@ref), [`ismarked`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code">function mark(io::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> io.mark = position(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> unmark(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code">Remove a mark from stream `s`. Return `true` if the stream was marked, `false` otherwise. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`mark`](@ref), [`reset`](@ref), [`ismarked`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code">function unmark(io::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> !ismarked(io) && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> io.mark = -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> reset(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code">Reset a stream `s` to a previously marked position, and remove the mark. Return the +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code">previously marked position. Throw an error if the stream is not marked. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`mark`](@ref), [`unmark`](@ref), [`ismarked`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code">function reset(io::T) where T<:IO +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(io) || throw(ArgumentError("$(T) not marked")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> m = io.mark +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> seek(io, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> io.mark = -1 # must be after seek, or seek may fail +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> return m +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if stream `s` is marked. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`mark`](@ref), [`unmark`](@ref), [`reset`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code">ismarked(io::IO) = io.mark >= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code"># Make sure all IO streams support flush, even if only as a no-op, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code"># to make it easier to write generic I/O code. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> flush(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code">Commit all currently buffered writes to the given stream. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code">flush(io::IO) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code"> skipchars(predicate, io::IO; linecomment=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code">Advance the stream `io` such that the next-read character will be the first remaining for +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code">which `predicate` returns `false`. If the keyword argument `linecomment` is specified, all +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code">characters from that character until the start of the next line are ignored. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code">julia> buf = IOBuffer(" text") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=1, mark=-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code">julia> skipchars(isspace, buf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=5, mark=-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(readavailable(buf)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code">"text" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code">function skipchars(predicate, io::IO; linecomment=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code"> c = read(io, Char) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> if c === linecomment +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> readline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !predicate(c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code"> skip(io, -codelen(c)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> countlines(io::IO; eol::AbstractChar = '\\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code">Read `io` until the end of the stream/file and count the number of lines. To specify a file +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code">pass the filename as the first argument. EOL markers other than `'\\n'` are supported by +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code">passing them as the second argument. The last non-empty line of `io` is counted even if it does not +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code">end with the EOL, matching the length returned by [`eachline`](@ref) and [`readlines`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization.\\n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code">julia> countlines(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("JuliaLang is a GitHub organization."); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code">julia> countlines(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code">julia> countlines(io, eol = '.') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code">0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code">function countlines(io::IO; eol::AbstractChar='\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> isascii(eol) || throw(ArgumentError("only ASCII line terminators are supported")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code"> aeol = UInt8(eol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Vector{UInt8}(undef, 8192) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code"> nl = nb = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = readbytes!(io, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> @simd for i=1:nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds nl += a[i] == aeol +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code"> if nb > 0 && a[nb] != aeol +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code"> nl += 1 # final line is not terminated with eol +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code"> nl +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-7061b86fd468f75a7694-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code">countlines(f::AbstractString; eol::AbstractChar = '\n') = open(io->countlines(io, eol = eol), f)::Int +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/io-jl-f839edf29063078eece4-line.html b/profiling/statprof/io-jl-f839edf29063078eece4-line.html new file mode 100644 index 0000000000000000000000000000000000000000..4deb9cefc22b817ab9d7657a56e3b4884caf6bfb --- /dev/null +++ b/profiling/statprof/io-jl-f839edf29063078eece4-line.html @@ -0,0 +1,5985 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## core text I/O ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> print([io::IO], xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">Write to `io` (or to the default output stream [`stdout`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">if `io` is not given) a canonical (un-decorated) text representation +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">of values `xs` if there is one, otherwise call [`show`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">The representation used by `print` includes minimal formatting and tries to +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">avoid Julia-specific details. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">Printing `nothing` is not allowed and throws an error. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">julia> print("Hello World!") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">Hello World! +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">julia> print(io, "Hello", ' ', :World!) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">"Hello World!" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28"></a> + 15 (35.71%) samples spent in print<br /> + 1 (100.00%) (ex.), + 15 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-122">line 122</a><br /> + </div> + <span class="code">function print(io::IO, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> lock(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-30"></a>30</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-31"></a>31</td> + <td></td> + <td>14 (33.33%)</td> + <td> + <div class="callees"> + 14 (100.00%) + samples spent calling + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-show-151">show</a><br /> + </div> + <span class="code"> show(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> unlock(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">function print(io::IO, xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> lock(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> unlock(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> println([io::IO], xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">Print (using [`print`](@ref)) `xs` followed by a newline. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code">If `io` is not supplied, prints to [`stdout`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println("Hello, world") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code">Hello, world +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println(io, "Hello, world") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">"Hello, world\\n" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code">println(io::IO, xs...) = print(io, xs..., '\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">## conversion of general objects to strings ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> sprint(f::Function, args...; context=nothing, sizehint=0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">Call the given function with an I/O stream and the supplied extra arguments. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">Everything written to this I/O stream is returned as a string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">`context` can be either an [`IOContext`](@ref) whose properties will be used, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">or a `Pair` specifying a property and its value. `sizehint` suggests the capacity +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">of the buffer (in bytes). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">The optional keyword argument `context` can be set to `:key=>value` pair +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">or an `IO` or [`IOContext`](@ref) object whose attributes are used for the I/O +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">stream passed to `f`. The optional `sizehint` is a suggested size (in bytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">to allocate for the buffer used to write the string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">julia> sprint(show, 66.66666; context=:compact => true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">"66.6667" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">julia> sprint(showerror, BoundsError([1], 100)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">"BoundsError: attempt to access 1-element Array{Int64,1} at index [100]" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">function sprint(f::Function, args...; context=nothing, sizehint::Integer=0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> s = IOBuffer(sizehint=sizehint) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> if context !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> f(IOContext(s, context), args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> f(s, args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> String(resize!(s.data, s.size)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-tostr_sizehint-106"></a> + 1 (2.38%) samples spent in tostr_sizehint<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-117">line 117</a><br /> + </div> + <span class="code">tostr_sizehint(x) = 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-107"></a>107</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110">lastindex</a><br /> + </div> + <span class="code">tostr_sizehint(x::AbstractString) = lastindex(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">tostr_sizehint(x::Float64) = 20 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">tostr_sizehint(x::Float32) = 12 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111"></a> + 37 (88.10%) samples spent in print_to_string<br /> + 5 (100.00%) (ex.), + 37 (100.00%) (incl.) + when called from + string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-155">line 155</a><br /> + </div> + <span class="code">function print_to_string(xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(xs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> return "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> siz = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-117"></a>117</td> + <td>3 (7.14%)</td> + <td>5 (11.90%)</td> + <td> + <div class="callees"> + 1 (20.00%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-tostr_sizehint-106">tostr_sizehint</a><br /> + 1 (20.00%) + samples spent calling + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_thisind_str-113">_thisind_str</a><br /> + </div> + <span class="code"> siz += tostr_sizehint(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> # specialized for performance reasons +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-120"></a>120</td> + <td></td> + <td>12 (28.57%)</td> + <td> + <div class="callees"> + 12 (100.00%) + samples spent calling + <a href="nothing-0feca720e2c29dafb2c9-line.html#Snothing-Type">Type</a><br /> + </div> + <span class="code"> s = IOBuffer(sizehint=siz) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-122"></a>122</td> + <td>2 (4.76%)</td> + <td>18 (42.86%)</td> + <td> + <div class="callees"> + 15 (83.33%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28">print</a><br /> + 1 (5.56%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-165">print</a><br /> + </div> + <span class="code"> print(s, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-124"></a>124</td> + <td></td> + <td>2 (4.76%)</td> + <td> + <div class="callees"> + 1 (50.00%) + samples spent calling + <a href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-resize-1011">resize!</a><br /> + 1 (50.00%) + samples spent calling + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-Type-39">Type</a><br /> + </div> + <span class="code"> String(resize!(s.data, s.size)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">function string_with_env(env, xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(xs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> return "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> siz = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> siz += tostr_sizehint(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> # specialized for performance reasons +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> s = IOBuffer(sizehint=siz) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> env_io = IOContext(s, env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in xs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> print(env_io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> String(resize!(s.data, s.size)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> string(xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">Create a string from any values, except `nothing`, using the [`print`](@ref) function. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code">julia> string("a", 1, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code">"a1true" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-155"></a>155</td> + <td></td> + <td>37 (88.10%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-string-155"></a> + 37 (88.10%) samples spent in string<br /> + 0 (ex.), + 37 (100.00%) (incl.) + when called from + f + <a href="test-jl-6f8538a27ff3da5824d9-line.html#Ltest-jl-6f8538a27ff3da5824d9-line.html-11">line 11</a><br /> + </div> + <div class="callees"> + 37 (100.00%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111">print_to_string</a><br /> + </div> + <span class="code">string(xs...) = print_to_string(xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"># note: print uses an encoding determined by `io` (defaults to UTF-8), whereas +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"># write uses an encoding determined by `s` (UTF-8 for `String`) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, s::AbstractString) = for c in s; print(io, c); end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code">write(io::IO, s::AbstractString) = (len = 0; for c in s; len += write(io, c); end; len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, s::AbstractString) = print_quoted(io, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"># optimized methods to avoid iterating over chars +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">write(io::IO, s::Union{String,SubString{String}}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-165"></a> + 1 (2.38%) samples spent in print<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-122">line 122</a><br /> + </div> + <span class="code"> GC.@preserve s unsafe_write(io, pointer(s), reinterpret(UInt, sizeof(s))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-166"></a>166</td> + <td></td> + <td>2 (4.76%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-166"></a> + 1 (2.38%) samples spent in print<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + _show + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#Lgrisu-jl-fab39581eb10ad2e545a-line.html-123">line 123</a><br /> + </div> + <div class="callees"> + 1 (50.00%) + samples spent calling + <a href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163">write</a><br /> + 1 (50.00%) + samples spent calling + <a href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163">write</a><br /> + </div> + <span class="code">print(io::IO, s::Union{String,SubString{String}}) = (write(io, s); nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">## printing literal quoted string data ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"># this is the inverse of print_unescaped_chars(io, s, "\\\") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code">function print_quoted_literal(io, s::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '"') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> for c = s; c == '"' ? print(io, "\\\"") : print(io, c); end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '"') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> repr(x; context=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">Create a string from any value using the [`show`](@ref) function. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">The optional keyword argument `context` can be set to an `IO` or [`IOContext`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">object whose attributes are used for the I/O stream passed to `show`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">Note that `repr(x)` is usually similar to how the value of `x` would +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">be entered in Julia. See also [`repr(MIME("text/plain"), x)`](@ref) to instead +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">return a "pretty-printed" version of `x` designed more for human consumption, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code">equivalent to the REPL display of `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">julia> repr(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">"1" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">julia> repr(zeros(3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">"[0.0, 0.0, 0.0]" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">julia> repr(big(1/3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">"3.33333333333333314829616256247390992939472198486328125e-01" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">julia> repr(big(1/3), context=:compact => true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">"3.33333e-01" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">repr(x; context=nothing) = sprint(show, x; context=context) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"># IOBuffer views of a (byte)string: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> IOBuffer(string::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code">Create a read-only `IOBuffer` on the data underlying the given string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer("Haho"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">"Haho" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">"Haho" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(str::String) = IOBuffer(unsafe_wrap(Vector{UInt8}, str)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(s::SubString{String}) = IOBuffer(view(unsafe_wrap(Vector{UInt8}, s.string), s.offset + 1 : s.offset + sizeof(s))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"># join is implemented using IO +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> join([io::IO,] strings, delim, [last]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">Join an array of `strings` into a single string, inserting the given delimiter between +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">adjacent strings. If `last` is given, it will be used instead of `delim` between the last +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code">two strings. If `io` is given, the result is written to `io` rather than returned as +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">as a `String`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">julia> join(["apples", "bananas", "pineapples"], ", ", " and ") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code">"apples, bananas and pineapples" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">`strings` can be any iterable over elements `x` which are convertible to strings +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">via `print(io::IOBuffer, x)`. `strings` will be printed to `io`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">function join(io::IO, strings, delim, last) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> first = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> local prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> for str in strings +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> if @isdefined prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> first ? (first = false) : print(io, delim) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, prev) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> prev = str +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> if @isdefined prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> first || print(io, last) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, prev) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">function join(io::IO, strings, delim="") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> # Specialization of the above code when delim==last, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> # which lets us emit (compile) less code +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> first = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> for str in strings +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> first ? (first = false) : print(io, delim) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, str) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code">join(strings) = sprint(join, strings) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">join(strings, delim) = sprint(join, strings, delim) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">join(strings, delim, last) = sprint(join, strings, delim, last) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code">## string escaping & unescaping ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code">need_full_hex(c::Union{Nothing, AbstractChar}) = c !== nothing && isxdigit(c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">escape_nul(c::Union{Nothing, AbstractChar}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> (c !== nothing && '0' <= c <= '7') ? "\\x00" : "\\0" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> escape_string(str::AbstractString[, esc])::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> escape_string(io, str::AbstractString[, esc::])::Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code">General escaping of traditional C and Unicode escape sequences. The first form returns the +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code">escaped string, the second prints the result to `io`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code">Backslashes (`\\`) are escaped with a double-backslash (`"\\\\"`). Non-printable +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">characters are escaped either with their standard C escape codes, `"\\0"` for NUL (if +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">unambiguous), unicode code point (`"\\u"` prefix) or hex (`"\\x"` prefix). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">The optional `esc` argument specifies any additional characters that should also be +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">escaped by a prepending backslash (`\"` is also escaped by default in the first form). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">julia> escape_string("aaa\\nbbb") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">"aaa\\\\nbbb" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">julia> escape_string("\\xfe\\xff") # invalid utf-8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">"\\\\xfe\\\\xff" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">julia> escape_string(string('\\u2135','\\0')) # unambiguous +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">"ℵ\\\\0" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">julia> escape_string(string('\\u2135','\\0','0')) # \\0 would be ambiguous +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">"ℵ\\\\x000" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">## See also +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">[`unescape_string`](@ref) for the reverse operation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">function escape_string(io::IO, s::AbstractString, esc="") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Iterators.Stateful(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> for c in a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> if c in esc +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '\\', c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isascii(c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> c == '\0' ? print(io, escape_nul(peek(a))) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> c == '\e' ? print(io, "\\e") : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> c == '\\' ? print(io, "\\\\") : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> '\a' <= c <= '\r' ? print(io, '\\', "abtnvfr"[Int(c)-6]) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> isprint(c) ? print(io, c) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "\\x", string(UInt32(c), base = 16, pad = 2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !isoverlong(c) && !ismalformed(c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> isprint(c) ? print(io, c) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> c <= '\x7f' ? print(io, "\\x", string(UInt32(c), base = 16, pad = 2)) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> c <= '\uffff' ? print(io, "\\u", string(UInt32(c), base = 16, pad = need_full_hex(peek(a)) ? 4 : 2)) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "\\U", string(UInt32(c), base = 16, pad = need_full_hex(peek(a)) ? 8 : 4)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> else # malformed or overlong +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> u = bswap(reinterpret(UInt32, c)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "\\x", string(u % UInt8, base = 16, pad = 2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> (u >>= 8) == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">escape_string(s::AbstractString, esc=('\"',)) = sprint(escape_string, s, esc, sizehint=lastindex(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code">function print_quoted(io, s::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '"') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> escape_string(io, s, ('\"','$')) #"# work around syntax highlighting problem +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, '"') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"># general unescaping of traditional C and Unicode escape sequences +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: handle unescaping invalid UTF-8 sequences +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> unescape_string(str::AbstractString)::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> unescape_string(io, str::AbstractString)::Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code">General unescaping of traditional C and Unicode escape sequences. The first form returns +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">the escaped string, the second prints the result to `io`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">The following escape sequences are recognised: +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> - Escaped backslash (`\\\\`) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> - Escaped double-quote (`\\\"`) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> - Standard C escape sequences (`\\a`, `\\b`, `\\t`, `\\n`, `\\v`, `\\f`, `\\r`, `\\e`) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> - Unicode code points (`\\u` or `\\U` prefixes with 1-4 trailing hex digits) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> - Hex bytes (`\\x` with 1-2 trailing hex digits) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> - Octal bytes (`\\` with 1-3 trailing octal digits) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code">julia> unescape_string("aaa\\\\nbbb") # C escape sequence +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">"aaa\\nbbb" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">julia> unescape_string("\\\\u03c0") # unicode +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">"π" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code">julia> unescape_string("\\\\101") # octal +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">"A" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">## See also +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code">[`escape_string`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code">function unescape_string(io, s::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> a = Iterators.Stateful(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> for c in a +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(a) && c == '\\' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> c = popfirst!(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> if c == 'x' || c == 'u' || c == 'U' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> n = k = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> m = c == 'x' ? 2 : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'u' ? 4 : 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> while (k += 1) <= m && !isempty(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> nc = peek(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> n = '0' <= nc <= '9' ? n<<4 + (nc-'0') : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> 'a' <= nc <= 'f' ? n<<4 + (nc-'a'+10) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> 'A' <= nc <= 'F' ? n<<4 + (nc-'A'+10) : break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> popfirst!(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> if k == 1 || n > 0x10ffff +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> u = m == 4 ? 'u' : 'U' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("invalid $(m == 2 ? "hex (\\x)" : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> "unicode (\\$u)") escape sequence")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> if m == 2 # \x escape sequence +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, UInt8(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, Char(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif '0' <= c <= '7' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> k = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> n = c-'0' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> while (k += 1) <= 3 && !isempty(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> c = peek(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> n = ('0' <= c <= '7') ? n<<3 + c-'0' : break +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> popfirst!(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> if n > 255 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("octal escape sequence out of range")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, UInt8(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, c == 'a' ? '\a' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'b' ? '\b' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 't' ? '\t' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'n' ? '\n' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'v' ? '\v' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'f' ? '\f' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'r' ? '\r' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> c == 'e' ? '\e' : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> (c == '\\' || c == '"') ? c : +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("invalid escape sequence \\$c"))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">unescape_string(s::AbstractString) = sprint(unescape_string, s, sizehint=lastindex(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">macro b_str(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> v = codeunits(unescape_string(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> QuoteNode(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> @raw_str -> String +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">Create a raw string without interpolation and unescaping. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code">The exception is that quotation marks still must be escaped. Backslashes +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code">escape both quotation marks and other backslashes, but only when a sequence +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">of backslashes precedes a quote character. Thus, 2n backslashes followed by +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code">a quote encodes n backslashes and the end of the literal while 2n+1 backslashes +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code">followed by a quote encodes n backslashes followed by a quote character. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println(raw"\\ \$x") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code">\\ \$x +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println(raw"\\"") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println(raw"\\\\\\"") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code">\\" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code">julia> println(raw"\\\\x \\\\\\"") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code">\\\\x \\" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">macro raw_str(s); s; end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code">## multiline strings ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> indentation(str::AbstractString; tabwidth=8) -> (Int, Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code">Calculate the width of leading white space. Return the width and a flag to indicate +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code">if the string is empty. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.indentation("") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code">(0, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.indentation(" a") +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code">(2, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.indentation("\\ta"; tabwidth=3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code">(3, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">function indentation(str::AbstractString; tabwidth=8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> count = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> for ch in str +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> if ch == ' ' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> count += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif ch == '\t' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> count = div(count + tabwidth, tabwidth) * tabwidth +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> return count, false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> count, true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> unindent(str::AbstractString, indent::Int; tabwidth=8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">Remove leading indentation from string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.unindent(" a\\n b", 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">" a\\n b" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.unindent("\\ta\\n\\tb", 2, tabwidth=8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code">" a\\n b" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code">function unindent(str::AbstractString, indent::Int; tabwidth=8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> indent == 0 && return str +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> # Note: this loses the type of the original string +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = IOBuffer(sizehint=sizeof(str)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> cutting = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> col = 0 # current column (0 based) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> for ch in str +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> if cutting +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code"> if ch == ' ' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> col += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif ch == '\t' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> col = div(col + tabwidth, tabwidth) * tabwidth +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif ch == '\n' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> # Now we need to output enough indentation +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:col-indent +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ' ') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> col = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, '\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> cutting = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> # Now we need to output enough indentation to get to +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> # correct place +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:col-indent +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ' ') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> col += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ch) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif ch == '\t' # Handle internal tabs +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> upd = div(col + tabwidth, tabwidth) * tabwidth +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> # output the number of spaces that would have been seen +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> # with original indentation +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:(upd-col) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ' ') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> col = upd +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif ch == '\n' +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> cutting = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> col = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, '\n') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> col += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ch) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> # If we were still "cutting" when we hit the end of the string, +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> # we need to output the right number of spaces for the indentation +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> if cutting +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:col-indent +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> print(buf, ' ') +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> String(take!(buf)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code">function String(chars::AbstractVector{<:AbstractChar}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> sprint(sizehint=length(chars)) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> for c in chars +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lio-jl-f839edf29063078eece4-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/iobuffer-jl-0cfbb4403b3061764f48-line.html b/profiling/statprof/iobuffer-jl-0cfbb4403b3061764f48-line.html new file mode 100644 index 0000000000000000000000000000000000000000..5078f354ae07af0e12808d43e1b7d13016014950 --- /dev/null +++ b/profiling/statprof/iobuffer-jl-0cfbb4403b3061764f48-line.html @@ -0,0 +1,5183 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## work with AbstractVector{UInt8} via I/O primitives ## +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># Stateful string +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct GenericIOBuffer{T<:AbstractVector{UInt8}} <: IO +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> data::T # T should support: getindex, setindex!, length, copyto!, and resize! +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> readable::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> writable::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> seekable::Bool # if not seekable, implementation is free to destroy (compact) past read data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> append::Bool # add data at end instead of at pointer +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> size::Int # end pointer (and write pointer if append == true) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize::Int # fixed array size (typically pre-allocated) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr::Int # read (and maybe write) pointer +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> mark::Int # reset mark location for ptr (or <0 for no mark) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> function GenericIOBuffer{T}(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize::Integer) where T<:AbstractVector{UInt8} +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(data) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> new(data,readable,writable,seekable,append,length(data),maxsize,1,-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">const IOBuffer = GenericIOBuffer{Vector{UInt8}} +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">function GenericIOBuffer(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize::Integer) where T<:AbstractVector{UInt8} +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> GenericIOBuffer{T}(data, readable, writable, seekable, append, maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"># allocate Vector{UInt8}s for IOBuffer storage that can efficiently become Strings +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-31"></a>31</td> + <td></td> + <td>5 (11.90%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-StringVector-31"></a> + 5 (11.90%) samples spent in StringVector<br /> + 0 (ex.), + 5 (100.00%) (incl.) + when called from + #IOBuffer#302 + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#Liobuffer-jl-0cfbb4403b3061764f48-line.html-114">line 114</a><br /> + </div> + <div class="callees"> + 5 (100.00%) + samples spent calling + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60">_string_n</a><br /> + </div> + <span class="code">StringVector(n::Integer) = unsafe_wrap(Vector{UInt8}, _string_n(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"># IOBuffers behave like Files. They are typically readable and writable. They are seekable. (They can be appendable). +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> IOBuffer([data::AbstractVector{UInt8}]; keywords...) -> IOBuffer +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">Create an in-memory I/O stream, which may optionally operate on a pre-existing array. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">It may take optional keyword arguments: +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">- `read`, `write`, `append`: restricts operations to the buffer; see `open` for details. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">- `truncate`: truncates the buffer size to zero length. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">- `maxsize`: specifies a size beyond which the buffer may not be grown. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">- `sizehint`: suggests a capacity of the buffer (`data` must implement `sizehint!(data, size)`). +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">When `data` is not given, the buffer will be both readable and writable by default. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">56 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization. It has many members." +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(b"JuliaLang is a GitHub organization.") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=35, maxsize=Inf, ptr=1, mark=-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">julia> read(io, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization." +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "This isn't writable.") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">ERROR: ArgumentError: ensureroom failed, IOBuffer is not writeable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(UInt8[], read=true, write=true, maxsize=34) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=0, maxsize=34, ptr=1, mark=-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "JuliaLang is a GitHub organization.") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">34 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">julia> length(read(IOBuffer(b"data", read=true, truncate=false))) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">4 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">julia> length(read(IOBuffer(b"data", read=true, truncate=true))) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">function IOBuffer( +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> data::AbstractVector{UInt8}; +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> read::Union{Bool,Nothing}=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> write::Union{Bool,Nothing}=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> append::Union{Bool,Nothing}=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> truncate::Union{Bool,Nothing}=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize::Integer=typemax(Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> sizehint::Union{Integer,Nothing}=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> if maxsize < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("negative maxsize")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> if sizehint !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> sizehint!(data, sizehint) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> flags = open_flags(read=read, write=write, append=append, truncate=truncate) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = GenericIOBuffer(data, flags.read, flags.write, true, flags.append, Int(maxsize)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> if flags.truncate +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> buf.size = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> return buf +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">function IOBuffer(; +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> read::Union{Bool,Nothing}=true, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> write::Union{Bool,Nothing}=true, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> append::Union{Bool,Nothing}=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> truncate::Union{Bool,Nothing}=true, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize::Integer=typemax(Int), +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-IOBuffer-302-111"></a> + 12 (28.57%) samples spent in #IOBuffer#302<br /> + 1 (100.00%) (ex.), + 12 (100.00%) (incl.) + when called from + Type + <a href="nothing-0feca720e2c29dafb2c9-line.html#Lnothing-0feca720e2c29dafb2c9-line.html-0">line 0</a><br /> + </div> + <span class="code"> sizehint::Union{Integer,Nothing}=nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> size = sizehint !== nothing ? Int(sizehint) : maxsize != typemax(Int) ? Int(maxsize) : 32 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> flags = open_flags(read=read, write=write, append=append, truncate=truncate) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-114"></a>114</td> + <td></td> + <td>11 (26.19%)</td> + <td> + <div class="callees"> + 6 (54.55%) + samples spent calling + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71">StringVector</a><br /> + 5 (45.45%) + samples spent calling + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-StringVector-31">StringVector</a><br /> + </div> + <span class="code"> buf = IOBuffer( +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> StringVector(size), +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> read=flags.read, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> write=flags.write, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> append=flags.append, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> truncate=flags.truncate, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize=maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> fill!(buf.data, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-122"></a>122</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> return buf +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"># PipeBuffers behave like Unix Pipes. They are typically readable and writable, they act appendable, and are not seekable. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> PipeBuffer(data::Vector{UInt8}=UInt8[]; maxsize::Integer = typemax(Int)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">An [`IOBuffer`](@ref) that allows reading and performs writes by appending. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">Seeking and truncating are not supported. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">See [`IOBuffer`](@ref) for the available constructors. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code">If `data` is given, creates a `PipeBuffer` to operate on a data vector, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code">optionally specifying a size beyond which the underlying `Array` may not be grown. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">PipeBuffer(data::Vector{UInt8}=UInt8[]; maxsize::Int = typemax(Int)) = +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> GenericIOBuffer(data,true,true,false,true,maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">PipeBuffer(maxsize::Integer) = (x = PipeBuffer(StringVector(maxsize), maxsize = maxsize); x.size=0; x) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">function copy(b::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = typeof(b)(b.writable ? copy(b.data) : b.data, +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> b.readable, b.writable, b.seekable, b.append, b.maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> ret.size = b.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> ret.ptr = b.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, b::GenericIOBuffer) = print(io, "IOBuffer(data=UInt8[...], ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> "readable=", b.readable, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> "writable=", b.writable, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> "seekable=", b.seekable, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> "append=", b.append, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> "size=", b.size, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> "maxsize=", b.maxsize == typemax(Int) ? "Inf" : b.maxsize, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> "ptr=", b.ptr, ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> "mark=", b.mark, ")") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_read(from::GenericIOBuffer, p::Ptr{UInt8}, nb::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> from.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> avail = bytesavailable(from) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> adv = min(avail, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve from unsafe_copyto!(p, pointer(from.data, from.ptr), adv) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> from.ptr += adv +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> if nb > avail +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">function read(from::GenericIOBuffer, T::Union{Type{Int16},Type{UInt16},Type{Int32},Type{UInt32},Type{Int64},Type{UInt64},Type{Int128},Type{UInt128},Type{Float16},Type{Float32},Type{Float64}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> from.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> avail = bytesavailable(from) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = sizeof(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> if nb > avail +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve from begin +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr::Ptr{T} = pointer(from.data, from.ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> x = unsafe_load(ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> from.ptr += nb +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> return x +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">function read_sub(from::GenericIOBuffer, a::AbstractArray{T}, offs, nel) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> from.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> if offs+nel-1 > length(a) || offs < 1 || nel < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> if isbitstype(T) && isa(a,Array) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = UInt(nel * sizeof(T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve a unsafe_read(from, pointer(a, offs), nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = offs:offs+nel-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> a[i] = read(to, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function read(from::GenericIOBuffer, ::Type{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> from.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = from.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> size = from.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> if ptr > size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds byte = from.data[ptr] +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> from.ptr = ptr + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> return byte +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code">function peek(from::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> from.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> if from.ptr > from.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> return from.data[from.ptr] +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">read(from::GenericIOBuffer, ::Type{Ptr{T}}) where {T} = convert(Ptr{T}, read(from, UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">isreadable(io::GenericIOBuffer) = io.readable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">iswritable(io::GenericIOBuffer) = io.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: GenericIOBuffer is not iterable, so doesn't really have a length. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"># This should maybe be sizeof() instead. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">#length(io::GenericIOBuffer) = (io.seekable ? io.size : bytesavailable(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">bytesavailable(io::GenericIOBuffer) = io.size - io.ptr + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code">position(io::GenericIOBuffer) = io.ptr-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">function skip(io::GenericIOBuffer, n::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> seekto = io.ptr + n +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> n < 0 && return seek(io, seekto-1) # Does error checking +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = min(seekto, io.size+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">function seek(io::GenericIOBuffer, n::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> if !io.seekable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(io) || throw(ArgumentError("seek failed, IOBuffer is not seekable and is not marked")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> n == io.mark || throw(ArgumentError("seek failed, IOBuffer is not seekable and n != mark")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: REPL.jl relies on the fact that this does not throw (by seeking past the beginning or end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> # of an GenericIOBuffer), so that would need to be fixed in order to throw an error here +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> #(n < 0 || n > io.size) && throw(ArgumentError("Attempted to seek outside IOBuffer boundaries.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> #io.ptr = n+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = max(min(n+1, io.size+1), 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">function seekend(io::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = io.size+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">function truncate(io::GenericIOBuffer, n::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> io.writable || throw(ArgumentError("truncate failed, IOBuffer is not writeable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> io.seekable || throw(ArgumentError("truncate failed, IOBuffer is not seekable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> n < 0 && throw(ArgumentError("truncate failed, n bytes must be ≥ 0, got $n")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> n > io.maxsize && throw(ArgumentError("truncate failed, $(n) bytes is exceeds IOBuffer maxsize $(io.maxsize)")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> if n > length(io.data) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(io.data, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> io.data[io.size+1:n] .= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size = n +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = min(io.ptr, n+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(io) && io.mark > n && unmark(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">function compact(io::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> io.writable || throw(ArgumentError("compact failed, IOBuffer is not writeable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> io.seekable && throw(ArgumentError("compact failed, IOBuffer is seekable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> local ptr::Int, bytes_to_move::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> if ismarked(io) && io.mark < io.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.mark == 0 return end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = io.mark +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> bytes_to_move = bytesavailable(io) + (io.ptr-io.mark) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = io.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> bytes_to_move = bytesavailable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> copyto!(io.data, 1, io.data, ptr, bytes_to_move) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size -= ptr - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr -= ptr - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> io.mark -= ptr - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code">@inline ensureroom(io::GenericIOBuffer, nshort::Int) = ensureroom(io, UInt(nshort)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293"></a> + 1 (2.38%) samples spent in ensureroom<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + unsafe_write + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#Liobuffer-jl-0cfbb4403b3061764f48-line.html-402">line 402</a><br /> + </div> + <span class="code">@inline function ensureroom(io::GenericIOBuffer, nshort::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-294"></a>294</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> io.writable || throw(ArgumentError("ensureroom failed, IOBuffer is not writeable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> if !io.seekable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> nshort >= 0 || throw(ArgumentError("ensureroom failed, requested number of bytes must be ≥ 0, got $nshort")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> if !ismarked(io) && io.ptr > 1 && io.size <= io.ptr - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> datastart = ismarked(io) ? io.mark : io.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> if (io.size+nshort > io.maxsize) || +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> (datastart > 4096 && datastart > io.size - io.ptr) || +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> (datastart > 262144) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> # apply somewhat arbitrary heuristics to decide when to destroy +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> # old, read data to make more room for new data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> compact(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> n = min(nshort + (io.append ? io.size : io.ptr-1), io.maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> if n > length(io.data) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(io.data, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">eof(io::GenericIOBuffer) = (io.ptr-1 == io.size) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline function close(io::GenericIOBuffer{T}) where T +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> io.readable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> io.writable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> io.seekable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> io.maxsize = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> io.mark = -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(io.data, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">isopen(io::GenericIOBuffer) = io.readable || io.writable || io.seekable || bytesavailable(io) > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> take!(b::IOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">Obtain the contents of an `IOBuffer` as an array, without copying. Afterwards, the +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">`IOBuffer` is reset to its initial state. +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">julia> io = IOBuffer(); +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code">julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.") +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">56 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">julia> String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">"JuliaLang is a GitHub organization. It has many members." +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code">function take!(io::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(io) && unmark(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.seekable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> nbytes = io.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> data = copyto!(StringVector(nbytes), 1, io.data, 1, nbytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> nbytes = bytesavailable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> data = read!(io,StringVector(nbytes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> return data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">function take!(io::IOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> ismarked(io) && unmark(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.seekable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> data = io.data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize = (io.maxsize == typemax(Int) ? 0 : min(length(io.data),io.maxsize)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> io.data = StringVector(maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> data = copy(data) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(data,io.size) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> nbytes = bytesavailable(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> a = StringVector(nbytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> data = read!(io, a) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> if io.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> io.size = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> return data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">function write(to::GenericIOBuffer, from::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> if to === from +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> from.ptr = from.size + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> written::Int = write_sub(to, from.data, from.ptr, bytesavailable(from)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> from.ptr += written +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> return written +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401"></a> + 3 (7.14%) samples spent in unsafe_write<br /> + 0 (ex.), + 1 (33.33%) (incl.) + when called from + unsafe_write + <a href="io-jl-7061b86fd468f75a7694-line.html#Lio-jl-7061b86fd468f75a7694-line.html-509">line 509</a><br /> + 1 (100.00%) (ex.), + 2 (66.67%) (incl.) + when called from + write + <a href="gcutils-jl-226c838c61f0891410cd-line.html#Lgcutils-jl-226c838c61f0891410cd-line.html-87">line 87</a><br /> + </div> + <span class="code">function unsafe_write(to::GenericIOBuffer, p::Ptr{UInt8}, nb::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-402"></a>402</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293">ensureroom</a><br /> + </div> + <span class="code"> ensureroom(to, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-403"></a>403</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> ptr = (to.append ? to.size+1 : to.ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> written = Int(min(nb, length(to.data) - ptr + 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> towrite = written +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> d = to.data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-407"></a>407</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-286">></a><br /> + </div> + <span class="code"> while towrite > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds d[ptr] = unsafe_load(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> p += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> towrite -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> to.size = max(to.size, ptr - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> if !to.append +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> to.ptr += written +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> return written +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code">function write_sub(to::GenericIOBuffer, a::AbstractArray{UInt8}, offs, nel) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !has_offset_axes(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> if offs+nel-1 > length(a) || offs < 1 || nel < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve a unsafe_write(to, pointer(a, offs), UInt(nel)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function write(to::GenericIOBuffer, a::UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> ensureroom(to, UInt(1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = (to.append ? to.size+1 : to.ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> if ptr > to.maxsize +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> to.data[ptr] = a +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> to.size = max(to.size, ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> if !to.append +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> to.ptr += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> return sizeof(UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">readbytes!(io::GenericIOBuffer, b::Array{UInt8}, nb=length(b)) = readbytes!(io, b, Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">function readbytes!(io::GenericIOBuffer, b::Array{UInt8}, nb::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> nr = min(nb, bytesavailable(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(b) < nr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(b, nr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> read_sub(io, b, 1, nr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> return nr +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code">read(io::GenericIOBuffer) = read!(io,StringVector(bytesavailable(io))) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code">readavailable(io::GenericIOBuffer) = read(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code">read(io::GenericIOBuffer, nb::Integer) = read!(io,StringVector(min(nb, bytesavailable(io)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code">function occursin(delim::UInt8, buf::IOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> p = pointer(buf.data, buf.ptr) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> q = GC.@preserve buf ccall(:memchr,Ptr{UInt8},(Ptr{UInt8},Int32,Csize_t),p,delim,bytesavailable(buf)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> return q != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code">function occursin(delim::UInt8, buf::GenericIOBuffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> data = buf.data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = buf.ptr:buf.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = data[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> b == delim && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(io::GenericIOBuffer, delim::UInt8; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = 70 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> A = StringVector(lb) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> nread = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> nout = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> data = io.data +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = io.ptr : io.size +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = data[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> nread += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> if keep || b != delim +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> nout += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> if nout > lb +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> lb = nout*2 +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(A, lb) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds A[nout] = b +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> if b == delim +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr += nread +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> if lb != nout +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(A, nout) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> A +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"># copy-free crc32c of IOBuffer: +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code">function _crc32c(io::IOBuffer, nb::Integer, crc::UInt32=0x00000000) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> nb < 0 && throw(ArgumentError("number of bytes to checksum must be ≥ 0")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> io.readable || throw(ArgumentError("read failed, IOBuffer is not readable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> n = min(nb, bytesavailable(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> n == 0 && return crc +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> crc = GC.@preserve io unsafe_crc32c(pointer(io.data, io.ptr), n, crc) +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> io.ptr += n +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> return crc +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Liobuffer-jl-0cfbb4403b3061764f48-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code">_crc32c(io::IOBuffer, crc::UInt32=0x00000000) = _crc32c(io, bytesavailable(io), crc) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/ir-jl-bebdc9bf648f41024d37-line.html b/profiling/statprof/ir-jl-bebdc9bf648f41024d37-line.html new file mode 100644 index 0000000000000000000000000000000000000000..9d9ba2f885f1a5036d97ce0faa75ffa25a2cce21 --- /dev/null +++ b/profiling/statprof/ir-jl-bebdc9bf648f41024d37-line.html @@ -0,0 +1,10539 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/ssair/ir.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">@inline isexpr(@nospecialize(stmt), head::Symbol) = isa(stmt, Expr) && stmt.head === head +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">@eval Core.UpsilonNode() = $(Expr(:new, Core.UpsilonNode)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">Core.PhiNode() = Core.PhiNode(Any[], Any[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">struct Argument +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> n::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">struct GotoIfNot +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> cond::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> dest::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> GotoIfNot(@nospecialize(cond), dest::Int) = new(cond, dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">struct ReturnNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> val::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> ReturnNode(@nospecialize(val)) = new(val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> # unassigned val indicates unreachable +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> ReturnNode() = new() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">Like UnitRange{Int}, but can handle the `last` field, being temporarily +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">< first (this can happen during compacting) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">struct StmtRange <: AbstractUnitRange{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> first::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> last::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">first(r::StmtRange) = r.first +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">last(r::StmtRange) = r.last +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">iterate(r::StmtRange, state=0) = (r.last - r.first < state) ? nothing : (r.first + state, state + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">StmtRange(range::UnitRange{Int}) = StmtRange(first(range), last(range)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">struct BasicBlock +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> stmts::StmtRange +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> preds::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> succs::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">function BasicBlock(stmts::StmtRange) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> return BasicBlock(stmts, Int[], Int[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">function BasicBlock(old_bb, stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> return BasicBlock(stmts, old_bb.preds, old_bb.succs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">copy(bb::BasicBlock) = BasicBlock(bb.stmts, copy(bb.preds), copy(bb.succs)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">struct CFG +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> blocks::Vector{BasicBlock} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> index::Vector{Int} # map from instruction => basic-block number +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: make this O(1) instead of O(log(n_blocks))? +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">copy(c::CFG) = CFG(copy(c.blocks), copy(c.index)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">function block_for_inst(index::Vector{Int}, inst::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> return searchsortedfirst(index, inst, lt=(<=)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">block_for_inst(cfg::CFG, inst::Int) = block_for_inst(cfg.index, inst) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">function basic_blocks_starts(stmts::Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> jump_dests = BitSet() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, 1) # function entry point +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> # First go through and compute jump destinations +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> for idx in 1:length(stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = stmts[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> # Terminators +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, GotoIfNot) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, stmt.dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, ReturnNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> idx < length(stmts) && push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, GotoNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> # This is a fake dest to force the next stmt to start a bb +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> idx < length(stmts) && push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, stmt.label) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt.head === :leave +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> # :leave terminates a BB +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head == :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> # :enter starts/ends a BB +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> # The catch block is a jump dest +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, stmt.args[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> # also tolerate expr form of IR +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, stmt.args[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt.head === :return +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> # also tolerate expr form of IR +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> # This is a fake dest to force the next stmt to start a bb +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> idx < length(stmts) && push!(jump_dests, idx+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> # and add add one more basic block start after the last statement +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = length(stmts):-1:1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmts[i] != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(jump_dests, i+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> return jump_dests +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code">function compute_basic_blocks(stmts::Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> bb_starts = basic_blocks_starts(stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> # Compute ranges +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> pop!(bb_starts, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> basic_block_index = collect(bb_starts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> blocks = BasicBlock[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> sizehint!(blocks, length(basic_block_index)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> let first = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> for last in basic_block_index +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks, BasicBlock(StmtRange(first, last - 1))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> first = last +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> # Compute successors/predecessors +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> for (num, b) in enumerate(blocks) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> terminator = stmts[last(b.stmts)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(terminator, ReturnNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> # return never has any successors +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(terminator, GotoNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> block′ = block_for_inst(basic_block_index, terminator.label) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks[block′].preds, num) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(b.succs, block′) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> # Conditional Branch +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(terminator, GotoIfNot) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> block′ = block_for_inst(basic_block_index, terminator.dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> if block′ == num + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> # This GotoIfNot acts like a noop - treat it as such. +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> # We will drop it during SSA renaming +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks[block′].preds, num) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(b.succs, block′) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(terminator, Expr) && terminator.head == :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> # :enter gets a virtual edge to the exception handler and +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> # the exception handler gets a virtual edge from outside +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> # the function. +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> # See the devdocs on exception handling in SSA form (or +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> # bug Keno to write them, if you're reading this and they +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> # don't exist) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> block′ = block_for_inst(basic_block_index, terminator.args[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks[block′].preds, num) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks[block′].preds, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(b.succs, block′) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> # statement fall-through +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> if num + 1 <= length(blocks) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(blocks[num + 1].preds, num) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(b.succs, num + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> return CFG(blocks, basic_block_index) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">function first_insert_for_bb(code, cfg::CFG, block::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> for idx in cfg.blocks[block].stmts +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = code[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(stmt, PhiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> return idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">struct NewNode +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> # Insertion position (interpretation depends on which array this is in) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> pos::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> # Place the new instruction after this instruction (but in the same BB if this is an implicit terminator) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> attach_after::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> # The type of the instruction to insert +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> typ::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> # The node itself +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> node::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> # The index into the line number table of this entry +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> line::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> NewNode(pos::Int, attach_after::Bool, @nospecialize(typ), @nospecialize(node), line::Int32) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> new(pos, attach_after, typ, node, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">struct IRCode +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> stmts::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> types::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> lines::Vector{Int32} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> flags::Vector{UInt8} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> argtypes::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> spvals::SimpleVector +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> linetable::Vector{LineInfoNode} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> cfg::CFG +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> new_nodes::Vector{NewNode} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> meta::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> function IRCode(stmts::Vector{Any}, types::Vector{Any}, lines::Vector{Int32}, flags::Vector{UInt8}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> cfg::CFG, linetable::Vector{LineInfoNode}, argtypes::Vector{Any}, meta::Vector{Any}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> spvals::SimpleVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(stmts, types, lines, flags, argtypes, spvals, linetable, cfg, NewNode[], meta) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> function IRCode(ir::IRCode, stmts::Vector{Any}, types::Vector{Any}, lines::Vector{Int32}, flags::Vector{UInt8}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> cfg::CFG, new_nodes::Vector{NewNode}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(stmts, types, lines, flags, ir.argtypes, ir.spvals, ir.linetable, cfg, new_nodes, ir.meta) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code">copy(code::IRCode) = IRCode(code, copy(code.stmts), copy(code.types), +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> copy(code.lines), copy(code.flags), copy(code.cfg), copy(code.new_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(x::IRCode, s::SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> if s.id <= length(x.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> return x.stmts[s.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> return x.new_nodes[s.id - length(x.stmts)].node +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(x::IRCode, @nospecialize(repl), s::SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert s.id <= length(x.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> x.stmts[s.id] = repl +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">struct OldSSAValue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> id::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">struct NewSSAValue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> id::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">const AnySSAValue = Union{SSAValue, OldSSAValue, NewSSAValue} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct UseRef +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> op::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> UseRef(@nospecialize(a)) = new(a, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">struct UseRefIterator +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> use::Tuple{UseRef, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> relevant::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> UseRefIterator(@nospecialize(a), relevant::Bool) = new((UseRef(a), nothing), relevant) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(it::UseRefIterator) = it.use[1].stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: stack-allocation +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code">#struct UseRef +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code"># urs::UseRefIterator +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"># use::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">#end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">struct OOBToken +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">struct UndefToken +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(x::UseRef) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = x.stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, Expr) && stmt.head === :(=) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> rhs = stmt.args[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(rhs, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_relevant_expr(rhs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(rhs.args) && return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> return rhs.args[x.op] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> return rhs +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, Expr) # @assert is_relevant_expr(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.args) && return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.args[x.op] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, GotoIfNot) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.cond +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, ReturnNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(stmt, :val) || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(stmt, :val) || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, UpsilonNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(stmt, :val) || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.values) && return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(stmt.values, x.op) || return UndefToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.values[x.op] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiCNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.values) && return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(stmt.values, x.op) || return UndefToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.values[x.op] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> return OOBToken() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">function is_relevant_expr(e::Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> return e.head in (:call, :invoke, :new, :(=), :(&), +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> :gc_preserve_begin, :gc_preserve_end, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> :foreigncall, :isdefined, :copyast, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> :undefcheck, :throw_undef_if_not, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> :cfunction, :method, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> #=legacy IR format support=# :gotoifnot, :return) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(x::UseRef, @nospecialize(v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = x.stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, Expr) && stmt.head === :(=) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> rhs = stmt.args[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(rhs, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_relevant_expr(rhs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(rhs.args) && throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> rhs.args[x.op] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> return v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt.args[2] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, Expr) # @assert is_relevant_expr(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.args) && throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt.args[x.op] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, GotoIfNot) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> x.stmt = GotoIfNot(v, stmt.dest) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, ReturnNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> x.stmt = typeof(stmt)(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, UpsilonNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> x.stmt = typeof(stmt)(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op == 1 || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> x.stmt = typeof(stmt)(v, stmt.typ) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.values) && throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(stmt.values, x.op) || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt.values[x.op] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiCNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> x.op > length(stmt.values) && throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(stmt.values, x.op) || throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt.values[x.op] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(BoundsError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> return x +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">function userefs(@nospecialize(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> relevant = (isa(x, Expr) && is_relevant_expr(x)) || +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(x, GotoIfNot) || isa(x, ReturnNode) || +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(x, PiNode) || isa(x, PhiNode) || isa(x, PhiCNode) || isa(x, UpsilonNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> return UseRefIterator(x, relevant) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">iterate(it::UseRefIterator) = (it.use[1].op = 0; iterate(it, nothing)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline function iterate(it::UseRefIterator, ::Nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> it.relevant || return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> use = it.use[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> use.op += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> y = use[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> y === OOBToken() && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> y === UndefToken() || return it.use +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"># This function is used from the show code, which may have a different +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"># `push!`/`used` type since it's in Base. +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">function scan_ssa_use!(push!, used, @nospecialize(stmt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(used, stmt.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> for useref in userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> val = useref[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(used, val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"># Manually specialized copy of the above with push! === Compiler.push! +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">function scan_ssa_use!(used::IdSet, @nospecialize(stmt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(used, stmt.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> for useref in userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> val = useref[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(used, val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">function ssamap(f, @nospecialize(stmt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> urs = userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> for op in urs +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> val = op[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> op[] = f(val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> return urs[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code">function foreachssa(f, @nospecialize(stmt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> for op in userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> val = op[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> f(val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">function insert_node!(ir::IRCode, pos::Int, @nospecialize(typ), @nospecialize(val), attach_after::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> line = ir.lines[pos] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ir.new_nodes, NewNode(pos, attach_after, typ, val, line)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> return SSAValue(length(ir.stmts) + length(ir.new_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"># For bootstrapping +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">function my_sortperm(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> p = Vector{Int}(undef, length(v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> p[i] = i +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> sort!(p, Sort.DEFAULT_UNSTABLE, Order.Perm(Sort.Forward,v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> p +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct IncrementalCompact +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> ir::IRCode +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> result::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> result_types::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> result_lines::Vector{Int32} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> result_flags::Vector{UInt8} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> result_bbs::Vector{BasicBlock} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> used_ssas::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> late_fixup::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> # This could be Stateful, but bootstrapping doesn't like that +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> perm::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> new_nodes_idx::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> # This supports insertion while compacting +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> new_new_nodes::Vector{NewNode} # New nodes that were before the compaction point at insertion time +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Switch these two to a min-heap of some sort +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_nodes::Vector{NewNode} # New nodes that were after the compaction point at insertion time +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_perm::Vector{Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> # State +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> idx::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> active_result_bb::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> renamed_new_nodes::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> function IncrementalCompact(code::IRCode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> # Sort by position with attach after nodes affter regular ones +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> perm = my_sortperm(Int[(code.new_nodes[i].pos*2 + Int(code.new_nodes[i].attach_after)) for i in 1:length(code.new_nodes)]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> new_len = length(code.stmts) + length(code.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> result = Array{Any}(undef, new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> result_types = Array{Any}(undef, new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> result_lines = fill(Int32(0), new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> result_flags = fill(0x00, new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> used_ssas = fill(0, new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename = Any[SSAValue(i) for i = 1:new_len] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> late_fixup = Vector{Int}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> new_new_nodes = NewNode[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_nodes = NewNode[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_perm = Int[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(code, result, result_types, result_lines, result_flags, code.cfg.blocks, ssa_rename, used_ssas, late_fixup, perm, 1, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> new_new_nodes, pending_nodes, pending_perm, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> 1, 1, 1, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> # For inlining +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> function IncrementalCompact(parent::IncrementalCompact, code::IRCode, result_offset) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> perm = my_sortperm(Int[code.new_nodes[i].pos for i in 1:length(code.new_nodes)]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> new_len = length(code.stmts) + length(code.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename = Any[SSAValue(i) for i = 1:new_len] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> used_ssas = fill(0, new_len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> late_fixup = Vector{Int}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> new_new_nodes = NewNode[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_nodes = NewNode[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> pending_perm = Int[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(code, parent.result, parent.result_types, parent.result_lines, parent.result_flags, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> parent.result_bbs, ssa_rename, parent.used_ssas, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> late_fixup, perm, 1, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> new_new_nodes, pending_nodes, pending_perm, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> 1, result_offset, parent.active_result_bb, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code">struct TypesView +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> ir::Union{IRCode, IncrementalCompact} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code">types(ir::Union{IRCode, IncrementalCompact}) = TypesView(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(compact::IncrementalCompact, idx::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx < compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.result[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.ir.stmts[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(compact::IncrementalCompact, ssa::SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert ssa.id < compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.result[ssa.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(compact::IncrementalCompact, ssa::OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> id = ssa.id +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> if id <= length(compact.ir.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.ir.stmts[id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> id -= length(compact.ir.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> if id <= length(compact.ir.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.ir.new_nodes[id].node +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> id -= length(compact.ir.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.pending_nodes[id].node +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(compact::IncrementalCompact, ssa::NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.new_new_nodes[ssa.id].node +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code">function count_added_node!(compact::IncrementalCompact, @nospecialize(v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> needs_late_fixup = isa(v, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(v, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[v.id] += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> for ops in userefs(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> val = ops[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[val.id] += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> needs_late_fixup = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> needs_late_fixup +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">function resort_pending!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> sort!(compact.pending_perm, DEFAULT_STABLE, Order.By(x->compact.pending_nodes[x].pos)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code">function insert_node!(compact::IncrementalCompact, before, @nospecialize(typ), @nospecialize(val), attach_after::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(before, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> if before.id < compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> count_added_node!(compact, val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> line = compact.result_lines[before.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.new_new_nodes, NewNode(before.id, attach_after, typ, val, line)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> return NewSSAValue(length(compact.new_new_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> line = compact.ir.lines[before.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.pending_nodes, NewNode(before.id, attach_after, typ, val, line)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.pending_perm, length(compact.pending_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> resort_pending!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> os = OldSSAValue(length(compact.ir.stmts) + length(compact.ir.new_nodes) + length(compact.pending_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.ssa_rename, os) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.used_ssas, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> return os +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(before, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> pos = before.id +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> if pos > length(compact.ir.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> #@assert attach_after +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> entry = compact.pending_nodes[pos - length(compact.ir.stmts) - length(compact.ir.new_nodes)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> pos, attach_after = entry.pos, entry.attach_after +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> line = compact.ir.lines[pos] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.pending_nodes, NewNode(pos, attach_after, typ, val, line)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.pending_perm, length(compact.pending_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> resort_pending!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> os = OldSSAValue(length(compact.ir.stmts) + length(compact.ir.new_nodes) + length(compact.pending_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.ssa_rename, os) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.used_ssas, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> return os +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(before, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> before_entry = compact.new_new_nodes[before.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.new_new_nodes, NewNode(before_entry.pos, attach_after, typ, val, before_entry.line)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> return NewSSAValue(length(compact.new_new_nodes)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> error("Unsupported") +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code">function insert_node_here!(compact::IncrementalCompact, @nospecialize(val), @nospecialize(typ), ltable_idx::Int32, reverse_affinity::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.result_idx > length(compact.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert compact.result_idx == length(compact.result) + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact, compact.result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> refinish = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.result_idx == first(compact.result_bbs[compact.active_result_bb].stmts) && reverse_affinity +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.active_result_bb -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> refinish = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result[compact.result_idx] = val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_types[compact.result_idx] = typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_lines[compact.result_idx] = ltable_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_flags[compact.result_idx] = 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> if count_added_node!(compact, val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.late_fixup, compact.result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = SSAValue(compact.result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> refinish && finish_current_bb!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(view::TypesView, v::OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> id = v.id +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> if id <= length(view.ir.ir.types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.ir.types[id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> id -= length(view.ir.ir.types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"> if id <= length(view.ir.ir.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.ir.new_nodes[id].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> id -= length(view.ir.ir.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.pending_nodes[id].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(compact::IncrementalCompact, @nospecialize(v), idx::SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert idx.id < compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> (compact.result[idx.id] === v) && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> # Kill count for current uses +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> for ops in userefs(compact.result[idx.id]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> val = ops[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert compact.used_ssas[val.id] >= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[val.id] -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result[idx.id] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> # Add count for new use +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> if count_added_node!(compact, v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(compact.late_fixup, idx.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code">function setindex!(compact::IncrementalCompact, @nospecialize(v), idx::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx < compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> compact[SSAValue(idx)] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.ir.stmts[idx] = v +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(view::TypesView, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(idx, SSAValue) && (idx = idx.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(view.ir, IncrementalCompact) && idx < view.ir.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.result_types[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(view.ir, IncrementalCompact) && view.ir.renamed_new_nodes +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx <= length(view.ir.result_types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.result_types[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"> return view.ir.new_new_nodes[idx - length(view.ir.result_types)].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"> ir = isa(view.ir, IncrementalCompact) ? view.ir.ir : view.ir +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx <= length(ir.types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"> return ir.types[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"> return ir.new_nodes[idx - length(ir.types)].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(view::TypesView, idx::NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(view.ir, IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> compact = view.ir +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.new_new_nodes[idx.id].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> view.ir.new_nodes[idx.id].typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code">function process_phinode_values(old_values::Vector{Any}, late_fixup::Vector{Int}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> processed_idx::Int, result_idx::Int, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename::Vector{Any}, used_ssas::Vector{Int}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> do_rename_ssa::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> values = Vector{Any}(undef, length(old_values)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(old_values) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(old_values, i) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> val = old_values[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> if do_rename_ssa +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> if val.id > processed_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(late_fixup, result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> val = OldSSAValue(val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"> val = renumber_ssa2(val, ssa_rename, used_ssas, do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> used_ssas[val.id] += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(val, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> if val.id > processed_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(late_fixup, result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code"> # Always renumber these. do_rename_ssa applies only to actual SSAValues +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> val = renumber_ssa2(SSAValue(val.id), ssa_rename, used_ssas, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(late_fixup, result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> values[i] = val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> return values +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code">function renumber_ssa2(val::SSAValue, ssanums::Vector{Any}, used_ssa::Vector{Int}, do_rename_ssa::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> id = val.id +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"> if id > length(ssanums) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> return val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"> if do_rename_ssa +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> val = ssanums[id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) && used_ssa !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> used_ssa[val.id] += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> return val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code">function renumber_ssa2!(@nospecialize(stmt), ssanums::Vector{Any}, used_ssa::Vector{Int}, late_fixup::Vector{Int}, result_idx::Int, do_rename_ssa::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> urs = userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> for op in urs +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> val = op[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, OldSSAValue) || isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(late_fixup, result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> val = renumber_ssa2(val, ssanums, used_ssa, do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, OldSSAValue) || isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(late_fixup, result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> op[] = val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> return urs[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code">function process_node!(result::Vector{Any}, result_idx::Int, ssa_rename::Vector{Any}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> late_fixup::Vector{Int}, used_ssas::Vector{Int}, @nospecialize(stmt), +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code"> idx::Int, processed_idx::Int, do_rename_ssa::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename[idx] = SSAValue(result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename[idx] = stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename[idx] = ssa_rename[stmt.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, GotoNode) || isa(stmt, GlobalRef) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> result[result_idx] = stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, Expr) || isa(stmt, PiNode) || isa(stmt, GotoIfNot) || isa(stmt, ReturnNode) || isa(stmt, UpsilonNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code"> result[result_idx] = renumber_ssa2!(stmt, ssa_rename, used_ssas, late_fixup, result_idx, do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> result[result_idx] = PhiNode(stmt.edges, process_phinode_values(stmt.values, late_fixup, processed_idx, result_idx, ssa_rename, used_ssas, do_rename_ssa)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiCNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> result[result_idx] = PhiCNode(process_phinode_values(stmt.values, late_fixup, processed_idx, result_idx, ssa_rename, used_ssas, do_rename_ssa)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> # identity assign, replace uses of this ssa value with its result +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> if do_rename_ssa +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = ssa_rename[stmt.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename[idx] = stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> # Constant assign, replace uses of this ssa value with its result +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> ssa_rename[idx] = stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> return result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code">function process_node!(compact::IncrementalCompact, result_idx::Int, @nospecialize(stmt), idx::Int, processed_idx::Int, do_rename_ssa::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> return process_node!(compact.result, result_idx, compact.ssa_rename, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.late_fixup, compact.used_ssas, stmt, idx, processed_idx, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code">function resize!(compact::IncrementalCompact, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> old_length = length(compact.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_types, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_lines, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_flags, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.used_ssas, nnewnodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in (old_length+1):nnewnodes +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[i] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code">function finish_current_bb!(compact, old_result_idx=compact.result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> bb = compact.result_bbs[compact.active_result_bb] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> # If this was the last statement in the BB and we decided to skip it, insert a +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code"> # dummy `nothing` node, to prevent changing the structure of the CFG +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.result_idx == first(bb.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> length(compact.result) < old_result_idx && resize!(compact, old_result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result[old_result_idx] = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_types[old_result_idx] = Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_lines[old_result_idx] = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_flags[old_result_idx] = 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_idx = old_result_idx + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_bbs[compact.active_result_bb] = BasicBlock(bb, StmtRange(first(bb.stmts), compact.result_idx-1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.active_result_bb += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.active_result_bb <= length(compact.result_bbs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"> new_bb = compact.result_bbs[compact.active_result_bb] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_bbs[compact.active_result_bb] = BasicBlock(new_bb, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"> StmtRange(compact.result_idx, last(new_bb.stmts))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code">function attach_after_stmt_after(compact::IncrementalCompact, idx::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.new_nodes_idx > length(compact.perm) && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> entry = compact.ir.new_nodes[compact.perm[compact.new_nodes_idx]] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"> entry.pos == idx && entry.attach_after +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code">function process_newnode!(compact, new_idx, new_node_entry, idx, active_bb, do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> old_result_idx = compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> bb = compact.ir.cfg.blocks[active_bb] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_types[old_result_idx] = new_node_entry.typ +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_lines[old_result_idx] = new_node_entry.line +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx = process_node!(compact, old_result_idx, new_node_entry.node, new_idx, idx - 1, do_rename_ssa) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_idx = result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> # If this instruction has reverse affinity and we were at the end of a basic block, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> # finish it now. +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> if new_node_entry.attach_after && idx == last(bb.stmts)+1 && !attach_after_stmt_after(compact, idx-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> active_bb += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> finish_current_bb!(compact, old_result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> (old_result_idx == result_idx) && return iterate(compact, (idx, active_bb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code"> return Pair{Int, Any}(old_result_idx, compact.result[old_result_idx]), (compact.idx, active_bb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code">function iterate(compact::IncrementalCompact, (idx, active_bb)::Tuple{Int, Int}=(compact.idx, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code"> old_result_idx = compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx > length(compact.ir.stmts) && (compact.new_nodes_idx > length(compact.perm)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(compact.result) < old_result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact, old_result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> bb = compact.ir.cfg.blocks[active_bb] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.new_nodes_idx <= length(compact.perm) && +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> (entry = compact.ir.new_nodes[compact.perm[compact.new_nodes_idx]]; +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> entry.attach_after ? entry.pos == idx - 1 : entry.pos == idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> new_idx = compact.perm[compact.new_nodes_idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.new_nodes_idx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> new_node_entry = compact.ir.new_nodes[new_idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code"> new_idx += length(compact.ir.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code"> return process_newnode!(compact, new_idx, new_node_entry, idx, active_bb, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !isempty(compact.pending_perm) && +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code"> (entry = compact.pending_nodes[compact.pending_perm[1]]; +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> entry.attach_after ? entry.pos == idx - 1 : entry.pos == idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code"> new_idx = popfirst!(compact.pending_perm) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code"> new_node_entry = compact.pending_nodes[new_idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code"> new_idx += length(compact.ir.stmts) + length(compact.ir.new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code"> return process_newnode!(compact, new_idx, new_node_entry, idx, active_bb, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> # This will get overwritten in future iterations if +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> # result_idx is not, incremented, but that's ok and expected +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_types[old_result_idx] = compact.ir.types[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_lines[old_result_idx] = compact.ir.lines[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_flags[old_result_idx] = compact.ir.flags[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx = process_node!(compact, old_result_idx, compact.ir.stmts[idx], idx, idx, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt_if_any = old_result_idx == result_idx ? nothing : compact.result[old_result_idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_idx = result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx == last(bb.stmts) && !attach_after_stmt_after(compact, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> active_bb += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> finish_current_bb!(compact, old_result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> (old_result_idx == compact.result_idx) && return iterate(compact, (idx + 1, active_bb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.idx = idx + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isassigned(compact.result, old_result_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> return Pair{Int, Any}(old_result_idx, compact.result[old_result_idx]), (compact.idx, active_bb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-maybe_erase_unused-897"></a> + 1 (2.70%) samples spent in maybe_erase_unused!<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + maybe_erase_unused! + <a href="ir-jl-bebdc9bf648f41024d37-line.html#Lir-jl-bebdc9bf648f41024d37-line.html-898">line 898</a><br /> + </div> + <span class="code">function maybe_erase_unused!(extra_worklist, compact, idx, callback = x->nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-898"></a>898</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-maybe_erase_unused-898"></a> + 1 (2.70%) samples spent in maybe_erase_unused!<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + simple_dce! + <a href="ir-jl-bebdc9bf648f41024d37-line.html#Lir-jl-bebdc9bf648f41024d37-line.html-991">line 991</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="ir-jl-bebdc9bf648f41024d37-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-maybe_erase_unused-897">maybe_erase_unused!</a><br /> + </div> + <span class="code"> stmt = compact.result[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt === nothing && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact_exprtype(compact, SSAValue(idx)) === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> effect_free = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-903"></a>903</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="queries-jl-3d33f551d26c44796e11-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-queries-jl-stmt_effect_free-6">stmt_effect_free</a><br /> + </div> + <span class="code"> effect_free = stmt_effect_free(stmt, compact.result_types[idx], compact, compact.ir.spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> if effect_free +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> for ops in userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> val = ops[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> # If the pass we ran inserted new nodes, it's possible for those +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code"> # to be outside our used_ssas count. +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) && val.id <= length(compact.used_ssas) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code"> if compact.used_ssas[val.id] == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> if val.id < idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(extra_worklist, val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[val.id] -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code"> callback(val) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result[idx] = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code">function fixup_phinode_values!(compact::IncrementalCompact, old_values::Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> values = Vector{Any}(undef, length(old_values)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(old_values) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(old_values, i) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> val = old_values[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> val = compact.ssa_rename[val.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.used_ssas[val.id] += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> val = SSAValue(length(compact.result) + val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> values[i] = val +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> values +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code">function fixup_node(compact::IncrementalCompact, @nospecialize(stmt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, PhiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> return PhiNode(stmt.edges, fixup_phinode_values!(compact, stmt.values)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, PhiCNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code"> return PhiCNode(fixup_phinode_values!(compact, stmt.values)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code"> return SSAValue(length(compact.result) + stmt.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(stmt, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.ssa_rename[stmt.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> urs = userefs(stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> urs === () && return stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> for ur in urs +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> val = ur[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(val, NewSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> ur[] = SSAValue(length(compact.result) + val.id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(val, OldSSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> ur[] = compact.ssa_rename[val.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> return urs[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code">function just_fixup!(compact::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code"> for idx in compact.late_fixup +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = compact.result[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code"> new_stmt = fixup_node(compact, stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> (stmt !== new_stmt) && (compact.result[idx] = new_stmt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> for idx in 1:length(compact.new_new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> node = compact.new_new_nodes[idx] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> new_stmt = fixup_node(compact, node.node) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code"> if node.node !== new_stmt +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.new_new_nodes[idx] = NewNode( +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> node.pos, node.attach_after, node.typ, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> new_stmt, node.line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code">function simple_dce!(compact::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-simple_dce-986"></a> + 1 (2.70%) samples spent in simple_dce!<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + finish + <a href="ir-jl-bebdc9bf648f41024d37-line.html#Lir-jl-bebdc9bf648f41024d37-line.html-1014">line 1014</a><br /> + </div> + <span class="code"> # Perform simple DCE for unused values +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> extra_worklist = Int[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code"> for (idx, nused) in Iterators.enumerate(compact.used_ssas) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code"> idx >= compact.result_idx && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code"> nused == 0 || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-991"></a>991</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="ir-jl-bebdc9bf648f41024d37-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-maybe_erase_unused-898">maybe_erase_unused!</a><br /> + </div> + <span class="code"> maybe_erase_unused!(extra_worklist, compact, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code"> while !isempty(extra_worklist) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code"> maybe_erase_unused!(extra_worklist, compact, pop!(extra_worklist)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code">function non_dce_finish!(compact::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code"> result_idx = compact.result_idx +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result, result_idx-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_types, result_idx-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_lines, result_idx-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(compact.result_flags, result_idx-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> just_fixup!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code"> bb = compact.result_bbs[end] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.result_bbs[end] = BasicBlock(bb, +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code"> StmtRange(first(bb.stmts), result_idx-1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code"> compact.renamed_new_nodes = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code">function finish(compact::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> non_dce_finish!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1014"></a>1014</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-finish-1014"></a> + 1 (2.70%) samples spent in finish<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + compact! + <a href="ir-jl-bebdc9bf648f41024d37-line.html#Lir-jl-bebdc9bf648f41024d37-line.html-1027">line 1027</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="ir-jl-bebdc9bf648f41024d37-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-simple_dce-986">simple_dce!</a><br /> + </div> + <span class="code"> simple_dce!(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> return complete(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code">function complete(compact::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code"> cfg = CFG(compact.result_bbs, Int[first(bb.stmts) for bb in compact.result_bbs[2:end]]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code"> return IRCode(compact.ir, compact.result, compact.result_types, compact.result_lines, compact.result_flags, cfg, compact.new_new_nodes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-compact-1023"></a> + 1 (2.70%) samples spent in compact!<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + run_passes + <a href="driver-jl-4d4652571be99309ac0c-line.html#Ldriver-jl-4d4652571be99309ac0c-line.html-121">line 121</a><br /> + </div> + <span class="code">function compact!(code::IRCode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code"> compact = IncrementalCompact(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code"> # Just run through the iterator without any processing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code"> foreach(x -> nothing, compact) # x isa Pair{Int, Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1027"></a>1027</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="ir-jl-bebdc9bf648f41024d37-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-ir-jl-finish-1014">finish</a><br /> + </div> + <span class="code"> return finish(compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code">struct BBIdxIter +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code"> ir::IRCode +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code">bbidxiter(ir::IRCode) = BBIdxIter(ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code">function iterate(x::BBIdxIter, (idx, bb)::Tuple{Int, Int}=(1, 1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code"> idx > length(x.ir.stmts) && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code"> active_bb = x.ir.cfg.blocks[bb] +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code"> next_bb = bb +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code"> if idx == last(active_bb.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code"> next_bb += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code"> return (bb, idx), (idx + 1, next_bb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lir-jl-bebdc9bf648f41024d37-line.html-1044"></a>1044</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/libuv-jl-530c66ad95b5a57763e9-line.html b/profiling/statprof/libuv-jl-530c66ad95b5a57763e9-line.html new file mode 100644 index 0000000000000000000000000000000000000000..9ac50da555a2e1cc9b414c5c85ed67bb2f837acb --- /dev/null +++ b/profiling/statprof/libuv-jl-530c66ad95b5a57763e9-line.html @@ -0,0 +1,1478 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># Core definitions for interacting with the libuv library from Julia +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">include(string(length(Core.ARGS) >= 2 ? Core.ARGS[2] : "", "uv_constants.jl")) # include($BUILDROOT/base/uv_constants.jl) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"># convert UV handle data to julia object, checking for null +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_sizeof_handle(handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(UV_UNKNOWN_HANDLE < handle < UV_HANDLE_TYPE_MAX) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(DomainError(handle)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_handle_size,Csize_t,(Int32,),handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_sizeof_req(req) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(UV_UNKNOWN_REQ < req < UV_REQ_TYPE_MAX) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(DomainError(req)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_req_size,Csize_t,(Int32,),req) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">for h in uv_handle_types +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">@eval const $(Symbol("_sizeof_",lowercase(string(h)))) = uv_sizeof_handle($h) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">for r in uv_req_types +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">@eval const $(Symbol("_sizeof_",lowercase(string(r)))) = uv_sizeof_req($r) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">uv_handle_data(handle) = ccall(:jl_uv_handle_data,Ptr{Cvoid},(Ptr{Cvoid},),handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">uv_req_data(handle) = ccall(:jl_uv_req_data,Ptr{Cvoid},(Ptr{Cvoid},),handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">uv_req_set_data(req,data) = ccall(:jl_uv_req_set_data,Cvoid,(Ptr{Cvoid},Any),req,data) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">uv_req_set_data(req,data::Ptr{Cvoid}) = ccall(:jl_uv_req_set_data,Cvoid,(Ptr{Cvoid},Ptr{Cvoid}),req,data) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">macro handle_as(hand, typ) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> quote +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> data = uv_handle_data($(esc(hand))) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> data == C_NULL && return +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_pointer_to_objref(data)::($(esc(typ))) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">associate_julia_struct(handle::Ptr{Cvoid}, @nospecialize(jlobj)) = +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_uv_associate_julia_struct, Cvoid, (Ptr{Cvoid}, Any), handle, jlobj) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">disassociate_julia_struct(uv) = disassociate_julia_struct(uv.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">disassociate_julia_struct(handle::Ptr{Cvoid}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> handle != C_NULL && ccall(:jl_uv_disassociate_julia_struct, Cvoid, (Ptr{Cvoid},), handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"># A dict of all libuv handles that are being waited on somewhere in the system +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"># and should thus not be garbage collected +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">const uvhandles = IdDict() +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">function preserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> v = get(uvhandles, x, 0)::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> uvhandles[x] = v + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">function unpreserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> v = uvhandles[x]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> if v == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> pop!(uvhandles, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> uvhandles[x] = v - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">## Libuv error handling ## +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">struct IOError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> msg::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> code::Int32 +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> IOError(msg::AbstractString, code::Integer) = new(msg, code) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">showerror(io::IO, e::IOError) = print(io, "IOError: ", e.msg) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">function _UVError(pfx::AbstractString, code::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> code = Int32(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> IOError(string(pfx, ": ", struverror(code), " (", uverrorname(code), ")"), code) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">struverror(err::Int32) = unsafe_string(ccall(:uv_strerror,Cstring,(Int32,),err)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">uverrorname(err::Int32) = unsafe_string(ccall(:uv_err_name,Cstring,(Int32,),err)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">uv_error(prefix::Symbol, c::Integer) = uv_error(string(prefix),c) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">uv_error(prefix::AbstractString, c::Integer) = c < 0 ? throw(_UVError(prefix,c)) : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code">## event loop ## +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">eventloop() = uv_eventloop::Ptr{Cvoid} +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">#mkNewEventLoop() = ccall(:jl_new_event_loop,Ptr{Cvoid},()) # this would probably be fine, but is nowhere supported +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">function run_event_loop() +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_run_event_loop,Cvoid,(Ptr{Cvoid},),eventloop()) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">function process_events(block::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> loop = eventloop() +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> if block +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-98"></a>98</td> + <td>3 (7.14%)</td> + <td>3 (7.14%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98"></a> + 3 (7.14%) samples spent in process_events<br /> + 3 (100.00%) (ex.), + 3 (100.00%) (incl.) + when called from + wait + <a href="event-jl-9f2b370029d9fd3c8bef-line.html#Levent-jl-9f2b370029d9fd3c8bef-line.html-246">line 246</a><br /> + </div> + <span class="code"> return ccall(:jl_run_once,Int32,(Ptr{Cvoid},),loop) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:jl_process_events,Int32,(Ptr{Cvoid},),loop) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_alloc_buf end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_readcb end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_writecb_task end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_return_spawn end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_asynccb end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_timercb end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">function reinit_stdio() +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_alloc_buf = @cfunction(uv_alloc_buf, Cvoid, (Ptr{Cvoid}, Csize_t, Ptr{Cvoid})) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_readcb = @cfunction(uv_readcb, Cvoid, (Ptr{Cvoid}, Cssize_t, Ptr{Cvoid})) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_writecb_task = @cfunction(uv_writecb_task, Cvoid, (Ptr{Cvoid}, Cint)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_return_spawn = @cfunction(uv_return_spawn, Cvoid, (Ptr{Cvoid}, Int64, Int32)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_asynccb = @cfunction(uv_asynccb, Cvoid, (Ptr{Cvoid},)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_jl_timercb = @cfunction(uv_timercb, Cvoid, (Ptr{Cvoid},)) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> global uv_eventloop = ccall(:jl_global_event_loop, Ptr{Cvoid}, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> global stdin = init_stdio(ccall(:jl_stdin_stream, Ptr{Cvoid}, ())) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> global stdout = init_stdio(ccall(:jl_stdout_stream, Ptr{Cvoid}, ())) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> global stderr = init_stdio(ccall(:jl_stderr_stream, Ptr{Cvoid}, ())) +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> stdin +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code">Global variable referring to the standard input stream. +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">:stdin +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> stdout +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">Global variable referring to the standard out stream. +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">:stdout +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> stderr +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">Global variable referring to the standard error stream. +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Llibuv-jl-530c66ad95b5a57763e9-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">:stderr +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/loading-jl-267f08df202e5203e249-line.html b/profiling/statprof/loading-jl-267f08df202e5203e249-line.html new file mode 100644 index 0000000000000000000000000000000000000000..9ff3c08d7776fd0367bd5fbc701b2418de49b5fb --- /dev/null +++ b/profiling/statprof/loading-jl-267f08df202e5203e249-line.html @@ -0,0 +1,14383 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># Base.require is the implementation for the `import` statement +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># Cross-platform case-sensitive path canonicalization +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.isunix() && !Sys.isapple() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> # assume case-sensitive filesystems, don't have to do anything +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(path) = isfile(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">elseif Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> # GetLongPathName Win32 function returns the case-preserved filename on NTFS. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> function isfile_casesensitive(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile(path) || return false # Fail fast +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> basename(Filesystem.longpath(path)) == basename(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">elseif Sys.isapple() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> # HFS+ filesystem is case-preserving. The getattrlist API returns +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> # a case-preserved filename. In the rare event that HFS+ is operating +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> # in case-sensitive mode, this will still work but will be redundant. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> # Constants from <sys/attr.h> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> const ATRATTR_BIT_MAP_COUNT = 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> const ATTR_CMN_NAME = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> const BITMAPCOUNT = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> const COMMONATTR = 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> const FSOPT_NOFOLLOW = 1 # Don't follow symbolic links +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> const attr_list = zeros(UInt8, 24) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> attr_list[BITMAPCOUNT] = ATRATTR_BIT_MAP_COUNT +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> attr_list[COMMONATTR] = ATTR_CMN_NAME +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> # This essentially corresponds to the following C code: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> # attrlist attr_list; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> # memset(&attr_list, 0, sizeof(attr_list)); +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> # attr_list.bitmapcount = ATTR_BIT_MAP_COUNT; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> # attr_list.commonattr = ATTR_CMN_NAME; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> # struct Buffer { +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> # u_int32_t total_length; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> # u_int32_t filename_offset; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> # u_int32_t filename_length; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> # char filename[max_filename_length]; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> # }; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> # Buffer buf; +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> # getattrpath(path, &attr_list, &buf, sizeof(buf), FSOPT_NOFOLLOW); +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> function isfile_casesensitive(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile(path) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> path_basename = String(basename(path)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> local casepreserved_basename +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> header_size = 12 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = Vector{UInt8}(undef, length(path_basename) + header_size + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = ccall(:getattrlist, Cint, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> (Cstring, Ptr{Cvoid}, Ptr{Cvoid}, Csize_t, Culong), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> path, attr_list, buf, sizeof(buf), FSOPT_NOFOLLOW) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> systemerror(:getattrlist, ret ≠ 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> filename_length = GC.@preserve buf unsafe_load( +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> convert(Ptr{UInt32}, pointer(buf) + 8)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> if (filename_length + header_size) > length(buf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> resize!(buf, filename_length + header_size) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> casepreserved_basename = +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> view(buf, (header_size+1):(header_size+filename_length-1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> # Hack to compensate for inability to create a string from a subarray with no allocations. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> codeunits(path_basename) == casepreserved_basename && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> # If there is no match, it's possible that the file does exist but HFS+ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> # performed unicode normalization. See https://developer.apple.com/library/mac/qa/qa1235/_index.html. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> isascii(path_basename) && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> codeunits(Unicode.normalize(path_basename, :NFD)) == casepreserved_basename +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> # Generic fallback that performs a slow directory listing. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> function isfile_casesensitive(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile(path) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> dir, filename = splitdir(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> any(readdir(dir) .== filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">## SHA1 ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">struct SHA1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> bytes::Vector{UInt8} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> function SHA1(bytes::Vector{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> length(bytes) == 20 || +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("wrong number of bytes for SHA1 hash: $(length(bytes))")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(bytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">SHA1(s::AbstractString) = SHA1(hex2bytes(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">string(hash::SHA1) = bytes2hex(hash.bytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">print(io::IO, hash::SHA1) = bytes2hex(io, hash.bytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, hash::SHA1) = print(io, "SHA1(\"", hash, "\")") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">isless(a::SHA1, b::SHA1) = lexless(a.bytes, b.bytes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">hash(a::SHA1, h::UInt) = hash((SHA1, a.bytes), h) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">==(a::SHA1, b::SHA1) = a.bytes == b.bytes +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"># fake uuid5 function (for self-assigned UUIDs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: delete and use real uuid5 once it's in stdlib +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">function uuid5(namespace::UUID, key::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> u::UInt128 = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> h = hash(namespace) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> for _ = 1:sizeof(u)÷sizeof(h) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> u <<= sizeof(h) << 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= (h = hash(key, h)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> u &= 0xffffffffffff0fff3fffffffffffffff +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= 0x00000000000050008000000000000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> return UUID(u) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">const ns_dummy_uuid = UUID("fe0723d6-3a44-4c41-8065-ee0f42c8ceab") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">dummy_uuid(project_file::String) = isfile_casesensitive(project_file) ? +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid5(ns_dummy_uuid, realpath(project_file)) : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">## package path slugs: turning UUID + SHA1 into a pair of 4-byte "slugs" ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">const slug_chars = String(['A':'Z'; 'a':'z'; '0':'9']) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">function slug(x::UInt32, p::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> sprint(sizehint=p) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(slug_chars) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:p +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> x, d = divrem(x, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, slug_chars[1+d]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">function package_slug(uuid::UUID, p::Int=5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> crc = _crc32c(uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> return slug(crc, p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">function version_slug(uuid::UUID, sha1::SHA1, p::Int=5) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> crc = _crc32c(uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> crc = _crc32c(sha1.bytes, crc) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> return slug(crc, p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">## package identification: determine unique identity of package to be loaded ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">find_package(args...) = locate_package(identify_package(args...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code">struct PkgId +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid::Union{UUID,Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> name::String +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> PkgId(u::UUID, name::AbstractString) = new(UInt128(u) == 0 ? nothing : u, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> PkgId(::Nothing, name::AbstractString) = new(nothing, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code">PkgId(name::AbstractString) = PkgId(nothing, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">function PkgId(m::Module, name::String = String(nameof(moduleroot(m)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID(ccall(:jl_module_uuid, NTuple{2, UInt64}, (Any,), m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> UInt128(uuid) == 0 ? PkgId(name) : PkgId(uuid, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code">==(a::PkgId, b::PkgId) = a.uuid == b.uuid && a.name == b.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">function hash(pkg::PkgId, h::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> h += 0xc9f248583a0ca36c % UInt +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> h = hash(pkg.uuid, h) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> h = hash(pkg.name, h) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> return h +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, pkg::PkgId) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, pkg.name, " [", pkg.uuid === nothing ? "top-level" : pkg.uuid, "]") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">function binpack(pkg::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> io = IOBuffer() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, UInt8(0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = pkg.uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, uuid === nothing ? UInt128(0) : UInt128(uuid)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(take!(io)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">function binunpack(s::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> io = IOBuffer(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert read(io, UInt8) === 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = read(io, UInt128) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> name = read(io, String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> return PkgId(UUID(uuid), name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code">function identify_package(where::Module, name::String)::Union{Nothing,PkgId} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> identify_package(PkgId(where), name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">function identify_package(where::PkgId, name::String)::Union{Nothing,PkgId} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> where.name === name && return where +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> where.uuid === nothing && return identify_package(name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> for env in load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid = manifest_deps_get(env, where, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid isa UUID && return PkgId(found_or_uuid, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">function identify_package(name::String)::Union{Nothing,PkgId} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> for env in load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid = project_deps_get(env, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid isa UUID && return PkgId(found_or_uuid, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid && return PkgId(name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">function identify_package(name::String, names::String...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg = identify_package(name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg === nothing ? nothing : +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg.uuid === nothing ? identify_package(names...) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> identify_package(pkg, names...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">function identify_package(where::PkgId, name::String, names::String...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg = identify_package(where, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg === nothing ? nothing : +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg.uuid === nothing ? identify_package(names...) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> identify_package(pkg, names...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">## package location: given a package identity find file to load ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">function locate_package(pkg::PkgId)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> if pkg.uuid === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> for env in load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid = project_deps_get(env, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid isa UUID && +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> return locate_package(PkgId(found_or_uuid, pkg.name)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid && return implicit_manifest_uuid_path(env, pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> for env in load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> path = manifest_uuid_path(env, pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> path != nothing && return entry_path(path, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">locate_package(::Nothing) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> pathof(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code">Return the path of `m.jl` file that was used to `import` module `m`, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">or `nothing` if `m` was not imported from a package. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`dirname`](@ref) to get the directory part and [`basename`](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code">to get the file name part of the path. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code">function pathof(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> pkgid = get(Base.module_keys, m, nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> pkgid === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> return Base.locate_package(pkgid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code">## generic project & manifest API ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">const project_names = ("JuliaProject.toml", "Project.toml") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code">const manifest_names = ("JuliaManifest.toml", "Manifest.toml") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"># return means +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"># - `false`: nothing to see here +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"># - `true`: `env` is an implicit environment +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"># - `path`: the path of an explicit project file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">function env_project_file(env::String)::Union{Bool,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdir(env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> for proj in project_names +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = joinpath(env, proj) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(project_file) && return project_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif basename(env) in project_names && isfile_casesensitive(env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> return env +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code">function project_deps_get(env::String, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = env_project_file(env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> if project_file isa String +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> return explicit_project_deps_get(project_file, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file && implicit_project_deps_get(env, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">function manifest_deps_get(env::String, where::PkgId, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert where.uuid !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = env_project_file(env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> if project_file isa String +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name, proj_uuid = project_file_name_uuid_path(project_file, where.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> if proj_name == where.name && proj_uuid == where.uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> # `where` matches the project, use deps as manifest +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid = explicit_project_deps_get(project_file, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> return found_or_uuid isa UUID ? found_or_uuid : true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> # look for `where` stanza in manifest file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> manifest_file = project_file_manifest_path(project_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> if isfile_casesensitive(manifest_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> return explicit_manifest_deps_get(manifest_file, where.uuid, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> return false # `where` stanza not found +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file && implicit_manifest_deps_get(env, where, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">function manifest_uuid_path(env::String, pkg::PkgId)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = env_project_file(env) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> if project_file isa String +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name, proj_uuid, path = project_file_name_uuid_path(project_file, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name == pkg.name && proj_uuid == pkg.uuid && return path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> manifest_file = project_file_manifest_path(project_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> if isfile_casesensitive(manifest_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> return explicit_manifest_uuid_path(manifest_file, pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file ? implicit_manifest_uuid_path(env, pkg) : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"># regular expressions for scanning project & manifest files +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">const re_section = r"^\s*\[" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">const re_array_of_tables = r"^\s*\[\s*\[" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code">const re_section_deps = r"^\s*\[\s*\"?deps\"?\s*\]\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">const re_section_capture = r"^\s*\[\s*\[\s*\"?(\w+)\"?\s*\]\s*\]\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code">const re_subsection_deps = r"^\s*\[\s*\"?(\w+)\"?\s*\.\s*\"?deps\"?\s*\]\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code">const re_key_to_string = r"^\s*(\w+)\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">const re_uuid_to_string = r"^\s*uuid\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">const re_name_to_string = r"^\s*name\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">const re_path_to_string = r"^\s*path\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">const re_hash_to_string = r"^\s*git-tree-sha1\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">const re_manifest_to_string = r"^\s*manifest\s*=\s*\"(.*)\"\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">const re_deps_to_any = r"^\s*deps\s*=\s*(.*?)\s*(?:#|$)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"># find project file's top-level UUID entry (or nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">function project_file_name_uuid_path(project_file::String, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> name::String)::Tuple{String,UUID,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> open(project_file) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = dummy_uuid(project_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> path = joinpath("src", "$name.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin(re_section, line) && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_name_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> name = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_uuid_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_path_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> path = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> path = joinpath(dirname(project_file), path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> return name, uuid, path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"># find project file's corresponding manifest file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">function project_file_manifest_path(project_file::String)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> open(project_file) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> dir = abspath(dirname(project_file)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin(re_section, line) && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_manifest_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> return normpath(joinpath(dir, m.captures[1])) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> local manifest_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> for mfst in manifest_names +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> manifest_file = joinpath(dir, mfst) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(manifest_file) && return manifest_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> return manifest_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"># find `name` in a manifest file and return its UUID +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">function manifest_file_name_uuid(manifest_file::String, name::String, io::IO)::Union{Nothing,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = name′ = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_section_capture, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> name′ == name && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> name′ = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_uuid_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> name′ == name ? uuid : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"># given package dir and name, find an entry point +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"># and project file if one exists (or nothing if not) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">function entry_point_and_project_file(dir::String, name::String)::Union{Tuple{Nothing,Nothing},Tuple{String,Nothing},Tuple{String,String}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> for entry in ("", joinpath(name, "src"), joinpath("$name.jl", "src")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> path = normpath(joinpath(dir, entry, "$name.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(path) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(entry) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> for proj in project_names +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = normpath(joinpath(dir, dirname(entry), proj)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(project_file) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> return path, project_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> return path, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"># given a path and a name, return the entry point +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">function entry_path(path::String, name::String)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(path) && return normpath(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> path = normpath(joinpath(path, "src", "$name.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(path) ? path : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">entry_path(::Nothing, name::String) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"># given a project path (project directory or entry point) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"># return the project file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">function package_path_to_project_file(path::String)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isdir(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> dir = dirname(path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> basename(dir) == "src" || return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> path = dirname(dir) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> for proj in project_names +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = joinpath(path, proj) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(project_file) && return project_file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">## explicit project & manifest API ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"># find project file root or deps `name => uuid` mapping +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"># - `false` means: did not find `name` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"># - `true` means: found `name` without UUID (can't happen in explicit projects) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"># - `uuid` means: found `name` with `uuid` in project file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code">function explicit_project_deps_get(project_file::String, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> open(project_file) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> root_name = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> root_uuid = dummy_uuid(project_file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> state = :top +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> if state == :top +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> if occursin(re_section, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> root_name == name && return root_uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> state = occursin(re_section_deps, line) ? :deps : :other +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_name_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> root_name = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_uuid_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> root_uuid = UUID(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif state == :deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_key_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> m.captures[1] == name && return UUID(m.captures[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> if occursin(re_section, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> state = occursin(re_section_deps, line) ? :deps : :other +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> return root_name == name && root_uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"># find `where` stanza and `name` in its deps and return its UUID +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"># - `false` means: did not find `where` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"># - `true` means: found `where` but `name` not in its deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"># - `uuid` means: found `where` and `name` mapped to `uuid` in its deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code">function explicit_manifest_deps_get(manifest_file::String, where::UUID, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> open(manifest_file) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = deps = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> state = :other +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> if occursin(re_array_of_tables, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid == where && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = deps = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> state = :stanza +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif state == :stanza +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_uuid_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_deps_to_any, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> deps = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif occursin(re_subsection_deps, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> state = :deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif occursin(re_section, line) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> state = :other +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif state == :deps && uuid == where +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_key_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> m.captures[1] == name && return UUID(m.captures[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid == where || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> deps === nothing && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: handle inline table syntax +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> if deps[1] != '[' || deps[end] != ']' +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "Unexpected TOML deps format:\n$deps" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin(repr(name), deps) || return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> seekstart(io) # rewind IO handle +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> return manifest_file_name_uuid(manifest_file, name, io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"># find `uuid` stanza, return the corresponding path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code">function explicit_manifest_uuid_path(manifest_file::String, pkg::PkgId)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> open(manifest_file) do io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = name = path = hash = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> for line in eachline(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> if (m = match(re_section_capture, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid == pkg.uuid && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> name = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> path = hash = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_uuid_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_path_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> path = String(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (m = match(re_hash_to_string, line)) != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> hash = SHA1(m.captures[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid == pkg.uuid || return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> name == pkg.name || return nothing # TODO: allow a mismatch? +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> if path != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> path = normpath(abspath(dirname(manifest_file), path)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> return entry_path(path, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> hash == nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> # Keep the 4 since it used to be the default +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> for slug in (version_slug(uuid, hash, 4), version_slug(uuid, hash)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> for depot in DEPOT_PATH +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> path = abspath(depot, "packages", name, slug) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> ispath(path) && return entry_path(path, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">## implicit project & manifest API ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"># look for an entry point for `name`: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"># - `false` means: did not find `name` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"># - `true` means: found `name` without project file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"># - `uuid` means: found `name` with project file with real or dummy `uuid` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code">function implicit_project_deps_get(dir::String, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> path, project_file = entry_point_and_project_file(dir, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file == nothing && return path != nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name, proj_uuid = project_file_name_uuid_path(project_file, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name == name && proj_uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"># look for an entry-point for `where` by name, check that UUID matches +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"># if there's a project file, look up `name` in its deps and return that +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"># - `false` means: did not find `where` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"># - `true` means: found `where` but `name` not in its deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"># - `uuid` means: found `where` and `name` mapped to `uuid` in its deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code">function implicit_manifest_deps_get(dir::String, where::PkgId, name::String)::Union{Bool,UUID} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert where.uuid !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file = entry_point_and_project_file(dir, where.name)[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> project_file === nothing && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name, proj_uuid = project_file_name_uuid_path(project_file, where.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name == where.name && proj_uuid == where.uuid || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid = explicit_project_deps_get(project_file, name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> found_or_uuid isa UUID ? found_or_uuid : true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"># look for an entry-point for `pkg` and return its path if UUID matches +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code">function implicit_manifest_uuid_path(dir::String, pkg::PkgId)::Union{Nothing,String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> path, project_file = entry_point_and_project_file(dir, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg.uuid === nothing && project_file === nothing && return path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg.uuid === nothing || project_file === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name, proj_uuid = project_file_name_uuid_path(project_file, pkg.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> proj_name == pkg.name && proj_uuid == pkg.uuid ? path : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code">## other code loading functionality ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code">function find_source_file(path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> (isabspath(path) || isfile(path)) && return path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> base_path = joinpath(Sys.BINDIR::String, DATAROOTDIR, "julia", "base", path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> return isfile(base_path) ? base_path : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code">cache_file_entry(pkg::PkgId) = joinpath( +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> "compiled", +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> "v$(VERSION.major).$(VERSION.minor)", +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg.uuid === nothing ? "$(pkg.name).ji" : joinpath(pkg.name, "$(package_slug(pkg.uuid)).ji") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code">) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code">function find_all_in_cache_path(pkg::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> paths = String[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> entry = cache_file_entry(pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> for depot in DEPOT_PATH +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> path = joinpath(depot, entry) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> isfile_casesensitive(path) && push!(paths, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> return paths +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"># these return either the array of modules loaded from the path / content given +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"># or an Exception that describes why it couldn't be loaded +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"># and it reconnects the Base.Docs.META +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code">function _include_from_serialized(path::String, depmods::Vector{Any}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> sv = ccall(:jl_restore_incremental, Any, (Cstring, Any), path, depmods) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(sv, Exception) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> return sv +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> restored = sv[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(restored, Exception) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> for M in restored::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> M = M::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(M, Base.Docs.META) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(Base.Docs.modules, M) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"> if parentmodule(M) === M +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> register_root_module(M) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(sv, 2) && ccall(:jl_init_restored_modules, Cvoid, (Any,), sv[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> return restored +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code">function _tryrequire_from_serialized(modkey::PkgId, build_id::UInt64, modpath::Union{Nothing, String}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> if root_module_exists(modkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> M = root_module(modkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> if PkgId(M) == modkey && module_build_id(M) === build_id +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> return M +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> if modpath === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> modpath = locate_package(modkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> modpath === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> mod = _require_search_from_serialized(modkey, String(modpath)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(mod, Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> for callback in package_callbacks +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(callback, modkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> for M in mod::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> if PkgId(M) == modkey && module_build_id(M) === build_id +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> return M +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code">function _require_from_serialized(path::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> # loads a precompile cache file, ignoring stale_cachfile tests +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> # load all of the dependent modules first +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> local depmodnames +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(path, "r") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"> isvalid_cache_header(io) || return ArgumentError("Invalid header in cache file $path.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"> depmodnames = parse_cache_header(io)[3] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"> isvalid_file_crc(io) || return ArgumentError("Invalid checksum in cache file $path.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"> ndeps = length(depmodnames) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> depmods = Vector{Any}(undef, ndeps) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:ndeps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"> modkey, build_id = depmodnames[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"> dep = _tryrequire_from_serialized(modkey, build_id, nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code"> dep === nothing && return ErrorException("Required dependency $modkey failed to load from a cache file.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> depmods[i] = dep::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> # then load the file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> return _include_from_serialized(path, depmods) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"># returns `true` if require found a precompile cache for this sourcepath, but couldn't load it +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"># returns `false` if the module isn't known to be precompilable +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"># returns the set of modules restored if the cache load succeeded +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code">function _require_search_from_serialized(pkg::PkgId, sourcepath::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> paths = find_all_in_cache_path(pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> for path_to_try in paths::Vector{String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> staledeps = stale_cachefile(sourcepath, path_to_try) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> if staledeps === true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> # finish loading module graph into staledeps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(staledeps) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> dep = staledeps[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> dep isa Module && continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> modpath, modkey, build_id = dep::Tuple{String, PkgId, UInt64} +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> dep = _tryrequire_from_serialized(modkey, build_id, modpath) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> if dep === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Required dependency $modkey failed to load from cache file for $modpath." +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"> staledeps = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> staledeps[i] = dep::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> if staledeps === true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> restored = _include_from_serialized(path_to_try, staledeps) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(restored, Exception) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Deserialization checks failed while attempting to load cache from $path_to_try" exception=restored +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code"> return restored +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> return !isempty(paths) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"># to synchronize multiple tasks trying to import/using something +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code">const package_locks = Dict{PkgId,Condition}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"># to notify downstream consumers that a module was successfully loaded +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"># Callbacks take the form (mod::Base.PkgId) -> nothing. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"># WARNING: This is an experimental feature and might change later, without deprecation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code">const package_callbacks = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"># to notify downstream consumers that a file has been included into a particular module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"># Callbacks take the form (mod::Module, filename::String) -> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"># WARNING: This is an experimental feature and might change later, without deprecation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code">const include_callbacks = Any[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"># used to optionally track dependencies when requiring a module: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code">const _concrete_dependencies = Pair{PkgId,UInt64}[] # these dependency versions are "set in stone", and the process should try to avoid invalidating them +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code">const _require_dependencies = Any[] # a list of (mod, path, mtime) tuples that are the file dependencies of the module currently being precompiled +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code">const _track_dependencies = Ref(false) # set this to true to track the list of file dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code">function _include_dependency(mod::Module, _path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> prev = source_path(nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> if prev === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> path = abspath(_path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> path = normpath(joinpath(dirname(prev), _path)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> if _track_dependencies[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(_require_dependencies, (mod, path, mtime(path))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> return path, prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> include_dependency(path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code">In a module, declare that the file specified by `path` (relative or absolute) is a +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code">dependency for precompilation; that is, the module will need to be recompiled if this file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code">changes. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code">This is only needed if your module depends on a file that is not used via `include`. It has +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code">no effect outside of compilation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code">function include_dependency(path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> _include_dependency(Main, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"># we throw PrecompilableError when a module doesn't want to be precompiled +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code">struct PrecompilableError <: Exception end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code">function show(io::IO, ex::PrecompilableError) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io, "Declaring __precompile__(false) is not allowed in files that are being precompiled.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code">precompilableerror(ex::PrecompilableError) = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code">precompilableerror(ex::WrappedException) = precompilableerror(ex.error) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code">precompilableerror(@nospecialize ex) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"># Call __precompile__(false) at the top of a tile prevent it from being precompiled (false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> __precompile__(isprecompilable::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code">Specify whether the file calling this function is precompilable, defaulting to `true`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code">If a module or file is *not* safely precompilable, it should call `__precompile__(false)` in +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code">order to throw an error if Julia attempts to precompile it. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline function __precompile__(isprecompilable::Bool=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isprecompilable && ccall(:jl_generating_output, Cint, ()) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(PrecompilableError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"># require always works in Main scope and loads files from node 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code">const toplevel_load = Ref(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code">const full_warning_showed = Ref(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code">const modules_warned_for = Set{PkgId}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"> require(into::Module, module::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code">This function is part of the implementation of `using` / `import`, if a module is not +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code">already defined in `Main`. It can also be called directly to force reloading a module, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code">regardless of whether it has been loaded before (for example, when interactively developing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code">libraries). +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code">Loads a source file, in the context of the `Main` module, on every active node, searching +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code">standard locations for files. `require` is considered a top-level operation, so it sets the +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code">current `include` path but does not use it to search for files (see help for `include`). +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code">This function is typically used to load library code, and is implicitly called by `using` to +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code">load packages. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code">When searching for files, `require` first looks for package code in the global array +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code">`LOAD_PATH`. `require` is case-sensitive on all platforms, including those with +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code">case-insensitive filesystems like macOS and Windows. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code">For more details regarding code loading, see the manual. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code">function require(into::Module, mod::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> uuidkey = identify_package(into, String(mod)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"> # Core.println("require($(PkgId(into)), $mod) -> $uuidkey") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> if uuidkey === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code"> where = PkgId(into) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> if where.uuid === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError(""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"> Package $mod not found in current path: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"> - Run `import Pkg; Pkg.add($(repr(String(mod))))` to install the $mod package. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> """)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> s = """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> Package $(where.name) does not have $mod in its dependencies: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code"> - If you have $(where.name) checked out for development and have +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> added $mod as a dependency but haven't updated your primary +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"> environment's manifest file, try `Pkg.resolve()`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code"> - Otherwise you may need to report an issue with $(where.name)""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code"> uuidkey = identify_package(PkgId(string(into)), String(mod)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> uuidkey === nothing && throw(ArgumentError(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> # fall back to toplevel loading with a warning +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(where in modules_warned_for) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn string( +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> full_warning_showed[] ? "" : s, "\n", +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> string("Loading $(mod) into $(where.name) from project dependency, ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> "future warnings for $(where.name) are suppressed.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> ) _module = nothing _file = nothing _group = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(modules_warned_for, where) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> full_warning_showed[] = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code"> if _track_dependencies[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(_require_dependencies, (into, binpack(uuidkey), 0.0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code"> return require(uuidkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code">function require(uuidkey::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> if !root_module_exists(uuidkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code"> _require(uuidkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code"> # After successfully loading, notify downstream consumers +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> for callback in package_callbacks +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(callback, uuidkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> return root_module(uuidkey) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code">const loaded_modules = Dict{PkgId,Module}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code">const module_keys = IdDict{Module,PkgId}() # the reverse +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code">is_root_module(m::Module) = haskey(module_keys, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code">root_module_key(m::Module) = module_keys[m] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code">function register_root_module(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code"> key = PkgId(m, String(nameof(m))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code"> if haskey(loaded_modules, key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> oldm = loaded_modules[key] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> if oldm !== m +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "Replacing module `$(key.name)`" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> loaded_modules[key] = m +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> module_keys[m] = key +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code">register_root_module(Core) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code">register_root_module(Base) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code">register_root_module(Main) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"># This is used as the current module when loading top-level modules. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code"># It has the special behavior that modules evaluated in it get added +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"># to the loaded_modules table instead of getting bindings. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">baremodule __toplevel__ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code">using Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code"># get a top-level Module from the given key +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code">root_module(key::PkgId) = loaded_modules[key] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code">root_module(where::Module, name::Symbol) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code"> root_module(identify_package(where, String(name))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code">root_module_exists(key::PkgId) = haskey(loaded_modules, key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code">loaded_modules_array() = collect(values(loaded_modules)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code">function unreference_module(key::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> if haskey(loaded_modules, key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> m = pop!(loaded_modules, key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> # need to ensure all modules are GC rooted; will still be referenced +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code"> # in module_keys +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code">function _require(pkg::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> # handle recursive calls to require +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code"> loading = get(package_locks, pkg, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> if loading !== false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code"> # load already in progress for this module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(loading) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> package_locks[pkg] = Condition() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> last = toplevel_load[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code"> toplevel_load[] = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code"> # perform the search operation to select the module file require intends to load +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> path = locate_package(pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> if path === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError(""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> Package $pkg is required but does not seem to be installed: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code"> - Run `Pkg.instantiate()` to install all recorded dependencies. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> """)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code"> # attempt to load the module file via the precompile cache locations +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code"> if JLOptions().use_compiled_modules != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> m = _require_search_from_serialized(pkg, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(m, Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code"> # if the module being required was supposed to have a particular version +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code"> # but it was not handled by the precompile loader, complain +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code"> for (concrete_pkg, concrete_build_id) in _concrete_dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> if pkg == concrete_pkg +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn """Module $(pkg.name) with build ID $concrete_build_id is missing from the cache. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code"> This may mean $pkg does not support precompilation but is imported by a module that does.""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> if JLOptions().incremental != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code"> # during incremental precompilation, this should be fail-fast +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(PrecompilableError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> if JLOptions().use_compiled_modules != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> if (0 == ccall(:jl_generating_output, Cint, ())) || (JLOptions().incremental != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code"> # spawn off a new incremental pre-compile task for recursive `require` calls +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> # or if the require search declared it was pre-compiled before (and therefore is expected to still be pre-compilable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code"> cachefile = compilecache(pkg, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(cachefile, Exception) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code"> if !precompilableerror(cachefile) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "The call to compilecache failed to create a usable precompiled cache file for $pkg" exception=m +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code"> # fall-through to loading the file locally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> m = _require_from_serialized(cachefile) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(m, Exception) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code"> @warn "The call to compilecache failed to create a usable precompiled cache file for $pkg" exception=m +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code"> # just load the file normally via include +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> # for unknown dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = pkg.uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = (uuid === nothing ? (UInt64(0), UInt64(0)) : convert(NTuple{2, UInt64}, uuid)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> old_uuid = ccall(:jl_module_uuid, NTuple{2, UInt64}, (Any,), __toplevel__) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code"> if uuid !== old_uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_set_module_uuid, Cvoid, (Any, NTuple{2, UInt64}), __toplevel__, uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code"> include_relative(__toplevel__, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code"> if uuid !== old_uuid +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_set_module_uuid, Cvoid, (Any, NTuple{2, UInt64}), __toplevel__, old_uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code"> toplevel_load[] = last +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> loading = pop!(package_locks, pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(loading, all=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code"># relative-path load +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> include_string(m::Module, code::AbstractString, filename::AbstractString="string") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code">Like `include`, except reads code from the given string rather than from a file. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code">include_string(m::Module, txt::String, fname::String) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_load_file_string, Any, (Ptr{UInt8}, Csize_t, Cstring, Any), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code"> txt, sizeof(txt), fname, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code">include_string(m::Module, txt::AbstractString, fname::AbstractString="string") = +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> include_string(m, String(txt), String(fname)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code">function source_path(default::Union{AbstractString,Nothing}="") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code"> t = current_task() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code"> s = t.storage +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code"> if s !== nothing && haskey(s, :SOURCE_PATH) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code"> return s[:SOURCE_PATH] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code"> if t === t.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code"> return default +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code"> t = t.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1027"></a>1027</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code">function source_dir() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code"> p = source_path(nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code"> p === nothing ? pwd() : dirname(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code">include_relative(mod::Module, path::AbstractString) = include_relative(mod, String(path)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-loading-jl-include_relative-1035"></a> + 40 (95.24%) samples spent in include_relative<br /> + 0 (ex.), + 40 (100.00%) (incl.) + when called from + include + <a href="sysimg-jl-58aafbf6293fe483e566-line.html#Lsysimg-jl-58aafbf6293fe483e566-line.html-29">line 29</a><br /> + </div> + <span class="code">function include_relative(mod::Module, _path::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code"> path, prev = _include_dependency(mod, _path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code"> for callback in include_callbacks # to preserve order, must come before Core.include +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code"> invokelatest(callback, mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code"> tls = task_local_storage() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code"> tls[:SOURCE_PATH] = path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code"> local result +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1044"></a>1044</td> + <td></td> + <td>40 (95.24%)</td> + <td> + <div class="callees"> + 40 (100.00%) + samples spent calling + <a href="boot-jl-1c95b3ccecba8d7f1acb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-boot-jl-include-317">include</a><br /> + </div> + <span class="code"> result = Core.include(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1045"></a>1045</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1046"></a>1046</td> + <td></td> + <td></td> + <td> + <span class="code"> if prev === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1047"></a>1047</td> + <td></td> + <td></td> + <td> + <span class="code"> delete!(tls, :SOURCE_PATH) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1048"></a>1048</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1049"></a>1049</td> + <td></td> + <td></td> + <td> + <span class="code"> tls[:SOURCE_PATH] = prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1050"></a>1050</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1051"></a>1051</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1052"></a>1052</td> + <td></td> + <td></td> + <td> + <span class="code"> return result +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1053"></a>1053</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1054"></a>1054</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1055"></a>1055</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1056"></a>1056</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.include([m::Module,] path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1057"></a>1057</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1058"></a>1058</td> + <td></td> + <td></td> + <td> + <span class="code">Evaluate the contents of the input source file in the global scope of module `m`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1059"></a>1059</td> + <td></td> + <td></td> + <td> + <span class="code">Every module (except those defined with `baremodule`) has its own 1-argument +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1060"></a>1060</td> + <td></td> + <td></td> + <td> + <span class="code">definition of `include`, which evaluates the file in that module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1061"></a>1061</td> + <td></td> + <td></td> + <td> + <span class="code">Returns the result of the last evaluated expression of the input file. During including, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1062"></a>1062</td> + <td></td> + <td></td> + <td> + <span class="code">a task-local include path is set to the directory containing the file. Nested calls to +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1063"></a>1063</td> + <td></td> + <td></td> + <td> + <span class="code">`include` will search relative to that path. This function is typically used to load source +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1064"></a>1064</td> + <td></td> + <td></td> + <td> + <span class="code">interactively, or to combine files in packages that are broken into multiple source files. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1065"></a>1065</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1066"></a>1066</td> + <td></td> + <td></td> + <td> + <span class="code">Base.include # defined in sysimg.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1067"></a>1067</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1068"></a>1068</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1069"></a>1069</td> + <td></td> + <td></td> + <td> + <span class="code"> evalfile(path::AbstractString, args::Vector{String}=String[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1070"></a>1070</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1071"></a>1071</td> + <td></td> + <td></td> + <td> + <span class="code">Load the file using [`Base.include`](@ref), evaluate all expressions, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1072"></a>1072</td> + <td></td> + <td></td> + <td> + <span class="code">and return the value of the last one. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1073"></a>1073</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1074"></a>1074</td> + <td></td> + <td></td> + <td> + <span class="code">function evalfile(path::AbstractString, args::Vector{String}=String[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1075"></a>1075</td> + <td></td> + <td></td> + <td> + <span class="code"> return Core.eval(Module(:__anon__), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1076"></a>1076</td> + <td></td> + <td></td> + <td> + <span class="code"> Expr(:toplevel, +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1077"></a>1077</td> + <td></td> + <td></td> + <td> + <span class="code"> :(const ARGS = $args), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1078"></a>1078</td> + <td></td> + <td></td> + <td> + <span class="code"> :(eval(x) = $(Expr(:core, :eval))(__anon__, x)), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1079"></a>1079</td> + <td></td> + <td></td> + <td> + <span class="code"> :(include(x) = $(Expr(:top, :include))(__anon__, x)), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1080"></a>1080</td> + <td></td> + <td></td> + <td> + <span class="code"> :(include($path)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1081"></a>1081</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1082"></a>1082</td> + <td></td> + <td></td> + <td> + <span class="code">evalfile(path::AbstractString, args::Vector) = evalfile(path, String[args...]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1083"></a>1083</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1084"></a>1084</td> + <td></td> + <td></td> + <td> + <span class="code">function load_path_setup_code(load_path::Bool=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1085"></a>1085</td> + <td></td> + <td></td> + <td> + <span class="code"> code = """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1086"></a>1086</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(empty!(Base.DEPOT_PATH), $(repr(map(abspath, DEPOT_PATH)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1087"></a>1087</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(empty!(Base.DL_LOAD_PATH), $(repr(map(abspath, DL_LOAD_PATH)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1088"></a>1088</td> + <td></td> + <td></td> + <td> + <span class="code"> """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1089"></a>1089</td> + <td></td> + <td></td> + <td> + <span class="code"> if load_path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1090"></a>1090</td> + <td></td> + <td></td> + <td> + <span class="code"> load_path = map(abspath, Base.load_path()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1091"></a>1091</td> + <td></td> + <td></td> + <td> + <span class="code"> path_sep = Sys.iswindows() ? ';' : ':' +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1092"></a>1092</td> + <td></td> + <td></td> + <td> + <span class="code"> any(path -> path_sep in path, load_path) && +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1093"></a>1093</td> + <td></td> + <td></td> + <td> + <span class="code"> error("LOAD_PATH entries cannot contain $(repr(path_sep))") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1094"></a>1094</td> + <td></td> + <td></td> + <td> + <span class="code"> code *= """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1095"></a>1095</td> + <td></td> + <td></td> + <td> + <span class="code"> append!(empty!(Base.LOAD_PATH), $(repr(load_path))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1096"></a>1096</td> + <td></td> + <td></td> + <td> + <span class="code"> ENV["JULIA_LOAD_PATH"] = $(repr(join(load_path, Sys.iswindows() ? ';' : ':'))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1097"></a>1097</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.HOME_PROJECT[] = Base.ACTIVE_PROJECT[] = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1098"></a>1098</td> + <td></td> + <td></td> + <td> + <span class="code"> """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1099"></a>1099</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1100"></a>1100</td> + <td></td> + <td></td> + <td> + <span class="code"> return code +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1101"></a>1101</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1102"></a>1102</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1103"></a>1103</td> + <td></td> + <td></td> + <td> + <span class="code">function create_expr_cache(input::String, output::String, concrete_deps::typeof(_concrete_dependencies), uuid::Union{Nothing,UUID}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1104"></a>1104</td> + <td></td> + <td></td> + <td> + <span class="code"> rm(output, force=true) # Remove file if it exists +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1105"></a>1105</td> + <td></td> + <td></td> + <td> + <span class="code"> code_object = """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1106"></a>1106</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(stdin) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1107"></a>1107</td> + <td></td> + <td></td> + <td> + <span class="code"> code = readuntil(stdin, '\\0') +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1108"></a>1108</td> + <td></td> + <td></td> + <td> + <span class="code"> eval(Meta.parse(code)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1109"></a>1109</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1110"></a>1110</td> + <td></td> + <td></td> + <td> + <span class="code"> """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1111"></a>1111</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(pipeline(detach(`$(julia_cmd()) -O0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1112"></a>1112</td> + <td></td> + <td></td> + <td> + <span class="code"> --output-ji $output --output-incremental=yes +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1113"></a>1113</td> + <td></td> + <td></td> + <td> + <span class="code"> --startup-file=no --history-file=no --warn-overwrite=yes +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1114"></a>1114</td> + <td></td> + <td></td> + <td> + <span class="code"> --color=$(have_color ? "yes" : "no") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1115"></a>1115</td> + <td></td> + <td></td> + <td> + <span class="code"> --eval $code_object`), stderr=stderr), +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1116"></a>1116</td> + <td></td> + <td></td> + <td> + <span class="code"> "w", stdout) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1117"></a>1117</td> + <td></td> + <td></td> + <td> + <span class="code"> in = io.in +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1118"></a>1118</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1119"></a>1119</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1120"></a>1120</td> + <td></td> + <td></td> + <td> + <span class="code"> begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1121"></a>1121</td> + <td></td> + <td></td> + <td> + <span class="code"> $(Base.load_path_setup_code()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1122"></a>1122</td> + <td></td> + <td></td> + <td> + <span class="code"> Base._track_dependencies[] = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1123"></a>1123</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.empty!(Base._concrete_dependencies) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1124"></a>1124</td> + <td></td> + <td></td> + <td> + <span class="code"> """) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1125"></a>1125</td> + <td></td> + <td></td> + <td> + <span class="code"> for (pkg, build_id) in concrete_deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1126"></a>1126</td> + <td></td> + <td></td> + <td> + <span class="code"> pkg_str = if pkg.uuid === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1127"></a>1127</td> + <td></td> + <td></td> + <td> + <span class="code"> "Base.PkgId($(repr(pkg.name)))" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1128"></a>1128</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1129"></a>1129</td> + <td></td> + <td></td> + <td> + <span class="code"> "Base.PkgId(Base.UUID(\"$(pkg.uuid)\"), $(repr(pkg.name)))" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1130"></a>1130</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1131"></a>1131</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, "Base.push!(Base._concrete_dependencies, $pkg_str => $(repr(build_id)))\n") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1132"></a>1132</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1133"></a>1133</td> + <td></td> + <td></td> + <td> + <span class="code"> write(io, "end\0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1134"></a>1134</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid_tuple = uuid === nothing ? (0, 0) : convert(NTuple{2, UInt64}, uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1135"></a>1135</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, "ccall(:jl_set_module_uuid, Cvoid, (Any, NTuple{2, UInt64}), Base.__toplevel__, $uuid_tuple)\0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1136"></a>1136</td> + <td></td> + <td></td> + <td> + <span class="code"> source = source_path(nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1137"></a>1137</td> + <td></td> + <td></td> + <td> + <span class="code"> if source !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1138"></a>1138</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, "task_local_storage()[:SOURCE_PATH] = $(repr(source))\0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1139"></a>1139</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1140"></a>1140</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, """ +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1141"></a>1141</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1142"></a>1142</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.include(Base.__toplevel__, $(repr(abspath(input)))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1143"></a>1143</td> + <td></td> + <td></td> + <td> + <span class="code"> catch ex +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1144"></a>1144</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.precompilableerror(ex) || Base.rethrow(ex) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1145"></a>1145</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.@debug "Aborting `createexprcache'" exception=(Base.ErrorException("Declaration of __precompile__(false) not allowed"), Base.catch_backtrace()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1146"></a>1146</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.exit(125) # we define status = 125 means PrecompileableError +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1147"></a>1147</td> + <td></td> + <td></td> + <td> + <span class="code"> end\0""") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1148"></a>1148</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: cleanup is probably unnecessary here +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1149"></a>1149</td> + <td></td> + <td></td> + <td> + <span class="code"> if source !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1150"></a>1150</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, "delete!(task_local_storage(), :SOURCE_PATH)\0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1151"></a>1151</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1152"></a>1152</td> + <td></td> + <td></td> + <td> + <span class="code"> write(in, "ccall(:jl_set_module_uuid, Cvoid, (Any, NTuple{2, UInt64}), Base.__toplevel__, (0, 0))\0") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1153"></a>1153</td> + <td></td> + <td></td> + <td> + <span class="code"> close(in) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1154"></a>1154</td> + <td></td> + <td></td> + <td> + <span class="code"> catch ex +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1155"></a>1155</td> + <td></td> + <td></td> + <td> + <span class="code"> close(in) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1156"></a>1156</td> + <td></td> + <td></td> + <td> + <span class="code"> process_running(io) && Timer(t -> kill(io), 5.0) # wait a short time before killing the process to give it a chance to clean up on its own first +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1157"></a>1157</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow(ex) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1158"></a>1158</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1159"></a>1159</td> + <td></td> + <td></td> + <td> + <span class="code"> return io +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1160"></a>1160</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1161"></a>1161</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1162"></a>1162</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1163"></a>1163</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.compilecache(module::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1164"></a>1164</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1165"></a>1165</td> + <td></td> + <td></td> + <td> + <span class="code">Creates a precompiled cache file for a module and all of its dependencies. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1166"></a>1166</td> + <td></td> + <td></td> + <td> + <span class="code">This can be used to reduce package load times. Cache files are stored in +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1167"></a>1167</td> + <td></td> + <td></td> + <td> + <span class="code">`DEPOT_PATH[1]/compiled`. See [Module initialization and precompilation](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1168"></a>1168</td> + <td></td> + <td></td> + <td> + <span class="code">for important notes. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1169"></a>1169</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1170"></a>1170</td> + <td></td> + <td></td> + <td> + <span class="code">function compilecache(pkg::PkgId) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1171"></a>1171</td> + <td></td> + <td></td> + <td> + <span class="code"> path = locate_package(pkg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1172"></a>1172</td> + <td></td> + <td></td> + <td> + <span class="code"> path === nothing && throw(ArgumentError("$pkg not found during precompilation")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1173"></a>1173</td> + <td></td> + <td></td> + <td> + <span class="code"> return compilecache(pkg, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1174"></a>1174</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1175"></a>1175</td> + <td></td> + <td></td> + <td> + <span class="code">function compilecache(pkg::PkgId, path::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1176"></a>1176</td> + <td></td> + <td></td> + <td> + <span class="code"> # decide where to put the resulting cache file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1177"></a>1177</td> + <td></td> + <td></td> + <td> + <span class="code"> cachefile = abspath(DEPOT_PATH[1], cache_file_entry(pkg)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1178"></a>1178</td> + <td></td> + <td></td> + <td> + <span class="code"> cachepath = dirname(cachefile) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1179"></a>1179</td> + <td></td> + <td></td> + <td> + <span class="code"> isdir(cachepath) || mkpath(cachepath) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1180"></a>1180</td> + <td></td> + <td></td> + <td> + <span class="code"> # build up the list of modules that we want the precompile process to preserve +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1181"></a>1181</td> + <td></td> + <td></td> + <td> + <span class="code"> concrete_deps = copy(_concrete_dependencies) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1182"></a>1182</td> + <td></td> + <td></td> + <td> + <span class="code"> for (key, mod) in loaded_modules +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1183"></a>1183</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(mod === Main || mod === Core || mod === Base) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1184"></a>1184</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(concrete_deps, key => module_build_id(mod)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1185"></a>1185</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1186"></a>1186</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1187"></a>1187</td> + <td></td> + <td></td> + <td> + <span class="code"> # run the expression and cache the result +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1188"></a>1188</td> + <td></td> + <td></td> + <td> + <span class="code"> verbosity = isinteractive() ? CoreLogging.Info : CoreLogging.Debug +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1189"></a>1189</td> + <td></td> + <td></td> + <td> + <span class="code"> if isfile(cachefile) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1190"></a>1190</td> + <td></td> + <td></td> + <td> + <span class="code"> @logmsg verbosity "Recompiling stale cache file $cachefile for $pkg" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1191"></a>1191</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1192"></a>1192</td> + <td></td> + <td></td> + <td> + <span class="code"> @logmsg verbosity "Precompiling $pkg" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1193"></a>1193</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1194"></a>1194</td> + <td></td> + <td></td> + <td> + <span class="code"> p = create_expr_cache(path, cachefile, concrete_deps, pkg.uuid) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1195"></a>1195</td> + <td></td> + <td></td> + <td> + <span class="code"> if success(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1196"></a>1196</td> + <td></td> + <td></td> + <td> + <span class="code"> # append checksum to the end of the .ji file: +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1197"></a>1197</td> + <td></td> + <td></td> + <td> + <span class="code"> open(cachefile, "a+") do f +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1198"></a>1198</td> + <td></td> + <td></td> + <td> + <span class="code"> write(f, _crc32c(seekstart(f))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1199"></a>1199</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1200"></a>1200</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif p.exitcode == 125 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1201"></a>1201</td> + <td></td> + <td></td> + <td> + <span class="code"> return PrecompilableError() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1202"></a>1202</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1203"></a>1203</td> + <td></td> + <td></td> + <td> + <span class="code"> error("Failed to precompile $pkg to $cachefile.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1204"></a>1204</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1205"></a>1205</td> + <td></td> + <td></td> + <td> + <span class="code"> return cachefile +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1206"></a>1206</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1207"></a>1207</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1208"></a>1208</td> + <td></td> + <td></td> + <td> + <span class="code">module_build_id(m::Module) = ccall(:jl_module_build_id, UInt64, (Any,), m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1209"></a>1209</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1210"></a>1210</td> + <td></td> + <td></td> + <td> + <span class="code">isvalid_cache_header(f::IOStream) = (0 != ccall(:jl_read_verify_header, Cint, (Ptr{Cvoid},), f.ios)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1211"></a>1211</td> + <td></td> + <td></td> + <td> + <span class="code">isvalid_file_crc(f::IOStream) = (_crc32c(seekstart(f), filesize(f) - 4) == read(f, UInt32)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1212"></a>1212</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1213"></a>1213</td> + <td></td> + <td></td> + <td> + <span class="code">function parse_cache_header(f::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1214"></a>1214</td> + <td></td> + <td></td> + <td> + <span class="code"> modules = Vector{Pair{PkgId, UInt64}}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1215"></a>1215</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1216"></a>1216</td> + <td></td> + <td></td> + <td> + <span class="code"> n = read(f, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1217"></a>1217</td> + <td></td> + <td></td> + <td> + <span class="code"> n == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1218"></a>1218</td> + <td></td> + <td></td> + <td> + <span class="code"> sym = String(read(f, n)) # module name +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1219"></a>1219</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID((read(f, UInt64), read(f, UInt64))) # pkg UUID +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1220"></a>1220</td> + <td></td> + <td></td> + <td> + <span class="code"> build_id = read(f, UInt64) # build UUID (mostly just a timestamp) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1221"></a>1221</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(modules, PkgId(uuid, sym) => build_id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1222"></a>1222</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1223"></a>1223</td> + <td></td> + <td></td> + <td> + <span class="code"> totbytes = read(f, Int64) # total bytes for file dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1224"></a>1224</td> + <td></td> + <td></td> + <td> + <span class="code"> # read the list of requirements +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1225"></a>1225</td> + <td></td> + <td></td> + <td> + <span class="code"> # and split the list into include and requires statements +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1226"></a>1226</td> + <td></td> + <td></td> + <td> + <span class="code"> includes = Tuple{PkgId, String, Float64}[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1227"></a>1227</td> + <td></td> + <td></td> + <td> + <span class="code"> requires = Pair{PkgId, PkgId}[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1228"></a>1228</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1229"></a>1229</td> + <td></td> + <td></td> + <td> + <span class="code"> n2 = read(f, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1230"></a>1230</td> + <td></td> + <td></td> + <td> + <span class="code"> n2 == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1231"></a>1231</td> + <td></td> + <td></td> + <td> + <span class="code"> depname = String(read(f, n2)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1232"></a>1232</td> + <td></td> + <td></td> + <td> + <span class="code"> mtime = read(f, Float64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1233"></a>1233</td> + <td></td> + <td></td> + <td> + <span class="code"> n1 = read(f, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1234"></a>1234</td> + <td></td> + <td></td> + <td> + <span class="code"> # map ids to keys +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1235"></a>1235</td> + <td></td> + <td></td> + <td> + <span class="code"> modkey = (n1 == 0) ? PkgId("") : modules[n1].first +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1236"></a>1236</td> + <td></td> + <td></td> + <td> + <span class="code"> if n1 != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1237"></a>1237</td> + <td></td> + <td></td> + <td> + <span class="code"> # consume (and ignore) the module path too +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1238"></a>1238</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1239"></a>1239</td> + <td></td> + <td></td> + <td> + <span class="code"> n1 = read(f, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1240"></a>1240</td> + <td></td> + <td></td> + <td> + <span class="code"> totbytes -= 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1241"></a>1241</td> + <td></td> + <td></td> + <td> + <span class="code"> n1 == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1242"></a>1242</td> + <td></td> + <td></td> + <td> + <span class="code"> skip(f, n1) # String(read(f, n1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1243"></a>1243</td> + <td></td> + <td></td> + <td> + <span class="code"> totbytes -= n1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1244"></a>1244</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1245"></a>1245</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1246"></a>1246</td> + <td></td> + <td></td> + <td> + <span class="code"> if depname[1] == '\0' +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1247"></a>1247</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(requires, modkey => binunpack(depname)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1248"></a>1248</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1249"></a>1249</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(includes, (modkey, depname, mtime)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1250"></a>1250</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1251"></a>1251</td> + <td></td> + <td></td> + <td> + <span class="code"> totbytes -= 4 + 4 + n2 + 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1252"></a>1252</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1253"></a>1253</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert totbytes == 12 "header of cache file appears to be corrupt" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1254"></a>1254</td> + <td></td> + <td></td> + <td> + <span class="code"> srctextpos = read(f, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1255"></a>1255</td> + <td></td> + <td></td> + <td> + <span class="code"> # read the list of modules that are required to be present during loading +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1256"></a>1256</td> + <td></td> + <td></td> + <td> + <span class="code"> required_modules = Vector{Pair{PkgId, UInt64}}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1257"></a>1257</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1258"></a>1258</td> + <td></td> + <td></td> + <td> + <span class="code"> n = read(f, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1259"></a>1259</td> + <td></td> + <td></td> + <td> + <span class="code"> n == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1260"></a>1260</td> + <td></td> + <td></td> + <td> + <span class="code"> sym = String(read(f, n)) # module name +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1261"></a>1261</td> + <td></td> + <td></td> + <td> + <span class="code"> uuid = UUID((read(f, UInt64), read(f, UInt64))) # pkg UUID +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1262"></a>1262</td> + <td></td> + <td></td> + <td> + <span class="code"> build_id = read(f, UInt64) # build id +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1263"></a>1263</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(required_modules, PkgId(uuid, sym) => build_id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1264"></a>1264</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1265"></a>1265</td> + <td></td> + <td></td> + <td> + <span class="code"> return modules, (includes, requires), required_modules, srctextpos +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1266"></a>1266</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1267"></a>1267</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1268"></a>1268</td> + <td></td> + <td></td> + <td> + <span class="code">function parse_cache_header(cachefile::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1269"></a>1269</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(cachefile, "r") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1270"></a>1270</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1271"></a>1271</td> + <td></td> + <td></td> + <td> + <span class="code"> !isvalid_cache_header(io) && throw(ArgumentError("Invalid header in cache file $cachefile.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1272"></a>1272</td> + <td></td> + <td></td> + <td> + <span class="code"> return parse_cache_header(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1273"></a>1273</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1274"></a>1274</td> + <td></td> + <td></td> + <td> + <span class="code"> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1275"></a>1275</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1276"></a>1276</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1277"></a>1277</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1278"></a>1278</td> + <td></td> + <td></td> + <td> + <span class="code">function cache_dependencies(f::IO) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1279"></a>1279</td> + <td></td> + <td></td> + <td> + <span class="code"> defs, (includes, requires), modules = parse_cache_header(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1280"></a>1280</td> + <td></td> + <td></td> + <td> + <span class="code"> return modules, map(mod_fl_mt -> (mod_fl_mt[2], mod_fl_mt[3]), includes) # discard the module +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1281"></a>1281</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1282"></a>1282</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1283"></a>1283</td> + <td></td> + <td></td> + <td> + <span class="code">function cache_dependencies(cachefile::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1284"></a>1284</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(cachefile, "r") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1285"></a>1285</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1286"></a>1286</td> + <td></td> + <td></td> + <td> + <span class="code"> !isvalid_cache_header(io) && throw(ArgumentError("Invalid header in cache file $cachefile.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1287"></a>1287</td> + <td></td> + <td></td> + <td> + <span class="code"> return cache_dependencies(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1288"></a>1288</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1289"></a>1289</td> + <td></td> + <td></td> + <td> + <span class="code"> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1290"></a>1290</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1291"></a>1291</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1292"></a>1292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1293"></a>1293</td> + <td></td> + <td></td> + <td> + <span class="code">function read_dependency_src(io::IO, filename::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1294"></a>1294</td> + <td></td> + <td></td> + <td> + <span class="code"> modules, (includes, requires), required_modules, srctextpos = parse_cache_header(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1295"></a>1295</td> + <td></td> + <td></td> + <td> + <span class="code"> srctextpos == 0 && error("no source-text stored in cache file") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1296"></a>1296</td> + <td></td> + <td></td> + <td> + <span class="code"> seek(io, srctextpos) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1297"></a>1297</td> + <td></td> + <td></td> + <td> + <span class="code"> return _read_dependency_src(io, filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1298"></a>1298</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1299"></a>1299</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1300"></a>1300</td> + <td></td> + <td></td> + <td> + <span class="code">function _read_dependency_src(io::IO, filename::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1301"></a>1301</td> + <td></td> + <td></td> + <td> + <span class="code"> while !eof(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1302"></a>1302</td> + <td></td> + <td></td> + <td> + <span class="code"> filenamelen = read(io, Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1303"></a>1303</td> + <td></td> + <td></td> + <td> + <span class="code"> filenamelen == 0 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1304"></a>1304</td> + <td></td> + <td></td> + <td> + <span class="code"> fn = String(read(io, filenamelen)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1305"></a>1305</td> + <td></td> + <td></td> + <td> + <span class="code"> len = read(io, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1306"></a>1306</td> + <td></td> + <td></td> + <td> + <span class="code"> if fn == filename +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1307"></a>1307</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(read(io, len)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1308"></a>1308</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1309"></a>1309</td> + <td></td> + <td></td> + <td> + <span class="code"> seek(io, position(io) + len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1310"></a>1310</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1311"></a>1311</td> + <td></td> + <td></td> + <td> + <span class="code"> error(filename, " is not stored in the source-text cache") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1312"></a>1312</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1313"></a>1313</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1314"></a>1314</td> + <td></td> + <td></td> + <td> + <span class="code">function read_dependency_src(cachefile::String, filename::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1315"></a>1315</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(cachefile, "r") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1316"></a>1316</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1317"></a>1317</td> + <td></td> + <td></td> + <td> + <span class="code"> !isvalid_cache_header(io) && throw(ArgumentError("Invalid header in cache file $cachefile.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1318"></a>1318</td> + <td></td> + <td></td> + <td> + <span class="code"> return read_dependency_src(io, filename) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1319"></a>1319</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1320"></a>1320</td> + <td></td> + <td></td> + <td> + <span class="code"> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1321"></a>1321</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1322"></a>1322</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1323"></a>1323</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1324"></a>1324</td> + <td></td> + <td></td> + <td> + <span class="code"># returns true if it "cachefile.ji" is stale relative to "modpath.jl" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1325"></a>1325</td> + <td></td> + <td></td> + <td> + <span class="code"># otherwise returns the list of dependencies to also check +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1326"></a>1326</td> + <td></td> + <td></td> + <td> + <span class="code">function stale_cachefile(modpath::String, cachefile::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1327"></a>1327</td> + <td></td> + <td></td> + <td> + <span class="code"> io = open(cachefile, "r") +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1328"></a>1328</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1329"></a>1329</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isvalid_cache_header(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1330"></a>1330</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile due to it containing an invalid cache header" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1331"></a>1331</td> + <td></td> + <td></td> + <td> + <span class="code"> return true # invalid cache file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1332"></a>1332</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1333"></a>1333</td> + <td></td> + <td></td> + <td> + <span class="code"> (modules, (includes, requires), required_modules) = parse_cache_header(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1334"></a>1334</td> + <td></td> + <td></td> + <td> + <span class="code"> modules = Dict{PkgId, UInt64}(modules) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1335"></a>1335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1336"></a>1336</td> + <td></td> + <td></td> + <td> + <span class="code"> # Check if transitive dependencies can be fulfilled +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1337"></a>1337</td> + <td></td> + <td></td> + <td> + <span class="code"> ndeps = length(required_modules) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1338"></a>1338</td> + <td></td> + <td></td> + <td> + <span class="code"> depmods = Vector{Any}(undef, ndeps) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1339"></a>1339</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:ndeps +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1340"></a>1340</td> + <td></td> + <td></td> + <td> + <span class="code"> req_key, req_build_id = required_modules[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1341"></a>1341</td> + <td></td> + <td></td> + <td> + <span class="code"> # Module is already loaded +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1342"></a>1342</td> + <td></td> + <td></td> + <td> + <span class="code"> if root_module_exists(req_key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1343"></a>1343</td> + <td></td> + <td></td> + <td> + <span class="code"> M = root_module(req_key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1344"></a>1344</td> + <td></td> + <td></td> + <td> + <span class="code"> if PkgId(M) == req_key && module_build_id(M) === req_build_id +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1345"></a>1345</td> + <td></td> + <td></td> + <td> + <span class="code"> depmods[i] = M +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1346"></a>1346</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1347"></a>1347</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because module $req_key is already loaded and incompatible." +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1348"></a>1348</td> + <td></td> + <td></td> + <td> + <span class="code"> return true # Won't be able to fulfill dependency +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1349"></a>1349</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1350"></a>1350</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1351"></a>1351</td> + <td></td> + <td></td> + <td> + <span class="code"> path = locate_package(req_key) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1352"></a>1352</td> + <td></td> + <td></td> + <td> + <span class="code"> if path === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1353"></a>1353</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because dependency $req_key not found." +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1354"></a>1354</td> + <td></td> + <td></td> + <td> + <span class="code"> return true # Won't be able to fulfill dependency +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1355"></a>1355</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1356"></a>1356</td> + <td></td> + <td></td> + <td> + <span class="code"> depmods[i] = (path, req_key, req_build_id) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1357"></a>1357</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1358"></a>1358</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1359"></a>1359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1360"></a>1360</td> + <td></td> + <td></td> + <td> + <span class="code"> # check if this file is going to provide one of our concrete dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1361"></a>1361</td> + <td></td> + <td></td> + <td> + <span class="code"> # or if it provides a version that conflicts with our concrete dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1362"></a>1362</td> + <td></td> + <td></td> + <td> + <span class="code"> # or neither +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1363"></a>1363</td> + <td></td> + <td></td> + <td> + <span class="code"> skip_timecheck = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1364"></a>1364</td> + <td></td> + <td></td> + <td> + <span class="code"> for (req_key, req_build_id) in _concrete_dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1365"></a>1365</td> + <td></td> + <td></td> + <td> + <span class="code"> build_id = get(modules, req_key, UInt64(0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1366"></a>1366</td> + <td></td> + <td></td> + <td> + <span class="code"> if build_id !== UInt64(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1367"></a>1367</td> + <td></td> + <td></td> + <td> + <span class="code"> if build_id === req_build_id +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1368"></a>1368</td> + <td></td> + <td></td> + <td> + <span class="code"> skip_timecheck = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1369"></a>1369</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1370"></a>1370</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1371"></a>1371</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because it provides the wrong uuid (got $build_id) for $mod (want $req_build_id)" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1372"></a>1372</td> + <td></td> + <td></td> + <td> + <span class="code"> return true # cachefile doesn't provide the required version of the dependency +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1373"></a>1373</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1374"></a>1374</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1375"></a>1375</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1376"></a>1376</td> + <td></td> + <td></td> + <td> + <span class="code"> # now check if this file is fresh relative to its source files +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1377"></a>1377</td> + <td></td> + <td></td> + <td> + <span class="code"> if !skip_timecheck +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1378"></a>1378</td> + <td></td> + <td></td> + <td> + <span class="code"> if !samefile(includes[1][2], modpath) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1379"></a>1379</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because it is for file $(includes[1][2])) not file $modpath" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1380"></a>1380</td> + <td></td> + <td></td> + <td> + <span class="code"> return true # cache file was compiled from a different path +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1381"></a>1381</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1382"></a>1382</td> + <td></td> + <td></td> + <td> + <span class="code"> for (modkey, req_modkey) in requires +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1383"></a>1383</td> + <td></td> + <td></td> + <td> + <span class="code"> # verify that `require(modkey, name(req_modkey))` ==> `req_modkey` +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1384"></a>1384</td> + <td></td> + <td></td> + <td> + <span class="code"> if identify_package(modkey, req_modkey.name) != req_modkey +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1385"></a>1385</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because uuid mapping for $modkey => $req_modkey has changed" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1386"></a>1386</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1387"></a>1387</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1388"></a>1388</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1389"></a>1389</td> + <td></td> + <td></td> + <td> + <span class="code"> for (_, f, ftime_req) in includes +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1390"></a>1390</td> + <td></td> + <td></td> + <td> + <span class="code"> # Issue #13606: compensate for Docker images rounding mtimes +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1391"></a>1391</td> + <td></td> + <td></td> + <td> + <span class="code"> # Issue #20837: compensate for GlusterFS truncating mtimes to microseconds +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1392"></a>1392</td> + <td></td> + <td></td> + <td> + <span class="code"> ftime = mtime(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1393"></a>1393</td> + <td></td> + <td></td> + <td> + <span class="code"> if ftime != ftime_req && ftime != floor(ftime_req) && ftime != trunc(ftime_req, digits=6) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1394"></a>1394</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting stale cache file $cachefile (mtime $ftime_req) because file $f (mtime $ftime) has changed" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1395"></a>1395</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1396"></a>1396</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1397"></a>1397</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1398"></a>1398</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1399"></a>1399</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1400"></a>1400</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isvalid_file_crc(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1401"></a>1401</td> + <td></td> + <td></td> + <td> + <span class="code"> @debug "Rejecting cache file $cachefile because it has an invalid checksum" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1402"></a>1402</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1403"></a>1403</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1404"></a>1404</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1405"></a>1405</td> + <td></td> + <td></td> + <td> + <span class="code"> return depmods # fresh cachefile +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1406"></a>1406</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1407"></a>1407</td> + <td></td> + <td></td> + <td> + <span class="code"> close(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1408"></a>1408</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1409"></a>1409</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1410"></a>1410</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1411"></a>1411</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1412"></a>1412</td> + <td></td> + <td></td> + <td> + <span class="code"> @__FILE__ -> AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1413"></a>1413</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1414"></a>1414</td> + <td></td> + <td></td> + <td> + <span class="code">Expand to a string with the path to the file containing the +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1415"></a>1415</td> + <td></td> + <td></td> + <td> + <span class="code">macrocall, or an empty string if evaluated by `julia -e <expr>`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1416"></a>1416</td> + <td></td> + <td></td> + <td> + <span class="code">Return `nothing` if the macro was missing parser source information. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1417"></a>1417</td> + <td></td> + <td></td> + <td> + <span class="code">Alternatively see [`PROGRAM_FILE`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1418"></a>1418</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1419"></a>1419</td> + <td></td> + <td></td> + <td> + <span class="code">macro __FILE__() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1420"></a>1420</td> + <td></td> + <td></td> + <td> + <span class="code"> __source__.file === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1421"></a>1421</td> + <td></td> + <td></td> + <td> + <span class="code"> return String(__source__.file) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1422"></a>1422</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1423"></a>1423</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1424"></a>1424</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1425"></a>1425</td> + <td></td> + <td></td> + <td> + <span class="code"> @__DIR__ -> AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1426"></a>1426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1427"></a>1427</td> + <td></td> + <td></td> + <td> + <span class="code">Expand to a string with the absolute path to the directory of the file +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1428"></a>1428</td> + <td></td> + <td></td> + <td> + <span class="code">containing the macrocall. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1429"></a>1429</td> + <td></td> + <td></td> + <td> + <span class="code">Return the current working directory if run from a REPL or if evaluated by `julia -e <expr>`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1430"></a>1430</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1431"></a>1431</td> + <td></td> + <td></td> + <td> + <span class="code">macro __DIR__() +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1432"></a>1432</td> + <td></td> + <td></td> + <td> + <span class="code"> __source__.file === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1433"></a>1433</td> + <td></td> + <td></td> + <td> + <span class="code"> return abspath(dirname(String(__source__.file))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lloading-jl-267f08df202e5203e249-line.html-1434"></a>1434</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/operators-jl-714ade2c8745dd55a410-line.html b/profiling/statprof/operators-jl-714ade2c8745dd55a410-line.html new file mode 100644 index 0000000000000000000000000000000000000000..a2bbf4162d55e82d4539fe4f245798c4b7e845ab --- /dev/null +++ b/profiling/statprof/operators-jl-714ade2c8745dd55a410-line.html @@ -0,0 +1,10307 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## types ## +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> <:(T1, T2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">Subtype operator: returns `true` if and only if all values of type `T1` are +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">also of type `T2`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Float64 <: AbstractFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Vector{Int} <: AbstractArray +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Matrix{Float64} <: Matrix{AbstractFloat} +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">(<:) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> >:(T1, T2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">Supertype operator, equivalent to `T2 <: T1`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">const (>:)(@nospecialize(a), @nospecialize(b)) = (b <: a) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> supertype(T::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">Return the supertype of DataType `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">julia> supertype(Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">Signed +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code">function supertype(T::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> T.super +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">function supertype(T::UnionAll) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> UnionAll(T.var, supertype(T.body)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">## generic comparison ## +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> ==(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">Generic equality operator. Falls back to [`===`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code">Should be implemented for all types with a notion of equality, based on the abstract value +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">that an instance represents. For example, all numeric types are compared by numeric value, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">ignoring type. Strings are compared as sequences of characters, ignoring encoding. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">For collections, `==` is generally called recursively on all contents, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">though other properties (like the shape for arrays) may also be taken into account. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">This operator follows IEEE semantics for floating-point numbers: `0.0 == -0.0` and +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">`NaN != NaN`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">The result is of type `Bool`, except when one of the operands is [`missing`](@ref), +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code">in which case `missing` is returned +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">([three-valued logic](https://en.wikipedia.org/wiki/Three-valued_logic)). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">For collections, `missing` is returned if at least one of the operands contains +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">a `missing` value and all non-missing values are equal. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">Use [`isequal`](@ref) or [`===`](@ref) to always get a `Bool` result. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">New numeric types should implement this function for two arguments of the new type, and +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">handle comparison to other types via promotion rules where possible. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">[`isequal`](@ref) falls back to `==`, so new methods of `==` will be used by the +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">[`Dict`](@ref) type to compare keys. If your type will be used as a dictionary key, it +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">should therefore also implement [`hash`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">==(x, y) = x === y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> isequal(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code">Similar to [`==`](@ref), except for the treatment of floating point numbers +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">and of missing values. `isequal` treats all floating-point `NaN` values as equal +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">to each other, treats `-0.0` as unequal to `0.0`, and [`missing`](@ref) as equal +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">to `missing`. Always returns a `Bool` value. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code">The default implementation of `isequal` calls `==`, so a type that does not involve +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">floating-point values generally only needs to define `==`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">`isequal` is the comparison function used by hash tables (`Dict`). `isequal(x,y)` must imply +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">that `hash(x) == hash(y)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">This typically means that types for which a custom `==` or `isequal` method exists must +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">implement a corresponding `hash` method (and vice versa). Collections typically implement +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">`isequal` by calling `isequal` recursively on all contents. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">Scalar types generally do not need to implement `isequal` separate from `==`, unless they +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">represent floating-point numbers amenable to a more efficient implementation than that +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">provided as a generic fallback (based on `isnan`, `signbit`, and `==`). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isequal([1., NaN], [1., NaN]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">julia> [1., NaN] == [1., NaN] +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 0.0 == -0.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isequal(0.0, -0.0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">isequal(x, y) = x == y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">signequal(x, y) = signbit(x)::Bool == signbit(y)::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">signless(x, y) = signbit(x)::Bool & !signbit(y)::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code">isequal(x::AbstractFloat, y::AbstractFloat) = (isnan(x) & isnan(y)) | signequal(x, y) & (x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">isequal(x::Real, y::AbstractFloat) = (isnan(x) & isnan(y)) | signequal(x, y) & (x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">isequal(x::AbstractFloat, y::Real ) = (isnan(x) & isnan(y)) | signequal(x, y) & (x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> isless(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">Test whether `x` is less than `y`, according to a canonical total order. Values that are +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">normally unordered, such as `NaN`, are ordered in an arbitrary but consistent fashion. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">[`missing`](@ref) values are ordered last. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">This is the default comparison used by [`sort`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">Non-numeric types with a canonical total order should implement this function. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">Numeric types only need to implement it if they have special values such as `NaN`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">Types with a canonical partial order should implement [`<`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">function isless end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">isless(x::AbstractFloat, y::AbstractFloat) = (!isnan(x) & (isnan(y) | signless(x, y))) | (x < y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code">isless(x::Real, y::AbstractFloat) = (!isnan(x) & (isnan(y) | signless(x, y))) | (x < y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code">isless(x::AbstractFloat, y::Real ) = (!isnan(x) & (isnan(y) | signless(x, y))) | (x < y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code">function ==(T::Type, S::Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> T<:S && S<:T +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">function !=(T::Type, S::Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> !(T == S) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">==(T::TypeVar, S::Type) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">==(T::Type, S::TypeVar) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">## comparison fallbacks ## +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> !=(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> ≠(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">Not-equals comparison operator. Always gives the opposite answer as [`==`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">New types should generally not implement this, and rely on the fallback definition +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">`!=(x,y) = !(x==y)` instead. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 3 != 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">julia> "foo" ≠ "foo" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">!=(x, y) = !(x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">const ≠ = != +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> ===(x,y) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> ≡(x,y) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether `x` and `y` are identical, in the sense that no program could distinguish +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">them. First the types of `x` and `y` are compared. If those are identical, mutable objects +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">are compared by address in memory and immutable objects (such as numbers) are compared by +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code">contents at the bit level. This function is sometimes called "egal". +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">It always returns a `Bool` value. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = [1, 2]; b = [1, 2]; +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a == b +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a === b +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a === a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">=== +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code">const ≡ = === +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> !==(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> ≢(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">Always gives the opposite answer as [`===`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = [1, 2]; b = [1, 2]; +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a ≢ b +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a ≢ a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">!==(@nospecialize(x), @nospecialize(y)) = !(x === y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">const ≢ = !== +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> <(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">Less-than comparison operator. Falls back to [`isless`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code">Because of the behavior of floating-point NaN values, this operator implements +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">a partial order. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code">New numeric types with a canonical partial order should implement this function for +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">two arguments of the new type. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">Types with a canonical total order should implement [`isless`](@ref) instead. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">(x < y) | (x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 'a' < 'b' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">julia> "abc" < "abd" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 5 < 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"><(x, y) = isless(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> >(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">Greater-than comparison operator. Falls back to `y < x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"># Implementation +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code">Generally, new types should implement [`<`](@ref) instead of this function, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">and rely on the fallback definition `>(x, y) = y < x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 'a' > 'b' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 7 > 3 > 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code">julia> "abc" > "abd" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 5 > 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-286"></a>286</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-286"></a> + 1 (2.38%) samples spent in ><br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + unsafe_write + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#Liobuffer-jl-0cfbb4403b3061764f48-line.html-407">line 407</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-49"><</a><br /> + </div> + <span class="code">>(x, y) = y < x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> <=(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> ≤(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code">Less-than-or-equals comparison operator. Falls back to `(x < y) | (x == y)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 'a' <= 'b' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 7 ≤ 7 ≤ 9 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">julia> "abc" ≤ "abc" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 5 <= 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"><=(x, y) = (x < y) | (x == y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">const ≤ = <= +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> >=(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> ≥(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">Greater-than-or-equals comparison operator. Falls back to `y <= x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 'a' >= 'b' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 7 ≥ 7 ≥ 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code">julia> "abc" ≥ "abc" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 5 >= 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">>=(x, y) = (y <= x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">const ≥ = >= +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"># this definition allows Number types to implement < instead of isless, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"># which is more idiomatic: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code">isless(x::Real, y::Real) = x<y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> ifelse(condition::Bool, x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">Return `x` if `condition` is `true`, otherwise return `y`. This differs from `?` or `if` in +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">that it is an ordinary function, so all the arguments are evaluated first. In some cases, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">using `ifelse` instead of an `if` statement can eliminate the branch in generated code and +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code">provide higher performance in tight loops. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">julia> ifelse(1 > 2, 1, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code">ifelse +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> cmp(x,y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code">Return -1, 0, or 1 depending on whether `x` is less than, equal to, or greater than `y`, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">respectively. Uses the total order implemented by `isless`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code">julia> cmp(1, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code">julia> cmp(2, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">julia> cmp(2+im, 3-im) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">ERROR: MethodError: no method matching isless(::Complex{Int64}, ::Complex{Int64}) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code">[...] +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">cmp(x, y) = isless(x, y) ? -1 : ifelse(isless(y, x), 1, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> cmp(<, x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code">Return -1, 0, or 1 depending on whether `x` is less than, equal to, or greater than `y`, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">respectively. The first argument specifies a less-than comparison function to use. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code">cmp(<, x, y) = (x < y) ? -1 : ifelse(y < x, 1, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"># cmp returns -1, 0, +1 indicating ordering +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">cmp(x::Integer, y::Integer) = ifelse(isless(x, y), -1, ifelse(isless(y, x), 1, 0)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> max(x, y, ...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">Return the maximum of the arguments. See also the [`maximum`](@ref) function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code">to take the maximum element from a collection. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">julia> max(2, 5, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code">5 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">max(x, y) = ifelse(isless(y, x), x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> min(x, y, ...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">Return the minimum of the arguments. See also the [`minimum`](@ref) function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">to take the minimum element from a collection. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">julia> min(2, 5, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">min(x,y) = ifelse(isless(y, x), y, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> minmax(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">Return `(min(x,y), max(x,y))`. See also: [`extrema`](@ref) that returns `(minimum(x), maximum(x))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code">julia> minmax('c','b') +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">('b', 'c') +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code">minmax(x,y) = isless(y, x) ? (y, x) : (x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> extrema(itr) -> Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code">Compute both the minimum and maximum element in a single pass, and return them as a 2-tuple. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code">julia> extrema(2:10) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">(2, 10) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">julia> extrema([9,pi,4.5]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">(3.141592653589793, 9.0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">extrema(itr) = _extrema_itr(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code">function _extrema_itr(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && throw(ArgumentError("collection must be non-empty")) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> (v, s) = y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> vmin = vmax = v +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> y = iterate(itr, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> y === nothing && break +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> (x, s) = y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> vmax = max(x, vmax) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> vmin = min(x, vmin) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> return (vmin, vmax) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code">extrema(x::Real) = (x, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code">## definitions providing basic traits of arithmetic operators ## +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> identity(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code">The identity function. Returns its argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">julia> identity("Well, what did you expect?") +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code">"Well, what did you expect?" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code">identity(x) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code">+(x::Number) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code">*(x::Number) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code">(&)(x::Integer) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code">(|)(x::Integer) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code">xor(x::Integer) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code">const ⊻ = xor +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"># foldl for argument lists. expand recursively up to a point, then +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"># switch to a loop. this allows small cases like `a+b+c+d` to be inlined +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"># efficiently, without a major slowdown for `+(x...)` when `x` is big. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">afoldl(op,a) = a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code">afoldl(op,a,b) = op(a,b) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code">afoldl(op,a,b,c...) = afoldl(op, op(a,b), c...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">function afoldl(op,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,qs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> y = op(op(op(op(op(op(op(op(op(op(op(op(op(op(op(a,b),c),d),e),f),g),h),i),j),k),l),m),n),o),p) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in qs; y = op(y,x); end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code">for op in (:+, :*, :&, :|, :xor, :min, :max, :kron) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval begin +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> # note: these definitions must not cause a dispatch loop when +(a,b) is +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> # not defined, and must only try to call 2-argument definitions, so +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> # that defining +(a,b) is sufficient for full functionality. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> ($op)(a, b, c, xs...) = afoldl($op, ($op)(($op)(a,b),c), xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> # a further concern is that it's easy for a type like (Int,Int...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> # to match many definitions, so we need to keep the number of +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> # definitions down to avoid losing type information. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> \\(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">Left division operator: multiplication of `y` by the inverse of `x` on the left. Gives +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code">floating-point results for integer arguments. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 3 \\ 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code">2.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code">julia> inv(3) * 6 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code">2.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [4 3; 2 1]; x = [5, 6]; +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A \\ x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Float64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> 6.5 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> -7.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code">julia> inv(A) * x +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">2-element Array{Float64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> 6.5 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> -7.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code">\(x,y) = adjoint(adjoint(y)/adjoint(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"># Core <<, >>, and >>> take either Int or UInt as second arg. Signed shift +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"># counts can shift in either direction, and are translated here to unsigned +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"># counts. Integer datatypes only need to implement the unsigned version. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> <<(x, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code">Left bit shift operator, `x << n`. For `n >= 0`, the result is `x` shifted left +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code">by `n` bits, filling with `0`s. This is equivalent to `x * 2^n`. For `n < 0`, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code">this is equivalent to `x >> -n`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Int8(3) << 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">12 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code">"00000011" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(12)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code">"00001100" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`>>`](@ref), [`>>>`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code">function <<(x::Integer, c::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> typemin(Int) <= c <= typemax(Int) && return x << (c % Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> (x >= 0 || c >= 0) && return zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> oftype(x, -1) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"><<(x::Integer, c::Unsigned) = c <= typemax(UInt) ? x << (c % UInt) : zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"><<(x::Integer, c::Int) = c >= 0 ? x << unsigned(c) : x >> unsigned(-c) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> >>(x, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">Right bit shift operator, `x >> n`. For `n >= 0`, the result is `x` shifted +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code">right by `n` bits, where `n >= 0`, filling with `0`s if `x >= 0`, `1`s if `x < +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code">0`, preserving the sign of `x`. This is equivalent to `fld(x, 2^n)`. For `n < +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code">0`, this is equivalent to `x << -n`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Int8(13) >> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(13)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code">"00001101" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(3)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code">"00000011" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Int8(-14) >> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code">-4 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(-14)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code">"11110010" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(-4)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code">"11111100" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`>>>`](@ref), [`<<`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code">function >>(x::Integer, c::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-603"></a>603</td> + <td></td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-603"></a> + 1 (2.38%) samples spent in >><br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + digitgen + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#Lfastshortest-jl-253e248589e118f4dde7-line.html-92">line 92</a><br /> + </div> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-448">>></a><br /> + </div> + <span class="code"> typemin(Int) <= c <= typemax(Int) && return x >> (c % Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> (x >= 0 || c < 0) && return zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> oftype(x, -1) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code">>>(x::Integer, c::Unsigned) = c <= typemax(UInt) ? x >> (c % UInt) : zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code">>>(x::Integer, c::Int) = c >= 0 ? x >> unsigned(c) : x << unsigned(-c) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> >>>(x, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code">Unsigned right bit shift operator, `x >>> n`. For `n >= 0`, the result is `x` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code">shifted right by `n` bits, where `n >= 0`, filling with `0`s. For `n < 0`, this +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code">is equivalent to `x << -n`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code">For [`Unsigned`](@ref) integer types, this is equivalent to [`>>`](@ref). For +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code">[`Signed`](@ref) integer types, this is equivalent to `signed(unsigned(x) >> n)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Int8(-14) >>> 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code">60 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(-14)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code">"11110010" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code">julia> bitstring(Int8(60)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code">"00111100" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">[`BigInt`](@ref)s are treated as if having infinite size, so no filling is required and this +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code">is equivalent to [`>>`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`>>`](@ref), [`<<`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code">function >>>(x::Integer, c::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> typemin(Int) <= c <= typemax(Int) ? x >>> (c % Int) : zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code">>>>(x::Integer, c::Unsigned) = c <= typemax(UInt) ? x >>> (c % UInt) : zero(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code">>>>(x::Integer, c::Int) = c >= 0 ? x >>> unsigned(c) : x << unsigned(-c) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"># fallback div, fld, and cld implementations +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"># NOTE: C89 fmod() and x87 FPREM implicitly provide truncating float division, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"># so it is used here as the basis of float div(). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::T, y::T) where {T<:Real} = convert(T,round((x-rem(x,y))/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> fld(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code">Largest integer less than or equal to `x/y`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fld(7.3,5.5) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code">1.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code">fld(x::T, y::T) where {T<:Real} = convert(T,round((x-mod(x,y))/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> cld(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code">Smallest integer larger than or equal to `x/y`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code">julia> cld(5.5,2.2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code">3.0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code">cld(x::T, y::T) where {T<:Real} = convert(T,round((x-modCeil(x,y))/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code">#rem(x::T, y::T) where {T<:Real} = convert(T,x-y*trunc(x/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code">#mod(x::T, y::T) where {T<:Real} = convert(T,x-y*floor(x/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code">modCeil(x::T, y::T) where {T<:Real} = convert(T,x-y*ceil(x/y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"># operator alias +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> rem(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code"> %(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code">Remainder from Euclidean division, returning a value of the same sign as `x`, and smaller in +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code">magnitude than `y`. This value is always exact. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x = 15; y = 4; +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x % y +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code">3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x == div(x, y) * y + rem(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code">rem +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code">const % = rem +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> div(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> ÷(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code">The quotient from Euclidean division. Computes `x/y`, truncated to an integer. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 9 ÷ 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code">julia> -5 ÷ 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code">-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code">div +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code">const ÷ = div +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> mod1(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code">Modulus after flooring division, returning a value `r` such that `mod(r, y) == mod(x, y)` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code">in the range ``(0, y]`` for positive `y` and in the range ``[y,0)`` for negative `y`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code">See also: [`fld1`](@ref), [`fldmod1`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod1(4, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code">2 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code">julia> mod1(4, 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code">1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code">mod1(x::T, y::T) where {T<:Real} = (m = mod(x, y); ifelse(m == 0, y, m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> fld1(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code">Flooring division, returning a value consistent with `mod1(x,y)` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code">See also: [`mod1`](@ref), [`fldmod1`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x = 15; y = 4; +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fld1(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code">4 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x == fld(x, y) * y + mod(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code">julia> x == (fld1(x, y) - 1) * y + mod1(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code">fld1(x::T, y::T) where {T<:Real} = (m = mod1(x, y); fld(x + y - m, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code">function fld1(x::T, y::T) where T<:Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> d = div(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> return d + (!signbit(x ⊻ y) & (d * y != x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> fldmod1(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code">Return `(fld1(x,y), mod1(x,y))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code">See also: [`fld1`](@ref), [`mod1`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code">fldmod1(x, y) = (fld1(x, y), mod1(x, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> widen(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code">If `x` is a type, return a "larger" type, defined so that arithmetic operations +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code">`+` and `-` are guaranteed not to overflow nor lose precision for any combination +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code">of values that type `x` can hold. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code">For fixed-size integer types less than 128 bits, `widen` will return a type with +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code">twice the number of bits. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code">If `x` is a value, it is converted to `widen(typeof(x))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code">julia> widen(Int32) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code">Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code">julia> widen(1.5f0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code">1.5 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code">widen(x::T) where {T} = convert(widen(T), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code">widen(x::Type{T}) where {T} = throw(MethodError(widen, (T,))) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"># function pipelining +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> |>(x, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code">Applies a function to the preceding argument. This allows for easy function chaining. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code">julia> [1:5;] |> x->x.^2 |> sum |> inv +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code">0.01818181818181818 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code">|>(x, f) = f(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"># function composition +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> f ∘ g +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code">Compose functions: i.e. `(f ∘ g)(args...)` means `f(g(args...))`. The `∘` symbol can be +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code">entered in the Julia REPL (and most editors, appropriately configured) by typing `\\circ<tab>`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code">julia> map(uppercase∘first, ["apple", "banana", "carrot"]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Char,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> 'A' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> 'B' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> 'C' +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code">∘(f, g) = (x...)->f(g(x...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> !f::Function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code">Predicate function negation: when the argument of `!` is a function, it returns a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code">function which computes the boolean negation of `f`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code">julia> str = "∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code">"∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code">julia> filter(isletter, str) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code">"εδxyδfxfyε" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code">julia> filter(!isletter, str) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code">"∀ > 0, ∃ > 0: |-| < ⇒ |()-()| < " +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code">!(f::Function) = (x...)->!f(x...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix1(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code">A type representing a partially-applied version of the two-argument function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code">`f`, with the first argument fixed to the value "x". In other words, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code">`Fix1(f, x)` behaves similarly to `y->f(x, y)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code">struct Fix1{F,T} <: Function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> f::F +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> x::T +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix1(f::F, x::T) where {F,T} = new{F,T}(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix1(f::Type{F}, x::T) where {F,T} = new{Type{F},T}(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code">(f::Fix1)(y) = f.f(f.x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix2(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code">A type representing a partially-applied version of the two-argument function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code">`f`, with the second argument fixed to the value "x". In other words, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code">`Fix2(f, x)` behaves similarly to `y->f(y, x)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code">struct Fix2{F,T} <: Function +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> f::F +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> x::T +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix2(f::F, x::T) where {F,T} = new{F,T}(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> Fix2(f::Type{F}, x::T) where {F,T} = new{Type{F},T}(f, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code">(f::Fix2)(y) = f.f(y, f.x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"> isequal(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code">Create a function that compares its argument to `x` using [`isequal`](@ref), i.e. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">a function equivalent to `y -> isequal(y, x)`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code">The returned function is of type `Base.Fix2{typeof(isequal)}`, which can be +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code">used to implement specialized methods. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code">isequal(x) = Fix2(isequal, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> ==(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code">Create a function that compares its argument to `x` using [`==`](@ref), i.e. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code">a function equivalent to `y -> y == x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code">The returned function is of type `Base.Fix2{typeof(==)}`, which can be +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code">used to implement specialized methods. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code">==(x) = Fix2(==, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> splat(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code">Defined as +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code">```julia +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> splat(f) = args->f(args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code">i.e. given a function returns a new function that takes one argument and splats +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code">its argument into the original function. This is useful as an adaptor to pass +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code">a multi-argument function in a context that expects a single argument, but +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code">passes a tuple as that single argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"># Example usage: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code">julia> map(splat(+), zip(1:3,4:6)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code">3-element Array{Int64,1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> 5 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> 7 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> 9 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code">splat(f) = args->f(args...) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code">## in & contains +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> in(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code">Create a function that checks whether its argument is [`in`](@ref) `x`, i.e. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code">a function equivalent to `y -> y in x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code">The returned function is of type `Base.Fix2{typeof(in)}`, which can be +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code">used to implement specialized methods. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code">in(x) = Fix2(in, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code">function in(x, itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code"> anymissing = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> for y in itr +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code"> v = (y == x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> if ismissing(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> anymissing = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif v +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> return anymissing ? missing : false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code">const ∈ = in +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code">∋(itr, x) = ∈(x, itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code">∉(x, itr) = !∈(x, itr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code">∌(itr, x) = !∋(itr, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> in(item, collection) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> ∈(item, collection) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code"> ∋(collection, item) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether an item is in the given collection, in the sense that it is +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code">[`==`](@ref) to one of the values generated by iterating over the collection. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code">Returns a `Bool` value, except if `item` is [`missing`](@ref) or `collection` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code">contains `missing` but not `item`, in which case `missing` is returned +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code">([three-valued logic](https://en.wikipedia.org/wiki/Three-valued_logic), +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code">matching the behavior of [`any`](@ref) and [`==`](@ref)). +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code">Some collections follow a slightly different definition. For example, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code">[`Set`](@ref)s check whether the item [`isequal`](@ref) to one of the elements. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code">[`Dict`](@ref)s look for `key=>value` pairs, and the key is compared using +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code">[`isequal`](@ref). To test for the presence of a key in a dictionary, +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code">use [`haskey`](@ref) or `k in keys(dict)`. For these collections, the result +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code">is always a `Bool` and never `missing`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code">julia> a = 1:3:20 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code">1:3:19 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 4 in a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 5 in a +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code">julia> missing in [1, 2] +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code">missing +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 1 in [2, missing] +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code">missing +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 1 in [1, missing] +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code">julia> missing in Set([1, 2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code">in, ∋ +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> ∉(item, collection) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code"> ∌(collection, item) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code">Negation of `∈` and `∋`, i.e. checks that `item` is not in `collection`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 1 ∉ 2:4 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 1 ∉ 1:3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Loperators-jl-714ade2c8745dd55a410-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code">∉, ∌ +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/optimize-jl-9a25bbc7af72ab9ad4ff-line.html b/profiling/statprof/optimize-jl-9a25bbc7af72ab9ad4ff-line.html new file mode 100644 index 0000000000000000000000000000000000000000..6ad68bad4ed1cd5f445be8b3d8e4d4053290d7cd --- /dev/null +++ b/profiling/statprof/optimize-jl-9a25bbc7af72ab9ad4ff-line.html @@ -0,0 +1,4553 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/optimize.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">##################### +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"># OptimizationState # +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">##################### +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct OptimizationState +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> linfo::MethodInstance +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> result_vargs::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> calledges::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> src::CodeInfo +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> mod::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid::UInt +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid::UInt +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> params::Params +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> sp::SimpleVector # static parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> const_api::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> function OptimizationState(frame::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> s_edges = frame.stmt_edges[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> if s_edges === () +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> s_edges = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.stmt_edges[1] = s_edges +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> src = frame.src +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(frame.linfo, frame.result.vargs, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> s_edges::Vector{Any}, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> src, frame.mod, frame.nargs, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.min_valid, frame.max_valid, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.params, frame.sp, frame.slottypes, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> function OptimizationState(linfo::MethodInstance, src::CodeInfo, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> # prepare src for running optimization passes +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> # if it isn't already +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> nssavalues = src.ssavaluetypes +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> if nssavalues isa Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> src.ssavaluetypes = Any[ Any for i = 1:nssavalues ] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> nslots = length(src.slotnames) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes = Any[ Any for i = 1:nslots ] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> s_edges = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> # cache some useful state computations +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> toplevel = !isa(linfo.def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> if !toplevel +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> meth = linfo.def +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> inmodule = meth.module +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs = meth.nargs +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> inmodule = linfo.def::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> result_vargs = Any[] # if you want something more accurate, set it yourself :P +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> return new(linfo, result_vargs, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> s_edges::Vector{Any}, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> src, inmodule, nargs, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> min_world(linfo), max_world(linfo), +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> params, spvals_from_meth_instance(linfo), slottypes, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">function OptimizationState(linfo::MethodInstance, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> src = retrieve_code_info(linfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> src === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> return OptimizationState(linfo, src, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">############# +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"># constants # +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">############# +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"># The slot has uses that are not statically dominated by any assignment +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"># This is implied by `SLOT_USEDUNDEF`. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"># If this is not set, all the uses are (statically) dominated by the defs. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"># In particular, if a slot has `AssignedOnce && !StaticUndef`, it is an SSA. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">const SLOT_STATICUNDEF = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">const SLOT_ASSIGNEDONCE = 16 # slot is assigned to only once +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">const SLOT_USEDUNDEF = 32 # slot has uses that might raise UndefVarError +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"># const SLOT_CALLED = 64 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">const IR_FLAG_INBOUNDS = 0x01 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"># known to be always effect-free (in particular nothrow) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">const _PURE_BUILTINS = Any[tuple, svec, ===, typeof, nfields] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"># known to be effect-free if the are nothrow +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">const _PURE_OR_ERROR_BUILTINS = [ +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldtype, apply_type, isa, UnionAll, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> getfield, arrayref, isdefined, Core.sizeof, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.kwfunc +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">const TOP_TUPLE = GlobalRef(Core, :tuple) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">######### +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"># logic # +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code">######### +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">_topmod(sv::OptimizationState) = _topmod(sv.mod) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">function update_valid_age!(min_valid::UInt, max_valid::UInt, sv::OptimizationState) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> sv.min_valid = max(sv.min_valid, min_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> sv.max_valid = min(sv.max_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert(!isa(sv.linfo.def, Method) || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> (sv.min_valid == typemax(UInt) && sv.max_valid == typemin(UInt)) || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> sv.min_valid <= sv.params.world <= sv.max_valid, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> "invalid age range update") +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">update_valid_age!(li::MethodInstance, sv::OptimizationState) = update_valid_age!(min_world(li), max_world(li), sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code">function add_backedge!(li::MethodInstance, caller::OptimizationState) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(caller.linfo.def, Method) || return # don't add backedges to toplevel exprs +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(caller.calledges, li) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> update_valid_age!(li, caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">function isinlineable(m::Method, me::OptimizationState, bonus::Int=0) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> # compute the cost (size) of inlining this code +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> inlineable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> cost_threshold = me.params.inline_cost_threshold +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> if m.module === _topmod(m.module) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> # a few functions get special treatment +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> name = m.name +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> sig = m.sig +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> if ((name === :+ || name === :* || name === :min || name === :max) && +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(sig,DataType) && +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> sig == Tuple{sig.parameters[1],Any,Any,Any,Vararg{Any}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> inlineable = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif (name === :iterate || name === :unsafe_convert || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> name === :cconvert) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> cost_threshold *= 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> if !inlineable +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> inlineable = inline_worthy(me.src.code, me.src, me.sp, me.slottypes, me.params, cost_threshold + bonus) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> return inlineable +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"># These affect control flow within the function (so may not be removed +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"># if there is no usage within the function), but don't affect the purity +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"># of the function as a whole. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">function stmt_affects_purity(@nospecialize(stmt), ir) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, GotoNode) || isa(stmt, ReturnNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, GotoIfNot) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> t = argextype(stmt.cond, ir, ir.spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> return !(t ⊑ Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> return stmt.head != :simdloop && stmt.head != :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"># run the optimization work +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-optimize-jl-optimize-163"></a> + 1 (2.70%) samples spent in optimize<br /> + 0 (ex.), + 1 (100.00%) (incl.) + when called from + typeinf + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#Ltypeinfer-jl-14b2448d998dfdb61460-line.html-35">line 35</a><br /> + </div> + <span class="code">function optimize(opt::OptimizationState, @nospecialize(result)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> def = opt.linfo.def +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs = Int(opt.nargs) - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-166"></a>166</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="driver-jl-4d4652571be99309ac0c-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-driver-jl-run_passes-113">run_passes</a><br /> + </div> + <span class="code"> @timeit "optimizer" ir = run_passes(opt.src, nargs, opt) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> force_noinline = _any(@nospecialize(x) -> isexpr(x, :meta) && x.args[1] == :noinline, ir.meta) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> # compute inlining and other related optimizations +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> if (isa(result, Const) || isconstType(result)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> proven_pure = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> # must be proven pure to use const_api; otherwise we might skip throwing errors +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> # (issue #20704) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Improve this analysis; if a function is marked @pure we should really +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> # only care about certain errors (e.g. method errors and type errors). +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(ir.stmts) < 10 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> proven_pure = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(ir.stmts) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = ir.stmts[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt_affects_purity(stmt, ir) && !stmt_effect_free(stmt, ir.types[i], ir, ir.spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> proven_pure = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> if proven_pure +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> for fl in opt.src.slotflags +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> if (fl & SLOT_USEDUNDEF) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> proven_pure = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> if proven_pure +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> opt.src.pure = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> if proven_pure && !coverage_enabled() +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> # use constant calling convention +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> # Do not emit `jl_fptr_const_return` if coverage is enabled +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> # so that we don't need to add coverage support +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> # to the `jl_call_method_internal` fast path +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> # Still set pure flag to make sure `inference` tests pass +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> # and to possibly enable more optimization in the future +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(isa(result, Const) && !is_inlineable_constant(result.val)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> opt.const_api = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> force_noinline || (opt.src.inlineable = true) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> replace_code_newstyle!(opt.src, ir, nargs) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> # determine and cache inlineability +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> if !force_noinline +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> # don't keep ASTs for functions specialized on a Union argument +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: this helps avoid a type-system bug mis-computing sparams during intersection +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> sig = unwrap_unionall(opt.linfo.specTypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(sig, DataType) && sig.name === Tuple.name +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> for P in sig.parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> P = unwrap_unionall(P) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(P, Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> force_noinline = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> break +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> force_noinline = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> if !opt.src.inlineable && result === Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> force_noinline = true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> if force_noinline +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> opt.src.inlineable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> if opt.src.inlineable && isdispatchtuple(opt.linfo.specTypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> # obey @inline declaration if a dispatch barrier would not help +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> bonus = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> if result ⊑ Tuple && !isbitstype(widenconst(result)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> bonus = opt.params.inline_tupleret_bonus +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> if opt.src.inlineable +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> # For functions declared @inline, increase the cost threshold 20x +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> bonus += opt.params.inline_cost_threshold*19 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> opt.src.inlineable = isinlineable(def, opt, bonus) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"># whether `f` is pure for inference +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">function is_pure_intrinsic_infer(f::IntrinsicFunction) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> return !(f === Intrinsics.pointerref || # this one is volatile +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.pointerset || # this one is never effect-free +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.llvmcall || # this one is never effect-free +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.arraylen || # this one is volatile +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.sqrt_llvm || # this one may differ at runtime (by a few ulps) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.cglobal) # cglobal lookup answer changes at runtime +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"># whether `f` is pure for optimizations +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code">function is_pure_intrinsic_optim(f::IntrinsicFunction) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> return !(f === Intrinsics.pointerref || # this one is volatile +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.pointerset || # this one is never effect-free +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.llvmcall || # this one is never effect-free +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.arraylen || # this one is volatile +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.checked_sdiv_int || # these may throw errors +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.checked_udiv_int || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.checked_srem_int || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.checked_urem_int || +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> f === Intrinsics.cglobal) # cglobal throws an error for symbol-not-found +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code">## Computing the cost of a function body +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"># saturating sum (inputs are nonnegative), prevents overflow with typemax(Int) below +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code">plus_saturate(x::Int, y::Int) = max(x, y, x+y) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"># known return type +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code">isknowntype(@nospecialize T) = (T == Union{}) || isconcretetype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code">function statement_cost(ex::Expr, line::Int, src::CodeInfo, spvals::SimpleVector, slottypes::Vector{Any}, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> head = ex.head +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_meta_expr_head(head) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :call +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> farg = ex.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> ftyp = argextype(farg, src, spvals, slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> if ftyp === IntrinsicFunction && farg isa SSAValue +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> # if this comes from code that was already inlined into another function, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> # Consts have been widened. try to recover in simple cases. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> farg = src.code[farg.id] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(farg, GlobalRef) || isa(farg, QuoteNode) || isa(farg, IntrinsicFunction) || isexpr(farg, :static_parameter) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> ftyp = argextype(farg, src, spvals, slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> f = singleton_type(ftyp) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, IntrinsicFunction) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> iidx = Int(reinterpret(Int32, f::IntrinsicFunction)) + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isassigned(T_IFUNC_COST, iidx) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> # unknown/unhandled intrinsic +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> return params.inline_nonleaf_penalty +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> return T_IFUNC_COST[iidx] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> # The efficiency of operations like a[i] and s.b +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> # depend strongly on whether the result can be +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> # inferred, so check the type of ex +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> if f === Main.Core.getfield || f === Main.Core.tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> # we might like to penalize non-inferrability, but +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> # tuple iteration/destructuring makes that impossible +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> # return plus_saturate(argcost, isknowntype(extyp) ? 1 : params.inline_nonleaf_penalty) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif f === Main.Core.arrayref && length(ex.args) >= 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> atyp = argextype(ex.args[3], src, spvals, slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> return isknowntype(atyp) ? 4 : params.inline_nonleaf_penalty +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> fidx = find_tfunc(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> if fidx === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> # unknown/unhandled builtin or anonymous function +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> # Use the generic cost of a direct function call +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> return 20 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> return T_FFUNC_COST[fidx] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> return params.inline_nonleaf_penalty +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :foreigncall || head === :invoke +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> # Calls whose "return type" is Union{} do not actually return: +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> # they are errors. Since these are not part of the typical +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> # run-time of the function, we omit them from +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> # consideration. This way, non-inlined error branches do not +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> # prevent inlining. +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> extyp = line == -1 ? Any : src.ssavaluetypes[line] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> return extyp === Union{} ? 0 : 20 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :return +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ex.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> if a isa Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> return statement_cost(a, -1, src, spvals, slottypes, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :(=) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> if ex.args[1] isa GlobalRef +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> cost = 20 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> cost = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ex.args[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> if a isa Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> cost = plus_saturate(cost, statement_cost(a, -1, src, spvals, slottypes, params)) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> return cost +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :copyast +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> return 100 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> # try/catch is a couple function calls, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> # but don't inline functions with try/catch +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> # since these aren't usually performance-sensitive functions, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> # and llvm is more likely to miscompile them when these functions get large +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> return typemax(Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> target = ex.args[2]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> # loops are generally always expensive +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> # but assume that forward jumps are already counted for from +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> # summing the cost of the not-taken branch +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> return target < line ? 40 : 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">function inline_worthy(body::Array{Any,1}, src::CodeInfo, spvals::SimpleVector, slottypes::Vector{Any}, +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> params::Params, cost_threshold::Integer=params.inline_cost_threshold) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> bodycost::Int = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> for line = 1:length(body) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> stmt = body[line] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> if stmt isa Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> thiscost = statement_cost(stmt, line, src, spvals, slottypes, params)::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stmt isa GotoNode +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> # loops are generally always expensive +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> # but assume that forward jumps are already counted for from +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> # summing the cost of the not-taken branch +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> thiscost = stmt.label < line ? 40 : 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> bodycost = plus_saturate(bodycost, thiscost) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> bodycost > cost_threshold && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">function is_known_call(e::Expr, @nospecialize(func), src, spvals::SimpleVector, slottypes::Vector{Any} = empty_slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> if e.head !== :call +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> f = argextype(e.args[1], src, spvals, slottypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(f, Const) && f.val === func +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code">function renumber_ir_elements!(body::Vector{Any}, changemap::Vector{Int}) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> return renumber_ir_elements!(body, changemap, changemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">function renumber_ir_elements!(body::Vector{Any}, ssachangemap::Vector{Int}, labelchangemap::Vector{Int}) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:length(labelchangemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> labelchangemap[i] += labelchangemap[i - 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> if ssachangemap !== labelchangemap +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 2:length(ssachangemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> ssachangemap[i] += ssachangemap[i - 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> (labelchangemap[end] != 0 && ssachangemap[end] != 0) || return +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(body) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> el = body[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(el, GotoNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> body[i] = GotoNode(el.label + labelchangemap[el.label]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(el, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> body[i] = SSAValue(el.id + ssachangemap[el.id]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(el, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> if el.head === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> cond = el.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(cond, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> el.args[1] = SSAValue(cond.id + ssachangemap[cond.id]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> tgt = el.args[2]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> el.args[2] = tgt + labelchangemap[tgt] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif el.head === :enter +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> tgt = el.args[1]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> el.args[1] = tgt + labelchangemap[tgt] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif !is_meta_expr_head(el.head) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> if el.head === :(=) && el.args[2] isa Expr && !is_meta_expr_head(el.args[2].head) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> el = el.args[2]::Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> args = el.args +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(args) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> el = args[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(el, SSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> args[i] = SSAValue(el.id + ssachangemap[el.id]) +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Loptimize-jl-9a25bbc7af72ab9ad4ff-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">include("compiler/ssair/driver.jl") +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/promotion-jl-fe649671ed190521a171-line.html b/profiling/statprof/promotion-jl-fe649671ed190521a171-line.html new file mode 100644 index 0000000000000000000000000000000000000000..91a7ae735b5c5a52a221cf6529d858785e0f6487 --- /dev/null +++ b/profiling/statprof/promotion-jl-fe649671ed190521a171-line.html @@ -0,0 +1,4438 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">## type join (closest common ancestor, or least upper bound) ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> typejoin(T, S) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code">Return the closest common ancestor of `T` and `S`, i.e. the narrowest type from which +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code">they both inherit. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">typejoin() = (@_pure_meta; Bottom) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">typejoin(@nospecialize(t)) = (@_pure_meta; t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">typejoin(@nospecialize(t), ts...) = (@_pure_meta; typejoin(t, typejoin(ts...))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">function typejoin(@nospecialize(a), @nospecialize(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(a, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(a.ub, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(b, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(a, b.ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif a <: b +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> return b +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif b <: a +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> return a +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(a, UnionAll) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> return UnionAll(a.var, typejoin(a.body, b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(b, UnionAll) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> return UnionAll(b.var, typejoin(a, b.body)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(a, Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(typejoin(a.a, a.b), b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(b, Union) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(a, typejoin(b.a, b.b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif a <: Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(b <: Tuple) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> ap, bp = a.parameters, b.parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> lar = length(ap)::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> lbr = length(bp)::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> if lar == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> return Tuple{Vararg{tailjoin(bp, 1)}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> if lbr == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> return Tuple{Vararg{tailjoin(ap, 1)}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> laf, afixed = full_va_len(ap) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> lbf, bfixed = full_va_len(bp) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> if laf < lbf +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(ap[lar]) && !afixed +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> c = Vector{Any}(undef, laf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> c[laf] = Vararg{typejoin(unwrapva(ap[lar]), tailjoin(bp, laf))} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> n = laf-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> c = Vector{Any}(undef, laf+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> c[laf+1] = Vararg{tailjoin(bp, laf+1)} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> n = laf +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif lbf < laf +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(bp[lbr]) && !bfixed +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> c = Vector{Any}(undef, lbf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> c[lbf] = Vararg{typejoin(unwrapva(bp[lbr]), tailjoin(ap, lbf))} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> n = lbf-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> c = Vector{Any}(undef, lbf+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> c[lbf+1] = Vararg{tailjoin(ap, lbf+1)} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> n = lbf +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> c = Vector{Any}(undef, laf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> n = laf +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:n +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> ai = ap[min(i,lar)]; bi = bp[min(i,lbr)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> ci = typejoin(unwrapva(ai), unwrapva(bi)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> c[i] = i == length(c) && (isvarargtype(ai) || isvarargtype(bi)) ? Vararg{ci} : ci +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> return Tuple{c...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif b <: Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> while b !== Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> if a <: b.name.wrapper +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> while a.name !== b.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> a = supertype(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> if a.name === Type.body.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> ap = a.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> bp = b.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> if ((isa(ap,TypeVar) && ap.lb === Bottom && ap.ub === Any) || +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> (isa(bp,TypeVar) && bp.lb === Bottom && bp.ub === Any)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> # handle special Type{T} supertype +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> return Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> aprimary = a.name.wrapper +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> # join on parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> n = length(a.parameters) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> if n == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> return aprimary +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> vars = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:n +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> ai, bi = a.parameters[i], b.parameters[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> if ai === bi || (isa(ai,Type) && isa(bi,Type) && ai <: bi && bi <: ai) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> aprimary = aprimary{ai} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> pushfirst!(vars, aprimary.var) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> aprimary = aprimary.body +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> for v in vars +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> aprimary = UnionAll(v, aprimary) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> return aprimary +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> b = supertype(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> promote_typejoin(T, S) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">Compute a type that contains both `T` and `S`, which could be +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">either a parent of both types, or a `Union` if appropriate. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">Falls back to [`typejoin`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code">promote_typejoin(@nospecialize(a), @nospecialize(b)) = _promote_typejoin(a, b)::Type +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(@nospecialize(a), @nospecialize(b)) = typejoin(a, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Nothing}, ::Type{T}) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretetype(T) || T === Union{} ? Union{T, Nothing} : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{T}, ::Type{Nothing}) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretetype(T) || T === Union{} ? Union{T, Nothing} : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Missing}, ::Type{T}) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretetype(T) || T === Union{} ? Union{T, Missing} : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{T}, ::Type{Missing}) where {T} = +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretetype(T) || T === Union{} ? Union{T, Missing} : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Nothing}, ::Type{Missing}) = Union{Nothing, Missing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Missing}, ::Type{Nothing}) = Union{Nothing, Missing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Nothing}, ::Type{Nothing}) = Nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">_promote_typejoin(::Type{Missing}, ::Type{Missing}) = Missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"># Returns length, isfixed +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">function full_va_len(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(p) && return 0, true +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> last = p[end] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> if isvarargtype(last) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> N = unwrap_unionall(last).parameters[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(N, Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> return (length(p) + N - 1)::Int, true +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(p)::Int, false +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(p)::Int, true +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"># reduce typejoin over A[i:end] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">function tailjoin(A, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> if i > length(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> return unwrapva(A[end]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> for j = i:length(A) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> t = typejoin(t, unwrapva(A[j])) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> return t +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">## promotion mechanism ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> promote_type(type1, type2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">Promotion refers to converting values of mixed types to a single common type. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">`promote_type` represents the default promotion behavior in Julia when +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">operators (usually mathematical) are given arguments of differing types. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">`promote_type` generally tries to return a type which can at least approximate +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">most values of either input type without excessively widening. Some loss is +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">tolerated; for example, `promote_type(Int64, Float64)` returns +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">[`Float64`](@ref) even though strictly, not all [`Int64`](@ref) values can be +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">represented exactly as `Float64` values. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Int64, Float64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">Float64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Int32, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Float32, BigInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">BigFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Int16, Float16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">Float16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Int64, Float16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">Float16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote_type(Int8, UInt16) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">UInt16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">function promote_type end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type() = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(T) = T +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(T, S, U, V...) = (@_inline_meta; promote_type(T, promote_type(S, U, V...))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(::Type{Bottom}, ::Type{Bottom}) = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(::Type{T}, ::Type{T}) where {T} = T +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(::Type{T}, ::Type{Bottom}) where {T} = T +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">promote_type(::Type{Bottom}, ::Type{T}) where {T} = T +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code">function promote_type(::Type{T}, ::Type{S}) where {T,S} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> # Try promote_rule in both orders. Typically only one is defined, +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> # and there is a fallback returning Bottom below, so the common case is +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> # promote_type(T, S) => +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> # promote_result(T, S, result, Bottom) => +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> # typejoin(result, Bottom) => result +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> promote_result(T, S, promote_rule(T,S), promote_rule(S,T)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> promote_rule(type1, type2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">Specifies what type should be used by [`promote`](@ref) when given values of types `type1` and +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">`type2`. This function should not be called directly, but should have definitions added to +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">it for new types as appropriate. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code">function promote_rule end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{<:Any}, ::Type{<:Any}) = Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"># To fix ambiguities +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Any}, ::Type{<:Any}) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{<:Any}, ::Type{Any}) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code">promote_rule(::Type{Any}, ::Type{Any}) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code">promote_result(::Type{<:Any},::Type{<:Any},::Type{T},::Type{S}) where {T,S} = (@_inline_meta; promote_type(T,S)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"># If no promote_rule is defined, both directions give Bottom. In that +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"># case use typejoin on the original types instead. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T,S} = (@_inline_meta; typejoin(T, S)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> promote(xs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">Convert all arguments to a common type, and return them all (as a tuple). +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">If no arguments can be converted, an error is raised. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">julia> promote(Int8(1), Float16(4.5), Float32(4.1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">(1.0f0, 4.5f0, 4.1f0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">function promote end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">function _promote(x::T, y::S) where {T,S} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> R = promote_type(T, S) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> return (convert(R, x), convert(R, y)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">promote_typeof(x) = typeof(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">promote_typeof(x, xs...) = (@_inline_meta; promote_type(typeof(x), promote_typeof(xs...))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">function _promote(x, y, z) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> R = promote_typeof(x, y, z) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> return (convert(R, x), convert(R, y), convert(R, z)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code">function _promote(x, y, zs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> R = promote_typeof(x, y, zs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> return (convert(R, x), convert(R, y), convert(Tuple{Vararg{R}}, zs)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: promote(x::T, ys::T...) where {T} here to catch all circularities? +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">## promotions in arithmetic, etc. ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code">promote() = () +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">promote(x) = (x,) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">function promote(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> px, py = _promote(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> not_sametype((x,y), (px,py)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> px, py +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">function promote(x, y, z) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> @_inline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> px, py, pz = _promote(x, y, z) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> not_sametype((x,y,z), (px,py,pz)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> px, py, pz +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">function promote(x, y, z, a...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> p = _promote(x, y, z, a...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> not_sametype((x, y, z, a...), p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> p +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code">promote(x::T, y::T, zs::T...) where {T} = (x, y, zs...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">not_sametype(x::T, y::T) where {T} = sametype_error(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">not_sametype(x, y) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code">function sametype_error(input) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> @_noinline_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> error("promotion of types ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> join(map(x->string(typeof(x)), input), ", ", " and "), +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> " failed to change any arguments") +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">+(x::Number, y::Number) = +(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">*(x::Number, y::Number) = *(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">-(x::Number, y::Number) = -(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">/(x::Number, y::Number) = /(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> ^(x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">Exponentiation operator. If `x` is a matrix, computes matrix exponentiation. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code">If `y` is an `Int` literal (e.g. `2` in `x^2` or `-3` in `x^-3`), the Julia code +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code">`x^y` is transformed by the compiler to `Base.literal_pow(^, x, Val(y))`, to +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">enable compile-time specialization on the value of the exponent. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code">(As a default fallback we have `Base.literal_pow(^, x, Val(y)) = ^(x,y)`, +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code">where usually `^ == Base.^` unless `^` has been defined in the calling +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code">namespace.) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">julia> 3^5 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">243 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A = [1 2; 3 4] +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> 1 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> 3 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">julia> A^3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">2×2 Array{Int64,2}: +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> 37 54 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> 81 118 +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">^(x::Number, y::Number) = ^(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">fma(x::Number, y::Number, z::Number) = fma(promote(x,y,z)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code">muladd(x::Number, y::Number, z::Number) = muladd(promote(x,y,z)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">==(x::Number, y::Number) = (==)(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"><( x::Real, y::Real) = (< )(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"><=(x::Real, y::Real) = (<=)(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code">div(x::Real, y::Real) = div(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">fld(x::Real, y::Real) = fld(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">cld(x::Real, y::Real) = cld(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::Real, y::Real) = rem(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::Real, y::Real) = mod(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">mod1(x::Real, y::Real) = mod1(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code">fld1(x::Real, y::Real) = fld1(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">max(x::Real, y::Real) = max(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code">min(x::Real, y::Real) = min(promote(x,y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">minmax(x::Real, y::Real) = minmax(promote(x, y)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"># "Promotion" that takes a function into account and tries to preserve +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"># non-concrete types. These are meant to be used mainly by elementwise +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"># operations, so it is advised against overriding them +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">_default_type(T::Type) = T +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code">if isdefined(Core, :Compiler) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> const _return_type = Core.Compiler.return_type +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> _return_type(@nospecialize(f), @nospecialize(t)) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> promote_op(f, argtypes...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">Guess what an appropriate container eltype would be for storing results of +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">`f(::argtypes...)`. The guess is in part based on type inference, so can change any time. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code">!!! warning +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> In pathological cases, the type returned by `promote_op(f, argtypes...)` may not even +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> be a supertype of the return value of `f(::argtypes...)`. Therefore, `promote_op` +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> should _not_ be used e.g. in the preallocation of an output array. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code">!!! warning +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> Due to its fragility, use of `promote_op` should be avoided. It is preferable to base +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> the container eltype on the type of the actual elements. Only in the absence of any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> elements (for an empty result container), it may be unavoidable to call `promote_op`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">promote_op(::Any...) = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code">function promote_op(f, ::Type{S}) where S +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> TT = Tuple{_default_type(S)} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> T = _return_type(f, TT) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> isdispatchtuple(Tuple{S}) && return isdispatchtuple(Tuple{T}) ? T : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(S, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code">function promote_op(f, ::Type{R}, ::Type{S}) where {R,S} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> TT = Tuple{_default_type(R), _default_type(S)} +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> T = _return_type(f, TT) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> isdispatchtuple(Tuple{R}) && isdispatchtuple(Tuple{S}) && return isdispatchtuple(Tuple{T}) ? T : Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> return typejoin(R, S, T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">## catch-alls to prevent infinite recursion when definitions are missing ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">no_op_err(name, T) = error(name," not defined for ",T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">(+)(x::T, y::T) where {T<:Number} = no_op_err("+", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code">(*)(x::T, y::T) where {T<:Number} = no_op_err("*", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">(-)(x::T, y::T) where {T<:Number} = no_op_err("-", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">(/)(x::T, y::T) where {T<:Number} = no_op_err("/", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code">(^)(x::T, y::T) where {T<:Number} = no_op_err("^", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code">fma(x::T, y::T, z::T) where {T<:Number} = no_op_err("fma", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">fma(x::Integer, y::Integer, z::Integer) = x*y+z +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">muladd(x::T, y::T, z::T) where {T<:Number} = x*y+z +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code">(&)(x::T, y::T) where {T<:Integer} = no_op_err("&", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code">(|)(x::T, y::T) where {T<:Integer} = no_op_err("|", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code">xor(x::T, y::T) where {T<:Integer} = no_op_err("xor", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-425"></a>425</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-promotion-jl-425"></a> + 1 (2.38%) samples spent in ==<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + == + <a href="int-jl-af434f8f2b4fe43f173a-line.html#Lint-jl-af434f8f2b4fe43f173a-line.html-432">line 432</a><br /> + </div> + <span class="code">(==)(x::T, y::T) where {T<:Number} = x === y +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">(< )(x::T, y::T) where {T<:Real} = no_op_err("<" , T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code">(<=)(x::T, y::T) where {T<:Real} = no_op_err("<=", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code">rem(x::T, y::T) where {T<:Real} = no_op_err("rem", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code">mod(x::T, y::T) where {T<:Real} = no_op_err("mod", T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code">min(x::Real) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">max(x::Real) = x +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">minmax(x::Real) = (x, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code">max(x::T, y::T) where {T<:Real} = ifelse(y < x, x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">min(x::T, y::T) where {T<:Real} = ifelse(y < x, y, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">minmax(x::T, y::T) where {T<:Real} = y < x ? (y, x) : (x, y) +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lpromotion-jl-fe649671ed190521a171-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">flipsign(x::T, y::T) where {T<:Signed} = no_op_err("flipsign", T) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/queries-jl-3d33f551d26c44796e11-line.html b/profiling/statprof/queries-jl-3d33f551d26c44796e11-line.html new file mode 100644 index 0000000000000000000000000000000000000000..c3ca119b6ec9e75910a99bfe0da135f417513ef2 --- /dev/null +++ b/profiling/statprof/queries-jl-3d33f551d26c44796e11-line.html @@ -0,0 +1,818 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/ssair/queries.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether a statement is side-effect-free, i.e. may be removed if it has no uses. +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-ssair-queries-jl-stmt_effect_free-6"></a> + 1 (2.70%) samples spent in stmt_effect_free<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + maybe_erase_unused! + <a href="ir-jl-bebdc9bf648f41024d37-line.html#Lir-jl-bebdc9bf648f41024d37-line.html-903">line 903</a><br /> + </div> + <span class="code">function stmt_effect_free(@nospecialize(stmt), @nospecialize(rt), src, spvals::SimpleVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-7"></a>7</td> + <td>1 (2.70%)</td> + <td>1 (2.70%)</td> + <td> + <span class="code"> isa(stmt, Union{PiNode, PhiNode}) && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(stmt, Union{ReturnNode, GotoNode, GotoIfNot}) && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(stmt, GlobalRef) && return isdefined(stmt.mod, stmt.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(stmt, Slot) && return false # Slots shouldn't occur in the IR at this point, but let's be defensive here +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stmt, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> e = stmt::Expr +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> head = e.head +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> if head === :static_parameter +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> etyp = sparam_type(spvals[e.args[1]]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> # if we aren't certain enough about the type, it might be an UndefVarError at runtime +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(etyp, Const) || issingletontype(widenconst(etyp)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> ea = e.args +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> if head === :call +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> f = argextype(ea[1], src, spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> f = isa(f, Const) ? f.val : isType(f) ? f.parameters[1] : return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> f === return_type && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> contains_is(_PURE_BUILTINS, f) && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> contains_is(_PURE_OR_ERROR_BUILTINS, f) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> rt === Bottom && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> return _builtin_nothrow(f, Any[argextype(ea[i], src, spvals) for i = 2:length(ea)], rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :new +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> a = ea[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> typ = argextype(a, src, spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> # `Expr(:new)` of unknown type could raise arbitrary TypeError. +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> typ, isexact = instanceof_tfunc(typ) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> isexact || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretedispatch(typ) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> typ = typ::DataType +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldcount(typ) >= length(ea) - 1 || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> for fld_idx in 1:(length(ea) - 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> eT = argextype(ea[fld_idx + 1], src, spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> fT = fieldtype(typ, fld_idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> eT ⊑ fT || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif head === :isdefined || head === :the_exception || head === :copyast || head === :inbounds || head === :boundscheck +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> # e.g. :simdloop +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_ssavalue(s::SSAValue, src::IRCode) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> return types(src)[s] +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code">function abstract_eval_ssavalue(s::SSAValue, src::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> return types(src)[s] +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code">function compact_exprtype(compact::IncrementalCompact, @nospecialize(value)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(value, AnySSAValue) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> return types(compact)[value] +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(value, Argument) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> return compact.ir.argtypes[value.n] +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> return argextype(value, compact.ir, compact.ir.spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">is_tuple_call(ir::IRCode, @nospecialize(def)) = isa(def, Expr) && is_known_call(def, tuple, ir, ir.spvals) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">is_tuple_call(compact::IncrementalCompact, @nospecialize(def)) = isa(def, Expr) && is_known_call(def, tuple, compact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">function is_known_call(e::Expr, @nospecialize(func), src::IncrementalCompact) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> if e.head !== :call +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> f = compact_exprtype(src, e.args[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(f, Const) && f.val === func +</span> + </td> + </tr> + + <tr> + <td><a name="Lqueries-jl-3d33f551d26c44796e11-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/reflection-jl-e4829e64897104a61856-line.html b/profiling/statprof/reflection-jl-e4829e64897104a61856-line.html new file mode 100644 index 0000000000000000000000000000000000000000..03b4f4b700d8cfcbb8193b924995990a012e624a --- /dev/null +++ b/profiling/statprof/reflection-jl-e4829e64897104a61856-line.html @@ -0,0 +1,11328 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./reflection.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code"># name and module reflection +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> nameof(m::Module) -> Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">Get the name of a `Module` as a `Symbol`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">julia> nameof(Base.Broadcast) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">:Broadcast +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">nameof(m::Module) = ccall(:jl_module_name, Ref{Symbol}, (Any,), m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> parentmodule(m::Module) -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">Get a module's enclosing `Module`. `Main` is its own parent. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">julia> parentmodule(Main) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">Main +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">julia> parentmodule(Base.Broadcast) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">parentmodule(m::Module) = ccall(:jl_module_parent, Ref{Module}, (Any,), m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> moduleroot(m::Module) -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">Find the root module of a given module. This is the first module in the chain of +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">parent modules of `m` which is either a registered root module or which is its +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code">own parent module. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">function moduleroot(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> is_root_module(m) && return m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> p = parentmodule(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> p == m && return m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> m = p +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> @__MODULE__ -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">Get the `Module` of the toplevel eval, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code">which is the `Module` code is currently being read from. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code">macro __MODULE__() +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> return __module__ +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> fullname(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">Get the fully-qualified name of a module as a tuple of symbols. For example, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fullname(Base.Iterators) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">(:Base, :Iterators) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fullname(Main) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">(:Main,) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">function fullname(m::Module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> mn = nameof(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> if m === Main || m === Base || m === Core +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> return (mn,) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"> mp = parentmodule(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> if mp === m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> return (mn,) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> return (fullname(mp)..., mn) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> names(x::Module; all::Bool = false, imported::Bool = false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">Get an array of the names exported by a `Module`, excluding deprecated names. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code">If `all` is true, then the list also includes non-exported names defined in the module, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">deprecated names, and compiler-generated names. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code">If `imported` is true, then names explicitly imported from other modules +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">are also included. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code">As a special case, all names defined in `Main` are considered \"exported\", +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">since it is not idiomatic to explicitly export names from `Main`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">names(m::Module; all::Bool = false, imported::Bool = false) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> sort!(ccall(:jl_module_names, Array{Symbol,1}, (Any, Cint, Cint), m, all, imported)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code">isexported(m::Module, s::Symbol) = ccall(:jl_module_exports_p, Cint, (Any, Any), m, s) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">isdeprecated(m::Module, s::Symbol) = ccall(:jl_is_binding_deprecated, Cint, (Any, Any), m, s) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">isbindingresolved(m::Module, var::Symbol) = ccall(:jl_binding_resolved_p, Cint, (Any, Any), m, var) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">function binding_module(m::Module, s::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> p = ccall(:jl_get_module_of_binding, Ptr{Cvoid}, (Any, Any), m, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> p == C_NULL && return m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> return unsafe_pointer_to_objref(p)::Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">function resolve(g::GlobalRef; force::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> if force || isbindingresolved(g.mod, g.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> return GlobalRef(binding_module(g.mod, g.name), g.name) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> return g +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code">const NamedTuple_typename = NamedTuple.body.body.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">function _fieldnames(@nospecialize t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.name === NamedTuple_typename +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.parameters[1] isa Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> return t.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("type does not have definite field names")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(t, :names) ? t.names : t.name.names +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldname(x::DataType, i::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code">Get the name of field `i` of a `DataType`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fieldname(Rational, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code">:num +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fieldname(Rational, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">:den +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">function fieldname(t::DataType, i::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.abstract +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("type does not have definite field names")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> names = _fieldnames(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> n_fields = length(names) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> field_label = n_fields == 1 ? "field" : "fields" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> i > n_fields && throw(ArgumentError("Cannot access field $i since type $t only has $n_fields $field_label.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> i < 1 && throw(ArgumentError("Field numbers must be positive integers. $i is invalid.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> return names[i]::Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">fieldname(t::UnionAll, i::Integer) = fieldname(unwrap_unionall(t), i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">fieldname(t::Type{<:Tuple}, i::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> i < 1 || i > fieldcount(t) ? throw(BoundsError(t, i)) : Int(i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldnames(x::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">Get a tuple with the names of the fields of a `DataType`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fieldnames(Rational) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">(:num, :den) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code">fieldnames(t::DataType) = (fieldcount(t); # error check to make sure type is specific enough +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> (_fieldnames(t)...,)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code">fieldnames(t::UnionAll) = fieldnames(unwrap_unionall(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">fieldnames(::Core.TypeofBottom) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("The empty type does not have field names since it does not have instances.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">fieldnames(t::Type{<:Tuple}) = ntuple(identity, fieldcount(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> nameof(t::DataType) -> Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">Get the name of a (potentially `UnionAll`-wrapped) `DataType` (without its parent module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">as a symbol. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code">julia> module Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> struct S{T} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code">julia> nameof(Foo.S{T} where T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">:S +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">nameof(t::DataType) = t.name.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code">nameof(t::UnionAll) = nameof(unwrap_unionall(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> parentmodule(t::DataType) -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the module containing the definition of a (potentially `UnionAll`-wrapped) `DataType`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">julia> module Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> struct Int end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">julia> parentmodule(Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code">Core +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code">julia> parentmodule(Foo.Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code">Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">parentmodule(t::DataType) = t.name.module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code">parentmodule(t::UnionAll) = parentmodule(unwrap_unionall(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> isconst(m::Module, s::Symbol) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether a global is declared `const` in a given `Module`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">isconst(m::Module, s::Symbol) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_is_const, Cint, (Any, Any), m, s) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> @isdefined s -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">Tests whether variable `s` is defined in the current scope. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code">julia> function f() +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> println(@isdefined x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> x = 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> println(@isdefined x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">f (generic function with 1 method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code">julia> f() +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code">macro isdefined(s::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> return Expr(:isdefined, esc(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> objectid(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">Get a hash value for `x` based on object identity. `objectid(x)==objectid(y)` if `x === y`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">objectid(@nospecialize(x)) = ccall(:jl_object_id, UInt, (Any,), x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"># concrete datatype predicates +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">struct DataTypeLayout +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> nfields::UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> alignment::UInt32 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> # alignment : 28; +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> # haspadding : 1; +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> # pointerfree : 1; +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> # fielddesc_type : 2; +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.datatype_alignment(dt::DataType) -> Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code">Memory allocation minimum alignment for instances of this type. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code">Can be called on any `isconcretetype`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code">function datatype_alignment(dt::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> dt.layout == C_NULL && throw(UndefRefError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int(alignment & 0x1FF) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.datatype_haspadding(dt::DataType) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code">Return whether the fields of instances of this type are packed in memory, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code">with no intervening padding bytes. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code">Can be called on any `isconcretetype`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code">function datatype_haspadding(dt::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> dt.layout == C_NULL && throw(UndefRefError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> return (alignment >> 9) & 1 == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.datatype_pointerfree(dt::DataType) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">Return whether instances of this type can contain references to gc-managed memory. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">Can be called on any `isconcretetype`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">function datatype_pointerfree(dt::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> dt.layout == C_NULL && throw(UndefRefError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> return (alignment >> 10) & 0xFFFFF == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.datatype_fielddesc_type(dt::DataType) -> Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">Return the size in bytes of each field-description entry in the layout array, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">located at `(dt.layout + sizeof(DataTypeLayout))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">Can be called on any `isconcretetype`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`Base.fieldoffset`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code">function datatype_fielddesc_type(dt::DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> dt.layout == C_NULL && throw(UndefRefError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> return (alignment >> 30) & 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> isimmutable(v) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` iff value `v` is immutable. See [Mutable Composite Types](@ref) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">for a discussion of immutability. Note that this function works on values, so if you give it +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">a type, it will tell you that a value of `DataType` is mutable. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isimmutable(1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isimmutable([1,2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code">isimmutable(@nospecialize(x)) = (@_pure_meta; !typeof(x).mutable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.isstructtype(T) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether type `T` was declared as a struct type +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">(i.e. using the `struct` or `mutable struct` keyword). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">function isstructtype(@nospecialize(t::Type)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> t = unwrap_unionall(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: what to do for `Union`? +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(t, DataType) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(t.types) != 0 || (t.size == 0 && !t.abstract) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.isprimitivetype(T) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether type `T` was declared as a primitive type +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code">(i.e. using the `primitive` keyword). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">function isprimitivetype(@nospecialize(t::Type)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> t = unwrap_unionall(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: what to do for `Union`? +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> isa(t, DataType) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(t.types) == 0 && t.size != 0 && !t.abstract +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> isbitstype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if type `T` is a "plain data" type, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">meaning it is immutable and contains no references to other values, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code">only `primitive` types and other `isbitstype` types. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">Typical examples are numeric types such as [`UInt8`](@ref), +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code">[`Float64`](@ref), and [`Complex{Float64}`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code">This category of types is significant since they are valid as type parameters, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">may not track [`isdefined`](@ref) / [`isassigned`](@ref) status, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code">and have a defined layout that is compatible with C. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isbitstype(Complex{Float64}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isbitstype(Complex) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">isbitstype(@nospecialize(t::Type)) = (@_pure_meta; isa(t, DataType) && t.isbitstype) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> isbits(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code">Return `true` if `x` is an instance of an `isbitstype` type. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code">isbits(@nospecialize x) = (@_pure_meta; typeof(x).isbitstype) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> isdispatchtuple(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether type `T` is a tuple "leaf type", +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code">meaning it could appear as a type signature in dispatch +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">and has no subtypes (or supertypes) which could appear in a call. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">isdispatchtuple(@nospecialize(t)) = (@_pure_meta; isa(t, DataType) && t.isdispatchtuple) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code">iskindtype(@nospecialize t) = (t === DataType || t === UnionAll || t === Union || t === typeof(Bottom)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">isconcretedispatch(@nospecialize t) = isconcretetype(t) && !iskindtype(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code">has_free_typevars(@nospecialize(t)) = ccall(:jl_has_free_typevars, Cint, (Any,), t) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"># equivalent to isa(v, Type) && isdispatchtuple(Tuple{v}) || v === Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"># and is thus perhaps most similar to the old (pre-1.0) `isleaftype` query +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code">const _TYPE_NAME = Type.body.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">function isdispatchelem(@nospecialize v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> return (v === Bottom) || (v === typeof(Bottom)) || isconcretedispatch(v) || +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> (isa(v, DataType) && v.name === _TYPE_NAME && !has_free_typevars(v)) # isType(v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> isconcretetype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether type `T` is a concrete type, meaning it could have direct instances +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">(values `x` such that `typeof(x) === T`). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Complex) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Complex{Float32}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Vector{Complex}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Vector{Complex{Float32}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Union{}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code">julia> isconcretetype(Union{Int,String}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code">isconcretetype(@nospecialize(t)) = (@_pure_meta; isa(t, DataType) && t.isconcretetype) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.isabstracttype(T) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether type `T` was declared as an abstract type +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code">(i.e. using the `abstract` keyword). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isabstracttype(AbstractArray) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isabstracttype(Vector) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code">function isabstracttype(@nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> t = unwrap_unionall(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: what to do for `Union`? +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> return isa(t, DataType) && t.abstract +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.parameter_upper_bound(t::UnionAll, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the upper bound of a type parameter in the underlying datatype. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code">This method should generally not be relied upon: +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code">code instead should usually use static parameters in dispatch to extract these values. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code">julia> struct Foo{T<:AbstractFloat, N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> x::Tuple{T, N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.parameter_upper_bound(Foo, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code">AbstractFloat +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.parameter_upper_bound(Foo, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code">Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code">function parameter_upper_bound(t::UnionAll, idx) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> return rewrap_unionall((unwrap_unionall(t)::DataType).parameters[idx], t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> typeintersect(T, S) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code">Compute a type that contains the intersection of `T` and `S`. Usually this will be the +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code">smallest such type or one close to it. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code">typeintersect(@nospecialize(a),@nospecialize(b)) = (@_pure_meta; ccall(:jl_type_intersection, Any, (Any,Any), a, b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldoffset(type, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code">The byte offset of field `i` of a type relative to the data start. For example, we could +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code">use it in the following manner to summarize information about a struct: +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code">julia> structinfo(T) = [(fieldoffset(T,i), fieldname(T,i), fieldtype(T,i)) for i = 1:fieldcount(T)]; +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code">julia> structinfo(Base.Filesystem.StatStruct) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code">12-element Array{Tuple{UInt64,Symbol,DataType},1}: +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000000, :device, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000008, :inode, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000010, :mode, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000018, :nlink, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000020, :uid, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000028, :gid, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000030, :rdev, UInt64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000038, :size, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000040, :blksize, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000048, :blocks, Int64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000050, :mtime, Float64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> (0x0000000000000058, :ctime, Float64) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code">fieldoffset(x::DataType, idx::Integer) = (@_pure_meta; ccall(:jl_get_field_offset, Csize_t, (Any, Cint), x, idx)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldtype(T, name::Symbol | index::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the declared type of a field (specified by name or index) in a composite DataType `T`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code">julia> struct Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> x::Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> y::String +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fieldtype(Foo, :x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code">Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">julia> fieldtype(Foo, 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code">String +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">fieldtype +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldindex(T, name::Symbol, err:Bool=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code">Get the index of a named field, throwing an error if the field does not exist (when err==true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code">or returning 0 (when err==false). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code">julia> struct Foo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> x::Int64 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> y::String +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.fieldindex(Foo, :z) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code">ERROR: type Foo has no field z +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code">Stacktrace: +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code">[...] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.fieldindex(Foo, :z, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code">0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code">function fieldindex(T::DataType, name::Symbol, err::Bool=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int(ccall(:jl_field_index, Cint, (Any, Any, Cint), T, name, err)+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code">argument_datatype(@nospecialize t) = ccall(:jl_argument_datatype, Any, (Any,), t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code">function argument_mt(@nospecialize t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> dt = argument_datatype(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> (dt === nothing || !isdefined(dt.name, :mt)) && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> dt.name.mt +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> fieldcount(t::Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code">Get the number of fields that an instance of the given type would have. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code">An error is thrown if the type is too abstract to determine this. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code">function fieldcount(@nospecialize t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> if t isa UnionAll || t isa Union +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> t = argument_datatype(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> if t === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("type does not have a definite number of fields")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> t = t::DataType +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif t == Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("The empty type does not have a well-defined number of fields since it does not have instances.")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(t isa DataType) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(TypeError(:fieldcount, "", Type, t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> if t.name === NamedTuple_typename +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> names, types = t.parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> if names isa Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(names) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> if types isa DataType && types <: Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> return fieldcount(types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> abstr = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> abstr = t.abstract || (t.name === Tuple.name && isvatuple(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> if abstr +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("type does not have a definite number of fields")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> return length(t.types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"># return all instances, for types that can be enumerated +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> instances(T::Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code">Return a collection of all instances of the given type, if applicable. Mostly used for +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">enumerated types (see `@enum`). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"># Example +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code">julia> @enum Color red blue green +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code">julia> instances(Color) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code">(red::Color = 0, blue::Color = 1, green::Color = 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code">function instances end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code">function to_tuple_type(@nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> @_pure_meta +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(t,Tuple) || isa(t,AbstractArray) || isa(t,SimpleVector) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> t = Tuple{t...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(t,Type) && t<:Tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> for p in unwrap_unionall(t).parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(isa(p,Type) || isa(p,TypeVar)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> error("argument tuple type must contain only types") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> error("expected tuple type") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> t +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code">function signature_type(@nospecialize(f), @nospecialize(args)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> f_type = isa(f, Type) ? Type{f} : typeof(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(args, Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> u = unwrap_unionall(args) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> return rewrap_unionall(Tuple{f_type, u.parameters...}, args) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> return Tuple{f_type, args...} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> code_lowered(f, types; generated = true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code">Return an array of the lowered forms (IR) for the methods matching the given generic function +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code">and type signature. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code">If `generated` is `false`, the returned `CodeInfo` instances will correspond to fallback +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code">implementations. An error is thrown if no fallback implementation exists. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code">If `generated` is `true`, these `CodeInfo` instances will correspond to the method bodies +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code">yielded by expanding the generators. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code">Note that an error will be thrown if `types` are not leaf types when `generated` is +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code">`true` and the corresponding method is a `@generated` method. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code">function code_lowered(@nospecialize(f), @nospecialize(t = Tuple); generated::Bool = true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> return map(method_instances(f, t)) do m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> if generated && isgenerated(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(m, Core.MethodInstance) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"> return Core.Compiler.get_staged(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> else # isa(m, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> error("Could not expand generator for `@generated` method ", m, ". ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> "This can happen if the provided argument types (", t, ") are ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> "not leaf types, but the `generated` argument is `true`.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> return uncompressed_ast(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code">isgenerated(m::Method) = isdefined(m, :generator) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code">isgenerated(m::Core.MethodInstance) = isgenerated(m.def) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"># low-level method lookup functions used by the compiler +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code">unionlen(x::Union) = unionlen(x.a) + unionlen(x.b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code">unionlen(@nospecialize(x)) = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code">_uniontypes(x::Union, ts) = (_uniontypes(x.a,ts); _uniontypes(x.b,ts); ts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code">_uniontypes(@nospecialize(x), ts) = (push!(ts, x); ts) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code">uniontypes(@nospecialize(x)) = _uniontypes(x, Any[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code">function _methods(@nospecialize(f), @nospecialize(t), lim::Int, world::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> tt = signature_type(f, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code"> return _methods_by_ftype(tt, lim, world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code">function _methods_by_ftype(@nospecialize(t), lim::Int, world::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> return _methods_by_ftype(t, lim, world, UInt[typemin(UInt)], UInt[typemax(UInt)]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code">function _methods_by_ftype(@nospecialize(t), lim::Int, world::UInt, min::Array{UInt,1}, max::Array{UInt,1}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-721"></a>721</td> + <td>1 (2.70%)</td> + <td>1 (2.70%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-reflection-jl-_methods_by_ftype-721"></a> + 1 (2.70%) samples spent in _methods_by_ftype<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + abstract_call_gf_by_type + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-49">line 49</a><br /> + </div> + <span class="code"> return ccall(:jl_matching_methods, Any, (Any, Cint, Cint, UInt, Ptr{UInt}, Ptr{UInt}), t, lim, 0, world, min, max) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"># high-level, more convenient method lookup functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"># type for reflecting and pretty-printing a subset of methods +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct MethodList +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> ms::Array{Method,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> mt::Core.MethodTable +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code">length(m::MethodList) = length(m.ms) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code">isempty(m::MethodList) = isempty(m.ms) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code">iterate(m::MethodList, s...) = iterate(m.ms, s...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code">eltype(::Type{MethodList}) = Method +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code">function MethodList(mt::Core.MethodTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> ms = Method[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> visit(mt) do m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(ms, m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> return MethodList(ms, mt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> methods(f, [types]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code">Returns the method table for `f`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">If `types` is specified, returns an array of methods whose types match. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code">function methods(@nospecialize(f), @nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Core.Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("argument is not a generic function")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> t = to_tuple_type(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code"> world = typemax(UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> return MethodList(Method[m[3] for m in _methods(f, t, -1, world)], typeof(f).name.mt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code">methods(f::Core.Builtin) = MethodList(Method[], typeof(f).name.mt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code">function methods_including_ambiguous(@nospecialize(f), @nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code"> tt = signature_type(f, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> world = typemax(UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> min = UInt[typemin(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> max = UInt[typemax(UInt)] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> ms = ccall(:jl_matching_methods, Any, (Any, Cint, Cint, UInt, Ptr{UInt}, Ptr{UInt}), tt, -1, 1, world, min, max)::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code"> return MethodList(Method[m[3] for m in ms], typeof(f).name.mt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code">function methods(@nospecialize(f)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> # return all matches +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <span class="code"> return methods(f, Tuple{Vararg{Any}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code">function visit(f, mt::Core.MethodTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> mt.defs !== nothing && visit(f, mt.defs) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code">function visit(f, mc::Core.TypeMapLevel) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> if mc.targ !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-782"></a>782</td> + <td></td> + <td></td> + <td> + <span class="code"> e = mc.targ::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(e, i) && visit(f, e[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> if mc.arg1 !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> e = mc.arg1::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in 1:length(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> isassigned(e, i) && visit(f, e[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> mc.list !== nothing && visit(f, mc.list) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> mc.any !== nothing && visit(f, mc.any) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code">function visit(f, d::Core.TypeMapEntry) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"> while d !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code"> f(d.func) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"> d = d.next +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code">function length(mt::Core.MethodTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> visit(mt) do m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code"> n += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> return n::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code">isempty(mt::Core.MethodTable) = (mt.defs === nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code">uncompressed_ast(m::Method) = isdefined(m,:source) ? uncompressed_ast(m, m.source) : +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(m,:generator) ? error("Method is @generated; try `code_lowered` instead.") : +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> error("Code for this Method is not available.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code">uncompressed_ast(m::Method, s::CodeInfo) = s +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code">uncompressed_ast(m::Method, s::Array{UInt8,1}) = ccall(:jl_uncompress_ast, Any, (Any, Any), m, s)::CodeInfo +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code">uncompressed_ast(m::Core.MethodInstance) = uncompressed_ast(m.def) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code">function method_instances(@nospecialize(f), @nospecialize(t), world::UInt = typemax(UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> tt = signature_type(f, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"> results = Vector{Union{Method,Core.MethodInstance}}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"> for method_data in _methods_by_ftype(tt, -1, world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"> mtypes, msp, m = method_data +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"> instance = Core.Compiler.code_for_method(m, mtypes, msp, world, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(results, ifelse(isa(instance, Core.MethodInstance), instance, m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> return results +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-830"></a>830</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"># this type mirrors jl_cgparams_t (documented in julia.h) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code">struct CodegenParams +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> cached::Cint +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> track_allocations::Cint +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> code_coverage::Cint +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> static_alloc::Cint +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> prefer_specsig::Cint +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> module_setup::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> module_activation::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> raise_exception::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> emit_function::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> emitted_function::Any +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> CodegenParams(;cached::Bool=true, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code"> track_allocations::Bool=true, code_coverage::Bool=true, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code"> static_alloc::Bool=true, prefer_specsig::Bool=false, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code"> module_setup=nothing, module_activation=nothing, raise_exception=nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code"> emit_function=nothing, emitted_function=nothing) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code"> new(Cint(cached), +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code"> Cint(track_allocations), Cint(code_coverage), +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> Cint(static_alloc), Cint(prefer_specsig), +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> module_setup, module_activation, raise_exception, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> emit_function, emitted_function) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code"># give a decent error message if we try to instantiate a staged function on non-leaf types +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code">function func_for_method_checked(m::Method, @nospecialize types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(m, :generator) && !isdispatchtuple(types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> error("cannot call @generated function `", m, "` ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code"> "with abstract argument types: ", types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code"> return m +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> code_typed(f, types; optimize=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code">Returns an array of type-inferred lowered form (IR) for the methods matching the given +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code">generic function and type signature. The keyword argument `optimize` controls whether +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code">additional optimizations, such as inlining, are also applied. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code">function code_typed(@nospecialize(f), @nospecialize(types=Tuple); optimize=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_is_in_pure_context, Bool, ()) && error("code reflection cannot be used from generated functions") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Core.Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("argument is not a generic function")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> types = to_tuple_type(types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> asts = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> world = ccall(:jl_get_world_counter, UInt, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> params = Core.Compiler.Params(world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in _methods(f, types, -1, world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> meth = func_for_method_checked(x[3], types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> (code, ty) = Core.Compiler.typeinf_code(meth, x[1], x[2], optimize, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> code === nothing && error("inference not successful") # inference disabled? +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(asts, code => ty) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"> return asts +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">function return_types(@nospecialize(f), @nospecialize(types=Tuple)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_is_in_pure_context, Bool, ()) && error("code reflection cannot be used from generated functions") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Core.Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("argument is not a generic function")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code"> types = to_tuple_type(types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = [] +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code"> world = ccall(:jl_get_world_counter, UInt, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> params = Core.Compiler.Params(world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code"> for x in _methods(f, types, -1, world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code"> meth = func_for_method_checked(x[3], types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code"> ty = Core.Compiler.typeinf_type(meth, x[1], x[2], params) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> ty === nothing && error("inference not successful") # inference disabled? +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(rt, ty) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> return rt +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> which(f, types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code">Returns the method of `f` (a `Method` object) that would be called for arguments of the given `types`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code">If `types` is an abstract type, then the method that would be called by `invoke` is returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code">function which(@nospecialize(f), @nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Core.Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("argument is not a generic function")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> t = to_tuple_type(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> tt = signature_type(f, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code"> m = ccall(:jl_gf_invoke_lookup, Any, (Any, UInt), tt, typemax(UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code"> if m === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code"> error("no unique matching method found for the specified argument types") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> return m.func::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> which(module, symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code">Return the module in which the binding for the variable referenced by `symbol` in `module` was created. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code">function which(m::Module, s::Symbol) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isdefined(m, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> error("\"$s\" is not defined in module $m") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code"> return binding_module(m, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code"># function reflection +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code"> nameof(f::Function) -> Symbol +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code">Get the name of a generic `Function` as a symbol, or `:anonymous`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code">nameof(f::Function) = typeof(f).name.mt.name +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code">functionloc(m::Core.MethodInstance) = functionloc(m.def) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> functionloc(m::Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code">Returns a tuple `(filename,line)` giving the location of a `Method` definition. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code">function functionloc(m::Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> ln = m.line +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code"> if ln <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> error("could not determine location of method definition") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code"> return (find_source_file(string(m.file)), ln) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> functionloc(f::Function, types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code">Returns a tuple `(filename,line)` giving the location of a generic `Function` definition. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code">functionloc(@nospecialize(f), @nospecialize(types)) = functionloc(which(f,types)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code">function functionloc(@nospecialize(f)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code"> mt = methods(f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(mt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Function) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code"> error("function has no definitions") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> error("object is not callable") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code"> if length(mt) > 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> error("function has multiple methods; please specify a type signature") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> return functionloc(first(mt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code"> parentmodule(f::Function) -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the module containing the (first) definition of a generic +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code">function. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code">parentmodule(f::Function) = parentmodule(typeof(f)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code"> parentmodule(f::Function, types) -> Module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code">Determine the module containing a given definition of a generic function. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code">function parentmodule(@nospecialize(f), @nospecialize(types)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code"> m = methods(f, types) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> error("no matching methods") +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code"> return first(m).module +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code"> hasmethod(f, Tuple type; world = typemax(UInt)) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether the given generic function has a method matching the given +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code">`Tuple` of argument types with the upper bound of world age given by `world`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code">See also [`applicable`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code">julia> hasmethod(length, Tuple{Array}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code">function hasmethod(@nospecialize(f), @nospecialize(t); world = typemax(UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code"> t = to_tuple_type(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code"> t = signature_type(f, t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:jl_method_exists, Cint, (Any, Any, UInt), typeof(f).name.mt, t, world) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1027"></a>1027</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code"> isambiguous(m1, m2; ambiguous_bottom=false) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether two methods `m1` and `m2` (typically of the same +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code">function) are ambiguous. This test is performed in the context of +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code">other methods of the same function; in isolation, `m1` and `m2` might +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <span class="code">be ambiguous, but if a third method resolving the ambiguity has been +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code">defined, this returns `false`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code">For parametric types, the `ambiguous_bottom` keyword argument controls whether +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code">`Union{}` counts as an ambiguous intersection of type parameters – when `true`, +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code">it is considered ambiguous, when `false` it is not. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1044"></a>1044</td> + <td></td> + <td></td> + <td> + <span class="code">julia> foo(x::Complex{<:Integer}) = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1045"></a>1045</td> + <td></td> + <td></td> + <td> + <span class="code">foo (generic function with 1 method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1046"></a>1046</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1047"></a>1047</td> + <td></td> + <td></td> + <td> + <span class="code">julia> foo(x::Complex{<:Rational}) = 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1048"></a>1048</td> + <td></td> + <td></td> + <td> + <span class="code">foo (generic function with 2 methods) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1049"></a>1049</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1050"></a>1050</td> + <td></td> + <td></td> + <td> + <span class="code">julia> m1, m2 = collect(methods(foo)); +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1051"></a>1051</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1052"></a>1052</td> + <td></td> + <td></td> + <td> + <span class="code">julia> typeintersect(m1.sig, m2.sig) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1053"></a>1053</td> + <td></td> + <td></td> + <td> + <span class="code">Tuple{#foo,Complex{Union{}}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1054"></a>1054</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1055"></a>1055</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isambiguous(m1, m2, ambiguous_bottom=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1056"></a>1056</td> + <td></td> + <td></td> + <td> + <span class="code">true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1057"></a>1057</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1058"></a>1058</td> + <td></td> + <td></td> + <td> + <span class="code">julia> Base.isambiguous(m1, m2, ambiguous_bottom=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1059"></a>1059</td> + <td></td> + <td></td> + <td> + <span class="code">false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1060"></a>1060</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1061"></a>1061</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1062"></a>1062</td> + <td></td> + <td></td> + <td> + <span class="code">function isambiguous(m1::Method, m2::Method; ambiguous_bottom::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1063"></a>1063</td> + <td></td> + <td></td> + <td> + <span class="code"> ti = typeintersect(m1.sig, m2.sig) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1064"></a>1064</td> + <td></td> + <td></td> + <td> + <span class="code"> ti === Bottom && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1065"></a>1065</td> + <td></td> + <td></td> + <td> + <span class="code"> if !ambiguous_bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1066"></a>1066</td> + <td></td> + <td></td> + <td> + <span class="code"> has_bottom_parameter(ti) && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1067"></a>1067</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1068"></a>1068</td> + <td></td> + <td></td> + <td> + <span class="code"> ml = _methods_by_ftype(ti, -1, typemax(UInt)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1069"></a>1069</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(ml) && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1070"></a>1070</td> + <td></td> + <td></td> + <td> + <span class="code"> for m in ml +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1071"></a>1071</td> + <td></td> + <td></td> + <td> + <span class="code"> if ti <: m[3].sig +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1072"></a>1072</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1073"></a>1073</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1074"></a>1074</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1075"></a>1075</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1076"></a>1076</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1077"></a>1077</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1078"></a>1078</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1079"></a>1079</td> + <td></td> + <td></td> + <td> + <span class="code"> delete_method(m::Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1080"></a>1080</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1081"></a>1081</td> + <td></td> + <td></td> + <td> + <span class="code">Make method `m` uncallable and force recompilation of any methods that use(d) it. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1082"></a>1082</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1083"></a>1083</td> + <td></td> + <td></td> + <td> + <span class="code">function delete_method(m::Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1084"></a>1084</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_method_table_disable, Cvoid, (Any, Any), get_methodtable(m), m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1085"></a>1085</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1086"></a>1086</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1087"></a>1087</td> + <td></td> + <td></td> + <td> + <span class="code">function get_methodtable(m::Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1088"></a>1088</td> + <td></td> + <td></td> + <td> + <span class="code"> ft = ccall(:jl_first_argument_datatype, Any, (Any,), m.sig) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1089"></a>1089</td> + <td></td> + <td></td> + <td> + <span class="code"> (ft::DataType).name.mt +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1090"></a>1090</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1091"></a>1091</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1092"></a>1092</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1093"></a>1093</td> + <td></td> + <td></td> + <td> + <span class="code"> has_bottom_parameter(t) -> Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1094"></a>1094</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1095"></a>1095</td> + <td></td> + <td></td> + <td> + <span class="code">Determine whether `t` is a Type for which one or more of its parameters is `Union{}`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1096"></a>1096</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1097"></a>1097</td> + <td></td> + <td></td> + <td> + <span class="code">function has_bottom_parameter(t::Type) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1098"></a>1098</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1099"></a>1099</td> + <td></td> + <td></td> + <td> + <span class="code"> for p in t.parameters +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1100"></a>1100</td> + <td></td> + <td></td> + <td> + <span class="code"> ret |= (p == Bottom) || has_bottom_parameter(p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1101"></a>1101</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1102"></a>1102</td> + <td></td> + <td></td> + <td> + <span class="code"> ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1103"></a>1103</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1104"></a>1104</td> + <td></td> + <td></td> + <td> + <span class="code">has_bottom_parameter(t::UnionAll) = has_bottom_parameter(unwrap_unionall(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1105"></a>1105</td> + <td></td> + <td></td> + <td> + <span class="code">has_bottom_parameter(t::Union) = has_bottom_parameter(t.a) & has_bottom_parameter(t.b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1106"></a>1106</td> + <td></td> + <td></td> + <td> + <span class="code">has_bottom_parameter(t::TypeVar) = t.ub == Bottom || has_bottom_parameter(t.ub) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1107"></a>1107</td> + <td></td> + <td></td> + <td> + <span class="code">has_bottom_parameter(::Any) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1108"></a>1108</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1109"></a>1109</td> + <td></td> + <td></td> + <td> + <span class="code">min_world(m::Method) = reinterpret(UInt, m.min_world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1110"></a>1110</td> + <td></td> + <td></td> + <td> + <span class="code">max_world(m::Method) = reinterpret(UInt, m.max_world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1111"></a>1111</td> + <td></td> + <td></td> + <td> + <span class="code">min_world(m::Core.MethodInstance) = reinterpret(UInt, m.min_world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1112"></a>1112</td> + <td></td> + <td></td> + <td> + <span class="code">max_world(m::Core.MethodInstance) = reinterpret(UInt, m.max_world) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1113"></a>1113</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1114"></a>1114</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1115"></a>1115</td> + <td></td> + <td></td> + <td> + <span class="code"> propertynames(x, private=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1116"></a>1116</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1117"></a>1117</td> + <td></td> + <td></td> + <td> + <span class="code">Get a tuple or a vector of the properties (`x.property`) of an object `x`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1118"></a>1118</td> + <td></td> + <td></td> + <td> + <span class="code">This is typically the same as [`fieldnames(typeof(x))`](@ref), but types +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1119"></a>1119</td> + <td></td> + <td></td> + <td> + <span class="code">that overload [`getproperty`](@ref) should generally overload `propertynames` +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1120"></a>1120</td> + <td></td> + <td></td> + <td> + <span class="code">as well to get the properties of an instance of the type. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1121"></a>1121</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1122"></a>1122</td> + <td></td> + <td></td> + <td> + <span class="code">`propertynames(x)` may return only "public" property names that are part +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1123"></a>1123</td> + <td></td> + <td></td> + <td> + <span class="code">of the documented interface of `x`. If you want it to also return "private" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1124"></a>1124</td> + <td></td> + <td></td> + <td> + <span class="code">fieldnames intended for internal use, pass `true` for the optional second argument. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1125"></a>1125</td> + <td></td> + <td></td> + <td> + <span class="code">REPL tab completion on `x.` shows only the `private=false` properties. +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1126"></a>1126</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1127"></a>1127</td> + <td></td> + <td></td> + <td> + <span class="code">propertynames(x) = fieldnames(typeof(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1128"></a>1128</td> + <td></td> + <td></td> + <td> + <span class="code">propertynames(m::Module) = names(m) +</span> + </td> + </tr> + + <tr> + <td><a name="Lreflection-jl-e4829e64897104a61856-line.html-1129"></a>1129</td> + <td></td> + <td></td> + <td> + <span class="code">propertynames(x, private) = propertynames(x) # ignore private flag by default +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/statprofiler.css b/profiling/statprof/statprofiler.css new file mode 100644 index 0000000000000000000000000000000000000000..bbc6d5149f394efd1c3f61b94a356021b3a3c563 --- /dev/null +++ b/profiling/statprof/statprofiler.css @@ -0,0 +1,79 @@ +.report-header { + height: 10ex; + background-color: #04b431; + background-color: #298a08; + padding: 1ex; + color: #ffffff; + margin-bottom: 2ex; +} + +.report-header a { + color: #ffffff; + text-decoration: none; + font-size: 80%; +} + +.report-link { +} + +.report-title { + padding-top: 1ex; + padding-bottom: 1ex; + float: left; + font-size: 200%; +} + +.generated-on { + padding-top: 5ex; + float: right; + text-align: right; +} + +#body-content { + margin: 1ex; +} + +body { + margin: 0px; + font-family: sans-serif; +} + +table { + border-collapse: collapse; + /* border-spacing: 0px; */ +} + +table.sortable th:not(.sorttable_sorted):not(.sorttable_sorted_reverse):not(.sorttable_nosort):after { + content: " \25B4\25BE" +} + +th { + border: solid 1px #c0c0c0; + padding-right: 0.5ex; + font-size: 80%; +} + +td { + border: solid 1px #c0c0c0; + padding-left: 0.5ex; + padding-right: 0.5ex; +} + +.call-sites { + font-family: monospace; + padding-left: 1.5em; + margin-bottom: 1em; + color: #707070; +} + +.callees { + font-family: monospace; + padding-left: 1.5em; + margin-bottom: 1em; + color: #707070; +} + +.code { + font-family: monospace; + white-space: pre; +} \ No newline at end of file diff --git a/profiling/statprof/stream-jl-9a841f596a6f3ffbe5b9-line.html b/profiling/statprof/stream-jl-9a841f596a6f3ffbe5b9-line.html new file mode 100644 index 0000000000000000000000000000000000000000..0cddd49b052673fdc39c04ad0a78a9dd224af815 --- /dev/null +++ b/profiling/statprof/stream-jl-9a841f596a6f3ffbe5b9-line.html @@ -0,0 +1,11027 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">import .Libc: RawFD, dup +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"> import .Libc: WindowsRawSocket +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> const OS_HANDLE = WindowsRawSocket +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> const INVALID_OS_HANDLE = WindowsRawSocket(Ptr{Cvoid}(-1)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> const OS_HANDLE = RawFD +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> const INVALID_OS_HANDLE = RawFD(-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">## types ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type IOServer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type LibuvServer <: IOServer end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">abstract type LibuvStream <: IO end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"># IO +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># +- GenericIOBuffer{T<:AbstractArray{UInt8,1}} (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># +- AbstractPipe (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- Pipe +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- Process (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- ProcessChain (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"># +- BufferStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"># +- DevNull (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"># +- Filesystem.File +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"># +- LibuvStream (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- PipeEndpoint (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- TCPSocket +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- TTY (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- UDPSocket +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"># +- IOBuffer = Base.GenericIOBuffer{Array{UInt8,1}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"># +- IOStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"># IOServer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"># +- LibuvServer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- PipeServer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"># . +- TCPServer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"># Redirectable = Union{IO, FileRedirect, Libc.RawFD} (not exported) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">function stream_wait(x, c...) # for x::LibuvObject +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> preserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> return wait(c...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> unpreserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code">bytesavailable(s::LibuvStream) = bytesavailable(s.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">function eof(s::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> if isopen(s) # fast path +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(s) > 0 && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> return bytesavailable(s) <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s,1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> return !isopen(s) && bytesavailable(s) <= 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"># Limit our default maximum read and buffer size, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"># to avoid DoS-ing ourself into an OOM situation +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">const DEFAULT_READ_BUFFER_SZ = 10485760 # 10 MB +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"># manually limit our write size, if the OS doesn't support full-size writes +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> const MAX_OS_WRITE = UInt(0x1FF0_0000) # 511 MB (determined semi-empirically, limited to 31 MB on XP) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> const MAX_OS_WRITE = UInt(typemax(Csize_t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusUninit = 0 # handle is allocated, but not initialized +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusInit = 1 # handle is valid, but not connected/active +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusConnecting = 2 # handle is in process of connecting +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusOpen = 3 # handle is usable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusActive = 4 # handle is listening for read/write/connect events +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusClosing = 5 # handle is closing / being closed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusClosed = 6 # handle is closed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusEOF = 7 # handle is a TTY that has seen an EOF event +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code">const StatusPaused = 8 # handle is Active, but not consuming events, and will transition to Open if it receives an event +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_status_string(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> s = x.status +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> if x.handle == C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> if s == StatusClosed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> return "closed" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusUninit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> return "null" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> return "invalid status" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusUninit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> return "uninit" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusInit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> return "init" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusConnecting +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> return "connecting" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> return "open" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> return "active" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusPaused +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> return "paused" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> return "closing" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusClosed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> return "closed" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif s == StatusEOF +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> return "eof" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> return "invalid status" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct PipeEndpoint <: LibuvStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> handle::Ptr{Cvoid} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> status::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer::IOBuffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> readnotify::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> connectnotify::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> closenotify::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> sendbuf::Union{IOBuffer, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> lock::ReentrantLock +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> throttle::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> function PipeEndpoint(handle::Ptr{Cvoid}, status) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> p = new(handle, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> status, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> PipeBuffer(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> ReentrantLock(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> DEFAULT_READ_BUFFER_SZ) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> associate_julia_struct(handle, p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> finalizer(uvfinalize, p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> return p +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">function PipeEndpoint() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> pipe = PipeEndpoint(Libc.malloc(_sizeof_uv_named_pipe), StatusUninit) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_pipe_init, Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Cint), eventloop(), pipe.handle, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_error("failed to create pipe endpoint", err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> pipe.status = StatusInit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> return pipe +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct TTY <: LibuvStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> handle::Ptr{Cvoid} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> status::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer::IOBuffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> readnotify::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> closenotify::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> sendbuf::Union{IOBuffer, Nothing} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> lock::ReentrantLock +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> throttle::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if Sys.iswindows(); ispty::Bool; end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> function TTY(handle::Ptr{Cvoid}, status) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> tty = new( +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> handle, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> status, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> PipeBuffer(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> Condition(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> ReentrantLock(), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> DEFAULT_READ_BUFFER_SZ) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> associate_julia_struct(handle, tty) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> finalizer(uvfinalize, tty) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> tty.ispty = ccall(:jl_ispty, Cint, (Ptr{Cvoid},), handle) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> return tty +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">function TTY(fd::RawFD; readable::Bool = false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> tty = TTY(Libc.malloc(_sizeof_uv_tty), StatusUninit) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> # This needs to go after associate_julia_struct so that there +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> # is no garbage in the ->data field +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_tty_init, Int32, (Ptr{Cvoid}, Ptr{Cvoid}, RawFD, Int32), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> eventloop(), tty.handle, fd, readable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_error("TTY", err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> tty.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> return tty +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, stream::LibuvServer) = print(io, typeof(stream), "(", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> _fd(stream), " ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_status_string(stream), ")") +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, stream::LibuvStream) = print(io, typeof(stream), "(", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> _fd(stream), " ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_status_string(stream), ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(stream.buffer), " bytes waiting)") +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"># Shared LibuvStream object interface +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">function isreadable(io::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(io) > 0 && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen(io) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:uv_is_readable, Cint, (Ptr{Cvoid},), io.handle) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">function iswritable(io::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> isopen(io) || return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> io.status == StatusClosing && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> return ccall(:uv_is_writable, Cint, (Ptr{Cvoid},), io.handle) != 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code">lock(s::LibuvStream) = lock(s.lock) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code">unlock(s::LibuvStream) = unlock(s.lock) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code">rawhandle(stream::LibuvStream) = stream.handle +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_convert(::Type{Ptr{Cvoid}}, s::Union{LibuvStream, LibuvServer}) = s.handle +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">function init_stdio(handle::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> t = ccall(:jl_uv_handle_type, Int32, (Ptr{Cvoid},), handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> if t == UV_FILE +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> fd = ccall(:jl_uv_file_handle, OS_HANDLE, (Ptr{Cvoid},), handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Replace ios.c file with libuv fs? +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> # return File(fd) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Get ios.c to understand native handles +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> fd = ccall(:_open_osfhandle, RawFD, (WindowsRawSocket, Int32), fd, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: Get fdio to work natively with file descriptors instead of integers +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> return fdio(cconvert(Cint, fd)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif t == UV_TTY +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> return TTY(handle, StatusOpen) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif t == UV_TCP +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> Sockets = require(PkgId(UUID((0x6462fe0b_24de_5631, 0x8697_dd941f90decc)), "Sockets")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> return Sockets.TCPSocket(handle, StatusOpen) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif t == UV_NAMED_PIPE +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> return PipeEndpoint(handle, StatusOpen) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("invalid stdio type: $t")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code">function isopen(x::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> if x.status == StatusUninit || x.status == StatusInit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("$x is not initialized")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> x.status != StatusClosed && x.status != StatusEOF +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">function check_open(x::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isopen(x) || x.status == StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(ArgumentError("stream is closed or unusable")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_connected(x::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> check_open(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> while x.status == StatusConnecting +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> stream_wait(x, x.connectnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> check_open(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readbyte(x::LibuvStream, c::UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> if isopen(x) # fast path +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> occursin(c, x.buffer) && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> preserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(x) && !occursin(c, x.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> start_reading(x) # ensure we are reading +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(x.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(x.readnotify.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> stop_reading(x) # stop reading iff there are currently no other read clients of the stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> unpreserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readnb(x::LibuvStream, nb::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> if isopen(x) # fast path +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(x.buffer) >= nb && return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> oldthrottle = x.throttle +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> preserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(x) && bytesavailable(x.buffer) < nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> x.throttle = max(nb, x.throttle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> start_reading(x) # ensure we are reading +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(x.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> if isempty(x.readnotify.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code"> stop_reading(x) # stop reading iff there are currently no other read clients of the stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> if oldthrottle <= x.throttle <= nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"> x.throttle = oldthrottle +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> unpreserve_handle(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_close(x::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> if isopen(x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> stream_wait(x, x.closenotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">function close(stream::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status == StatusInit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_forceclose_uv, Cvoid, (Ptr{Cvoid},), stream.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isopen(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status != StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), stream.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> if uv_handle_data(stream) != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> stream_wait(stream, stream.closenotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">function uvfinalize(uv::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> if uv.handle != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> disassociate_julia_struct(uv.handle) # not going to call the usual close hooks +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> if uv.status != StatusUninit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> close(uv) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(uv.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> uv.status = StatusClosed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> uv.handle = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> ispty(s::TTY) = s.ispty +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> ispty(s::IO) = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> displaysize([io::IO]) -> (lines, columns) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">Return the nominal size of the screen that may be used for rendering output to +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">this `IO` object. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code">If no input is provided, the environment variables `LINES` and `COLUMNS` are read. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code">If those are not set, a default size of `(24, 80)` is returned. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">julia> withenv("LINES" => 30, "COLUMNS" => 100) do +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> displaysize() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">(30, 100) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">To get your TTY size, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code">```julia +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">julia> displaysize(stdout) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code">(34, 147) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">displaysize(io::IO) = displaysize() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">displaysize() = (parse(Int, get(ENV, "LINES", "24")), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> parse(Int, get(ENV, "COLUMNS", "80")))::Tuple{Int, Int} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">function displaysize(io::TTY) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> local h::Int, w::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> default_size = displaysize() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> if ispty(io) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> # io is actually a libuv pipe but a cygwin/msys2 pty +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> h, w = parse.(Int, split(read(open(Base.Cmd(String["stty", "size"]), "r", io).out, String))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> h > 0 || (h = default_size[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> w > 0 || (w = default_size[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code"> return h, w +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> catch +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> return default_size +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> s1 = Ref{Int32}(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> s2 = Ref{Int32}(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.uv_error("size (TTY)", ccall(:uv_tty_get_winsize, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> Int32, (Ptr{Cvoid}, Ptr{Int32}, Ptr{Int32}), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> io, s1, s2) != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> w, h = s1[], s2[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> h > 0 || (h = default_size[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> w > 0 || (w = default_size[2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> return h, w +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code">in(key_value::Pair{Symbol,Bool}, ::TTY) = key_value.first === :color && key_value.second === have_color +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">haskey(::TTY, key::Symbol) = key === :color +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(::TTY, key::Symbol) = key === :color ? have_color : throw(KeyError(key)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">get(::TTY, key::Symbol, default) = key === :color ? have_color : default +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">### Libuv callbacks ### +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code">## BUFFER ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">## Allocate space in buffer (for immediate use) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code">function alloc_request(buffer::IOBuffer, recommended_size::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> ensureroom(buffer, Int(recommended_size)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> ptr = buffer.append ? buffer.size + 1 : buffer.ptr +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = length(buffer.data) - ptr + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> return (pointer(buffer.data, ptr), nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code">notify_filled(buffer::IOBuffer, nread::Int, base::Ptr{Cvoid}, len::UInt) = notify_filled(buffer, nread) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code">function notify_filled(buffer::IOBuffer, nread::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> if buffer.append +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer.size += nread +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer.ptr += nread +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">function alloc_buf_hook(stream::LibuvStream, size::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> throttle = UInt(stream.throttle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"> return alloc_request(stream.buffer, (size > throttle) ? throttle : size) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_alloc_buf(handle::Ptr{Cvoid}, size::Csize_t, buf::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> hd = uv_handle_data(handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> if hd == C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_uv_buf_set_len, Cvoid, (Ptr{Cvoid}, Csize_t), buf, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> stream = unsafe_pointer_to_objref(hd)::LibuvStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> local data::Ptr{Cvoid}, newsize::Csize_t +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status != StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> data = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> newsize = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> (data, newsize) = alloc_buf_hook(stream, UInt(size)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> if data == C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> newsize = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> # avoid aliasing of `nread` with `errno` in uv_readcb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> # or exceeding the Win32 maximum uv_buf_t len +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> maxsize = @static Sys.iswindows() ? typemax(Cint) : typemax(Cssize_t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> newsize > maxsize && (newsize = maxsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_uv_buf_set_base, Cvoid, (Ptr{Cvoid}, Ptr{Cvoid}), buf, data) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_uv_buf_set_len, Cvoid, (Ptr{Cvoid}, Csize_t), buf, newsize) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_readcb(handle::Ptr{Cvoid}, nread::Cssize_t, buf::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> stream_unknown_type = @handle_as handle LibuvStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> nrequested = ccall(:jl_uv_buf_len, Csize_t, (Ptr{Cvoid},), buf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> function readcb_specialized(stream::LibuvStream, nread::Int, nrequested::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> if nread < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> if nread == UV_ENOBUFS && nrequested == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> # remind the client that stream.buffer is full +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(stream.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif nread == UV_EOF +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(stream, TTY) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusEOF # libuv called uv_stop_reading already +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(stream.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(stream.closenotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stream.status != StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> # begin shutdown of the stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), stream.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusClosing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> # This is a fatal connection error. Shutdown requests as per the usual +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> # close function won't work and libuv will fail with an assertion failure +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_forceclose_uv, Cvoid, (Ptr{Cvoid},), stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> notify_error(stream.readnotify, _UVError("read", nread)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> notify_filled(stream.buffer, nread) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(stream.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> # Stop background reading when +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> # 1) there's nobody paying attention to the data we are reading +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> # 2) we have accumulated a lot of unread data OR +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> # 3) we have an alternate buffer that has reached its limit. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status == StatusPaused || +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> (stream.status == StatusActive && +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> ((bytesavailable(stream.buffer) >= stream.throttle) || +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> (bytesavailable(stream.buffer) >= stream.buffer.maxsize))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> # save cycles by stopping kernel notifications from arriving +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_read_stop, Cint, (Ptr{Cvoid},), stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> readcb_specialized(stream_unknown_type, Int(nread), UInt(nrequested)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code">function reseteof(x::TTY) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> if x.status == StatusEOF +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> x.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code">function _uv_hook_close(uv::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> uv.handle = C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> uv.status = StatusClosed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> # notify any listeners that exist on this libuv stream type +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(uv.closenotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(uv, :readnotify) && notify(uv.readnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> isdefined(uv, :connectnotify) && notify(uv.connectnotify) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code">########################################## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"># Pipe Abstraction +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"># (composed of two half-pipes: .in and .out) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code">########################################## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct Pipe <: AbstractPipe +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> in::PipeEndpoint # writable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> out::PipeEndpoint # readable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code">Construct an uninitialized Pipe object. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code">The appropriate end of the pipe will be automatically initialized if +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code">the object is used in process spawning. This can be useful to easily +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code">obtain references in process pipelines, e.g.: +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code">julia> err = Pipe() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"># After this `err` will be initialized and you may read `foo`'s +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"># stderr from the `err` pipe. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code">julia> run(pipeline(pipeline(`foo`, stderr=err), `cat`), wait=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code">Pipe() = Pipe(PipeEndpoint(), PipeEndpoint()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code">pipe_reader(p::Pipe) = p.out +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code">pipe_writer(p::Pipe) = p.in +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code">function link_pipe!(pipe::Pipe; +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> reader_supports_async = false, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> writer_supports_async = false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> link_pipe!(pipe.out, reader_supports_async, pipe.in, writer_supports_async) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> return pipe +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, stream::Pipe) = print(io, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> "Pipe(", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> _fd(stream.in), " ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_status_string(stream.in), " => ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> _fd(stream.out), " ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_status_string(stream.out), ", ", +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> bytesavailable(stream), " bytes waiting)") +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-574"></a>574</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code">## Functions for PipeEndpoint and PipeServer ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code">function open_pipe!(p::PipeEndpoint, handle::OS_HANDLE, readable::Bool, writable::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> if p.status != StatusInit +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"> error("pipe is already in use or has been closed") +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:jl_pipe_open, Int32, (Ptr{Cvoid}, OS_HANDLE, Cint, Cint), p.handle, handle, readable, writable) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_error("open_pipe", err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> p.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> return p +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code">function link_pipe!(read_end::PipeEndpoint, reader_supports_async::Bool, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> write_end::PipeEndpoint, writer_supports_async::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> rd, wr = link_pipe(reader_supports_async, writer_supports_async) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> open_pipe!(read_end, rd, true, false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> catch e +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> close_pipe_sync(rd) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> read_end.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> open_pipe!(write_end, wr, false, true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> catch e +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> close_pipe_sync(wr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> rethrow(e) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> write_end.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code">function link_pipe(reader_supports_async::Bool, writer_supports_async::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> UV_NONBLOCK_PIPE = 0x40 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-611"></a>611</td> + <td></td> + <td></td> + <td> + <span class="code"> fildes = Ref{Pair{OS_HANDLE, OS_HANDLE}}(INVALID_OS_HANDLE => INVALID_OS_HANDLE) # read (in) => write (out) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_pipe, Int32, (Ptr{Pair{OS_HANDLE, OS_HANDLE}}, Cint, Cint), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> fildes, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> reader_supports_async * UV_NONBLOCK_PIPE, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> writer_supports_async * UV_NONBLOCK_PIPE) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_error("pipe", err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> return fildes[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> function close_pipe_sync(handle::WindowsRawSocket) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:CloseHandle, stdcall, Cint, (WindowsRawSocket,), handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"> function close_pipe_sync(handle::RawFD) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:close, Cint, (RawFD,), handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code">## Functions for any LibuvStream ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"># flow control +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code">function start_reading(stream::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status == StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isreadable(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> error("tried to read a stream that is not readable") +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> # libuv may call the alloc callback immediately +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> # for a TTY on Windows, so ensure the status is set first +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = ccall(:uv_read_start, Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> stream, uv_jl_alloc_buf::Ptr{Cvoid}, uv_jl_readcb::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> return ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stream.status == StatusPaused +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-648"></a>648</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-649"></a>649</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int32(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-650"></a>650</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif stream.status == StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-651"></a>651</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int32(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-652"></a>652</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-653"></a>653</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int32(-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-654"></a>654</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-655"></a>655</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-656"></a>656</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-657"></a>657</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-658"></a>658</td> + <td></td> + <td></td> + <td> + <span class="code"> # the low performance version of stop_reading is required +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-659"></a>659</td> + <td></td> + <td></td> + <td> + <span class="code"> # on Windows due to a NT kernel bug that we can't use a blocking +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-660"></a>660</td> + <td></td> + <td></td> + <td> + <span class="code"> # stream for non-blocking (overlapped) calls, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-661"></a>661</td> + <td></td> + <td></td> + <td> + <span class="code"> # and a ReadFile call blocking on one thread +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-662"></a>662</td> + <td></td> + <td></td> + <td> + <span class="code"> # causes all other operations on that stream to lockup +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-663"></a>663</td> + <td></td> + <td></td> + <td> + <span class="code"> function stop_reading(stream::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-664"></a>664</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status == StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-665"></a>665</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusOpen +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-666"></a>666</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:uv_read_stop, Cint, (Ptr{Cvoid},), stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-667"></a>667</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-668"></a>668</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-669"></a>669</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-670"></a>670</td> + <td></td> + <td></td> + <td> + <span class="code">else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-671"></a>671</td> + <td></td> + <td></td> + <td> + <span class="code"> function stop_reading(stream::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-672"></a>672</td> + <td></td> + <td></td> + <td> + <span class="code"> if stream.status == StatusActive +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-673"></a>673</td> + <td></td> + <td></td> + <td> + <span class="code"> stream.status = StatusPaused +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-674"></a>674</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-675"></a>675</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-676"></a>676</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-677"></a>677</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-678"></a>678</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-679"></a>679</td> + <td></td> + <td></td> + <td> + <span class="code"># bulk read / write +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-680"></a>680</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-681"></a>681</td> + <td></td> + <td></td> + <td> + <span class="code">readbytes!(s::LibuvStream, a::Vector{UInt8}, nb = length(a)) = readbytes!(s, a, Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-682"></a>682</td> + <td></td> + <td></td> + <td> + <span class="code">function readbytes!(s::LibuvStream, a::Vector{UInt8}, nb::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-683"></a>683</td> + <td></td> + <td></td> + <td> + <span class="code"> sbuf = s.buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-684"></a>684</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert sbuf.seekable == false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-685"></a>685</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert sbuf.maxsize >= nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-686"></a>686</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-687"></a>687</td> + <td></td> + <td></td> + <td> + <span class="code"> if bytesavailable(sbuf) >= nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-688"></a>688</td> + <td></td> + <td></td> + <td> + <span class="code"> return readbytes!(sbuf, a, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-689"></a>689</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-690"></a>690</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-691"></a>691</td> + <td></td> + <td></td> + <td> + <span class="code"> if nb <= SZ_UNBUFFERED_IO # Under this limit we are OK with copying the array from the stream's buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-692"></a>692</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-693"></a>693</td> + <td></td> + <td></td> + <td> + <span class="code"> return readbytes!(sbuf, a, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-694"></a>694</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-695"></a>695</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-696"></a>696</td> + <td></td> + <td></td> + <td> + <span class="code"> stop_reading(s) # Just playing it safe, since we are going to switch buffers. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-697"></a>697</td> + <td></td> + <td></td> + <td> + <span class="code"> newbuf = PipeBuffer(a, maxsize = nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-698"></a>698</td> + <td></td> + <td></td> + <td> + <span class="code"> newbuf.size = 0 # reset the write pointer to the beginning +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-699"></a>699</td> + <td></td> + <td></td> + <td> + <span class="code"> s.buffer = newbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-700"></a>700</td> + <td></td> + <td></td> + <td> + <span class="code"> write(newbuf, sbuf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-701"></a>701</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s, Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-702"></a>702</td> + <td></td> + <td></td> + <td> + <span class="code"> compact(newbuf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-703"></a>703</td> + <td></td> + <td></td> + <td> + <span class="code"> return bytesavailable(newbuf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-704"></a>704</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-705"></a>705</td> + <td></td> + <td></td> + <td> + <span class="code"> s.buffer = sbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-706"></a>706</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(s.readnotify.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-707"></a>707</td> + <td></td> + <td></td> + <td> + <span class="code"> start_reading(s) # resume reading iff there are currently other read clients of the stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-708"></a>708</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-709"></a>709</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-710"></a>710</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-711"></a>711</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert false # unreachable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-712"></a>712</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-713"></a>713</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-714"></a>714</td> + <td></td> + <td></td> + <td> + <span class="code">function read(stream::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-715"></a>715</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(stream, typemax(Int)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-716"></a>716</td> + <td></td> + <td></td> + <td> + <span class="code"> return take!(stream.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-717"></a>717</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-718"></a>718</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-719"></a>719</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_read(s::LibuvStream, p::Ptr{UInt8}, nb::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-720"></a>720</td> + <td></td> + <td></td> + <td> + <span class="code"> sbuf = s.buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-721"></a>721</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert sbuf.seekable == false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-722"></a>722</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert sbuf.maxsize >= nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-723"></a>723</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-724"></a>724</td> + <td></td> + <td></td> + <td> + <span class="code"> if bytesavailable(sbuf) >= nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-725"></a>725</td> + <td></td> + <td></td> + <td> + <span class="code"> return unsafe_read(sbuf, p, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-726"></a>726</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-727"></a>727</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-728"></a>728</td> + <td></td> + <td></td> + <td> + <span class="code"> if nb <= SZ_UNBUFFERED_IO # Under this limit we are OK with copying the array from the stream's buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-729"></a>729</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s, Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-730"></a>730</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_read(sbuf, p, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-731"></a>731</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-732"></a>732</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-733"></a>733</td> + <td></td> + <td></td> + <td> + <span class="code"> stop_reading(s) # Just playing it safe, since we are going to switch buffers. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-734"></a>734</td> + <td></td> + <td></td> + <td> + <span class="code"> newbuf = PipeBuffer(unsafe_wrap(Array, p, nb), maxsize = Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-735"></a>735</td> + <td></td> + <td></td> + <td> + <span class="code"> newbuf.size = 0 # reset the write pointer to the beginning +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-736"></a>736</td> + <td></td> + <td></td> + <td> + <span class="code"> s.buffer = newbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-737"></a>737</td> + <td></td> + <td></td> + <td> + <span class="code"> write(newbuf, sbuf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-738"></a>738</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s, Int(nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-739"></a>739</td> + <td></td> + <td></td> + <td> + <span class="code"> nb == bytesavailable(newbuf) || throw(EOFError()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-740"></a>740</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-741"></a>741</td> + <td></td> + <td></td> + <td> + <span class="code"> s.buffer = sbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-742"></a>742</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isempty(s.readnotify.waitq) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-743"></a>743</td> + <td></td> + <td></td> + <td> + <span class="code"> start_reading(s) # resume reading iff there are currently other read clients of the stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-744"></a>744</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-745"></a>745</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-746"></a>746</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-747"></a>747</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-748"></a>748</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-749"></a>749</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-750"></a>750</td> + <td></td> + <td></td> + <td> + <span class="code">function read(this::LibuvStream, ::Type{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-751"></a>751</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(this, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-752"></a>752</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = this.buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-753"></a>753</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert buf.seekable == false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-754"></a>754</td> + <td></td> + <td></td> + <td> + <span class="code"> return read(buf, UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-755"></a>755</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-756"></a>756</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-757"></a>757</td> + <td></td> + <td></td> + <td> + <span class="code">function readavailable(this::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-758"></a>758</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(this, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-759"></a>759</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = this.buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-760"></a>760</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert buf.seekable == false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-761"></a>761</td> + <td></td> + <td></td> + <td> + <span class="code"> return take!(buf) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-762"></a>762</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-763"></a>763</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-764"></a>764</td> + <td></td> + <td></td> + <td> + <span class="code">function readuntil(this::LibuvStream, c::UInt8; keep::Bool=false) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-765"></a>765</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readbyte(this, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-766"></a>766</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = this.buffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-767"></a>767</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert buf.seekable == false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-768"></a>768</td> + <td></td> + <td></td> + <td> + <span class="code"> return readuntil(buf, c, keep=keep) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-769"></a>769</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-770"></a>770</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-771"></a>771</td> + <td></td> + <td></td> + <td> + <span class="code">uv_write(s::LibuvStream, p::Vector{UInt8}) = uv_write(s, pointer(p), UInt(sizeof(p))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-772"></a>772</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-773"></a>773</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-uv_write-773"></a> + 3 (7.14%) samples spent in uv_write<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + unsafe_write + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#Lstream-jl-9a841f596a6f3ffbe5b9-line.html-830">line 830</a><br /> + </div> + <span class="code">function uv_write(s::LibuvStream, p::Ptr{UInt8}, n::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-774"></a>774</td> + <td></td> + <td></td> + <td> + <span class="code"> uvw = uv_write_async(s, p, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-775"></a>775</td> + <td></td> + <td></td> + <td> + <span class="code"> ct = current_task() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-776"></a>776</td> + <td></td> + <td></td> + <td> + <span class="code"> preserve_handle(ct) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-777"></a>777</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-778"></a>778</td> + <td></td> + <td></td> + <td> + <span class="code"> # wait for the last chunk to complete (or error) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-779"></a>779</td> + <td></td> + <td></td> + <td> + <span class="code"> # assume that any errors would be sticky, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-780"></a>780</td> + <td></td> + <td></td> + <td> + <span class="code"> # (so we don't need to monitor the error status of the intermediate writes) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-781"></a>781</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_req_set_data(uvw, ct) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-782"></a>782</td> + <td></td> + <td>3 (7.14%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="event-jl-9f2b370029d9fd3c8bef-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-event-jl-wait-243">wait</a><br /> + </div> + <span class="code"> wait() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-783"></a>783</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-784"></a>784</td> + <td></td> + <td></td> + <td> + <span class="code"> if uv_req_data(uvw) != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-785"></a>785</td> + <td></td> + <td></td> + <td> + <span class="code"> # uvw is still alive, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-786"></a>786</td> + <td></td> + <td></td> + <td> + <span class="code"> # so make sure we won't get spurious notifications later +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-787"></a>787</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_req_set_data(uvw, C_NULL) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-788"></a>788</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-789"></a>789</td> + <td></td> + <td></td> + <td> + <span class="code"> # done with uvw +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-790"></a>790</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(uvw) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-791"></a>791</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-792"></a>792</td> + <td></td> + <td></td> + <td> + <span class="code"> unpreserve_handle(ct) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-793"></a>793</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-794"></a>794</td> + <td></td> + <td></td> + <td> + <span class="code"> return Int(n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-795"></a>795</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-796"></a>796</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-797"></a>797</td> + <td></td> + <td></td> + <td> + <span class="code"># helper function for uv_write that returns the uv_write_t struct for the write +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-798"></a>798</td> + <td></td> + <td></td> + <td> + <span class="code"># rather than waiting on it +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-799"></a>799</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_write_async(s::LibuvStream, p::Ptr{UInt8}, n::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-800"></a>800</td> + <td></td> + <td></td> + <td> + <span class="code"> check_open(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-801"></a>801</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-802"></a>802</td> + <td></td> + <td></td> + <td> + <span class="code"> uvw = Libc.malloc(_sizeof_uv_write) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-803"></a>803</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_req_set_data(uvw, C_NULL) # in case we get interrupted before arriving at the wait call +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-804"></a>804</td> + <td></td> + <td></td> + <td> + <span class="code"> nwrite = min(n, MAX_OS_WRITE) # split up the write into chunks the OS can handle. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-805"></a>805</td> + <td></td> + <td></td> + <td> + <span class="code"> # TODO: use writev, when that is added to uv-win +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-806"></a>806</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:jl_uv_write, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-807"></a>807</td> + <td></td> + <td></td> + <td> + <span class="code"> Int32, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-808"></a>808</td> + <td></td> + <td></td> + <td> + <span class="code"> (Ptr{Cvoid}, Ptr{Cvoid}, UInt, Ptr{Cvoid}, Ptr{Cvoid}), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-809"></a>809</td> + <td></td> + <td></td> + <td> + <span class="code"> s, p, nwrite, uvw, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-810"></a>810</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_jl_writecb_task::Ptr{Cvoid}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-811"></a>811</td> + <td></td> + <td></td> + <td> + <span class="code"> if err < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-812"></a>812</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(uvw) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-813"></a>813</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_error("write", err) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-814"></a>814</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-815"></a>815</td> + <td></td> + <td></td> + <td> + <span class="code"> n -= nwrite +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-816"></a>816</td> + <td></td> + <td></td> + <td> + <span class="code"> p += nwrite +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-817"></a>817</td> + <td></td> + <td></td> + <td> + <span class="code"> if n == 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-818"></a>818</td> + <td></td> + <td></td> + <td> + <span class="code"> return uvw +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-819"></a>819</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-820"></a>820</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-821"></a>821</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-822"></a>822</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-823"></a>823</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-824"></a>824</td> + <td></td> + <td></td> + <td> + <span class="code"># Optimized send +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-825"></a>825</td> + <td></td> + <td></td> + <td> + <span class="code"># - smaller writes are buffered, final uv write on flush or when buffer full +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-826"></a>826</td> + <td></td> + <td></td> + <td> + <span class="code"># - large isbits arrays are unbuffered and written directly +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-827"></a>827</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-828"></a>828</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-unsafe_write-828"></a> + 3 (7.14%) samples spent in unsafe_write<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + print + <a href="gcutils-jl-226c838c61f0891410cd-line.html#Lgcutils-jl-226c838c61f0891410cd-line.html-87">line 87</a><br /> + </div> + <span class="code">function unsafe_write(s::LibuvStream, p::Ptr{UInt8}, n::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-829"></a>829</td> + <td></td> + <td></td> + <td> + <span class="code"> if s.sendbuf === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-830"></a>830</td> + <td></td> + <td>3 (7.14%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-uv_write-773">uv_write</a><br /> + </div> + <span class="code"> return uv_write(s, p, UInt(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-831"></a>831</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-832"></a>832</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-833"></a>833</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = s.sendbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-834"></a>834</td> + <td></td> + <td></td> + <td> + <span class="code"> totb = bytesavailable(buf) + n +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-835"></a>835</td> + <td></td> + <td></td> + <td> + <span class="code"> if totb < buf.maxsize +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-836"></a>836</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = unsafe_write(buf, p, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-837"></a>837</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-838"></a>838</td> + <td></td> + <td></td> + <td> + <span class="code"> flush(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-839"></a>839</td> + <td></td> + <td></td> + <td> + <span class="code"> if n > buf.maxsize +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-840"></a>840</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = uv_write(s, p, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-841"></a>841</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-842"></a>842</td> + <td></td> + <td></td> + <td> + <span class="code"> nb = unsafe_write(buf, p, n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-843"></a>843</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-844"></a>844</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-845"></a>845</td> + <td></td> + <td></td> + <td> + <span class="code"> return nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-846"></a>846</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-847"></a>847</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-848"></a>848</td> + <td></td> + <td></td> + <td> + <span class="code">function flush(s::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-849"></a>849</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = s.sendbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-850"></a>850</td> + <td></td> + <td></td> + <td> + <span class="code"> if buf !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-851"></a>851</td> + <td></td> + <td></td> + <td> + <span class="code"> if bytesavailable(buf) > 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-852"></a>852</td> + <td></td> + <td></td> + <td> + <span class="code"> arr = take!(buf) # Array of UInt8s +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-853"></a>853</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_write(s, arr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-854"></a>854</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-855"></a>855</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-856"></a>856</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-857"></a>857</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_write(s, Ptr{UInt8}(Base.eventloop()), UInt(0)) # zero write from a random pointer to flush current queue +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-858"></a>858</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-859"></a>859</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-860"></a>860</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-861"></a>861</td> + <td></td> + <td></td> + <td> + <span class="code">buffer_writes(s::LibuvStream, bufsize) = (s.sendbuf=PipeBuffer(bufsize); s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-862"></a>862</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-863"></a>863</td> + <td></td> + <td></td> + <td> + <span class="code">## low-level calls to libuv ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-864"></a>864</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-865"></a>865</td> + <td></td> + <td></td> + <td> + <span class="code">function write(s::LibuvStream, b::UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-866"></a>866</td> + <td></td> + <td></td> + <td> + <span class="code"> buf = s.sendbuf +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-867"></a>867</td> + <td></td> + <td></td> + <td> + <span class="code"> if buf !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-868"></a>868</td> + <td></td> + <td></td> + <td> + <span class="code"> if bytesavailable(buf) + 1 < buf.maxsize +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-869"></a>869</td> + <td></td> + <td></td> + <td> + <span class="code"> return write(buf, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-870"></a>870</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-871"></a>871</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-872"></a>872</td> + <td></td> + <td></td> + <td> + <span class="code"> return write(s, Ref{UInt8}(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-873"></a>873</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-874"></a>874</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-875"></a>875</td> + <td></td> + <td></td> + <td> + <span class="code">function uv_writecb_task(req::Ptr{Cvoid}, status::Cint) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-876"></a>876</td> + <td></td> + <td></td> + <td> + <span class="code"> d = uv_req_data(req) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-877"></a>877</td> + <td></td> + <td></td> + <td> + <span class="code"> if d != C_NULL +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-878"></a>878</td> + <td></td> + <td></td> + <td> + <span class="code"> uv_req_set_data(req, C_NULL) # let the Task know we got the writecb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-879"></a>879</td> + <td></td> + <td></td> + <td> + <span class="code"> t = unsafe_pointer_to_objref(d)::Task +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-880"></a>880</td> + <td></td> + <td></td> + <td> + <span class="code"> if status < 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-881"></a>881</td> + <td></td> + <td></td> + <td> + <span class="code"> err = _UVError("write", status) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-882"></a>882</td> + <td></td> + <td></td> + <td> + <span class="code"> schedule(t, err, error=true) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-883"></a>883</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-884"></a>884</td> + <td></td> + <td></td> + <td> + <span class="code"> schedule(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-885"></a>885</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-886"></a>886</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-887"></a>887</td> + <td></td> + <td></td> + <td> + <span class="code"> # no owner for this req, safe to just free it +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-888"></a>888</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.free(req) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-889"></a>889</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-890"></a>890</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-891"></a>891</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-892"></a>892</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-893"></a>893</td> + <td></td> + <td></td> + <td> + <span class="code">_fd(x::IOStream) = RawFD(fd(x)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-894"></a>894</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-895"></a>895</td> + <td></td> + <td></td> + <td> + <span class="code">function _fd(x::Union{LibuvStream, LibuvServer}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-896"></a>896</td> + <td></td> + <td></td> + <td> + <span class="code"> fd = Ref{OS_HANDLE}(INVALID_OS_HANDLE) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-897"></a>897</td> + <td></td> + <td></td> + <td> + <span class="code"> if x.status != StatusUninit && x.status != StatusClosed +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-898"></a>898</td> + <td></td> + <td></td> + <td> + <span class="code"> err = ccall(:uv_fileno, Int32, (Ptr{Cvoid}, Ptr{OS_HANDLE}), x.handle, fd) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-899"></a>899</td> + <td></td> + <td></td> + <td> + <span class="code"> # handle errors by returning INVALID_OS_HANDLE +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-900"></a>900</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-901"></a>901</td> + <td></td> + <td></td> + <td> + <span class="code"> return fd[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-902"></a>902</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-903"></a>903</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-904"></a>904</td> + <td></td> + <td></td> + <td> + <span class="code">for (x, writable, unix_fd, c_symbol) in +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-905"></a>905</td> + <td></td> + <td></td> + <td> + <span class="code"> ((:stdin, false, 0, :jl_uv_stdin), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-906"></a>906</td> + <td></td> + <td></td> + <td> + <span class="code"> (:stdout, true, 1, :jl_uv_stdout), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-907"></a>907</td> + <td></td> + <td></td> + <td> + <span class="code"> (:stderr, true, 2, :jl_uv_stderr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-908"></a>908</td> + <td></td> + <td></td> + <td> + <span class="code"> f = Symbol("redirect_", lowercase(string(x))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-909"></a>909</td> + <td></td> + <td></td> + <td> + <span class="code"> _f = Symbol("_", f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-910"></a>910</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-911"></a>911</td> + <td></td> + <td></td> + <td> + <span class="code"> function ($_f)(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-912"></a>912</td> + <td></td> + <td></td> + <td> + <span class="code"> global $x +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-913"></a>913</td> + <td></td> + <td></td> + <td> + <span class="code"> posix_fd = _fd(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-914"></a>914</td> + <td></td> + <td></td> + <td> + <span class="code"> @static if Sys.iswindows() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-915"></a>915</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:SetStdHandle, stdcall, Int32, (Int32, OS_HANDLE), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-916"></a>916</td> + <td></td> + <td></td> + <td> + <span class="code"> $(-10 - unix_fd), Libc._get_osfhandle(posix_fd)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-917"></a>917</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-918"></a>918</td> + <td></td> + <td></td> + <td> + <span class="code"> dup(posix_fd, RawFD($unix_fd)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-919"></a>919</td> + <td></td> + <td></td> + <td> + <span class="code"> $x = stream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-920"></a>920</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-921"></a>921</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-922"></a>922</td> + <td></td> + <td></td> + <td> + <span class="code"> function ($f)(handle::Union{LibuvStream, IOStream}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-923"></a>923</td> + <td></td> + <td></td> + <td> + <span class="code"> $(_f)(handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-924"></a>924</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(cglobal($(Expr(:quote, c_symbol)), Ptr{Cvoid}), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-925"></a>925</td> + <td></td> + <td></td> + <td> + <span class="code"> handle.handle) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-926"></a>926</td> + <td></td> + <td></td> + <td> + <span class="code"> return handle +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-927"></a>927</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-928"></a>928</td> + <td></td> + <td></td> + <td> + <span class="code"> function ($f)() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-929"></a>929</td> + <td></td> + <td></td> + <td> + <span class="code"> p = link_pipe!(Pipe()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-930"></a>930</td> + <td></td> + <td></td> + <td> + <span class="code"> read, write = p.out, p.in +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-931"></a>931</td> + <td></td> + <td></td> + <td> + <span class="code"> ($f)($(writable ? :write : :read)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-932"></a>932</td> + <td></td> + <td></td> + <td> + <span class="code"> return (read, write) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-933"></a>933</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-934"></a>934</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-935"></a>935</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-936"></a>936</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-937"></a>937</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-938"></a>938</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stdout([stream]) -> (rd, wr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-939"></a>939</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-940"></a>940</td> + <td></td> + <td></td> + <td> + <span class="code">Create a pipe to which all C and Julia level [`stdout`](@ref) output +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-941"></a>941</td> + <td></td> + <td></td> + <td> + <span class="code">will be redirected. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-942"></a>942</td> + <td></td> + <td></td> + <td> + <span class="code">Returns a tuple `(rd, wr)` representing the pipe ends. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-943"></a>943</td> + <td></td> + <td></td> + <td> + <span class="code">Data written to [`stdout`](@ref) may now be read from the `rd` end of +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-944"></a>944</td> + <td></td> + <td></td> + <td> + <span class="code">the pipe. The `wr` end is given for convenience in case the old +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-945"></a>945</td> + <td></td> + <td></td> + <td> + <span class="code">[`stdout`](@ref) object was cached by the user and needs to be replaced +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-946"></a>946</td> + <td></td> + <td></td> + <td> + <span class="code">elsewhere. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-947"></a>947</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-948"></a>948</td> + <td></td> + <td></td> + <td> + <span class="code">If called with the optional `stream` argument, then returns `stream` itself. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-949"></a>949</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-950"></a>950</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-951"></a>951</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-952"></a>952</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-953"></a>953</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stdout +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-954"></a>954</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-955"></a>955</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-956"></a>956</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stderr([stream]) -> (rd, wr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-957"></a>957</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-958"></a>958</td> + <td></td> + <td></td> + <td> + <span class="code">Like [`redirect_stdout`](@ref), but for [`stderr`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-959"></a>959</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-960"></a>960</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-961"></a>961</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-962"></a>962</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-963"></a>963</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stderr +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-964"></a>964</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-965"></a>965</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-966"></a>966</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stdin([stream]) -> (rd, wr) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-967"></a>967</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-968"></a>968</td> + <td></td> + <td></td> + <td> + <span class="code">Like [`redirect_stdout`](@ref), but for [`stdin`](@ref). +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-969"></a>969</td> + <td></td> + <td></td> + <td> + <span class="code">Note that the order of the return tuple is still `(rd, wr)`, +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-970"></a>970</td> + <td></td> + <td></td> + <td> + <span class="code">i.e. data to be read from [`stdin`](@ref) may be written to `wr`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-971"></a>971</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-972"></a>972</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-973"></a>973</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-974"></a>974</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-975"></a>975</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stdin +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-976"></a>976</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-977"></a>977</td> + <td></td> + <td></td> + <td> + <span class="code">for (F,S) in ((:redirect_stdin, :stdin), (:redirect_stdout, :stdout), (:redirect_stderr, :stderr)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-978"></a>978</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval function $F(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-979"></a>979</td> + <td></td> + <td></td> + <td> + <span class="code"> STDOLD = $S +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-980"></a>980</td> + <td></td> + <td></td> + <td> + <span class="code"> local ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-981"></a>981</td> + <td></td> + <td></td> + <td> + <span class="code"> $F(stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-982"></a>982</td> + <td></td> + <td></td> + <td> + <span class="code"> try +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-983"></a>983</td> + <td></td> + <td></td> + <td> + <span class="code"> ret = f() +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-984"></a>984</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-985"></a>985</td> + <td></td> + <td></td> + <td> + <span class="code"> $F(STDOLD) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-986"></a>986</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-987"></a>987</td> + <td></td> + <td></td> + <td> + <span class="code"> ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-988"></a>988</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-989"></a>989</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-990"></a>990</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-991"></a>991</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-992"></a>992</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stdout(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-993"></a>993</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-994"></a>994</td> + <td></td> + <td></td> + <td> + <span class="code">Run the function `f` while redirecting [`stdout`](@ref) to `stream`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-995"></a>995</td> + <td></td> + <td></td> + <td> + <span class="code">Upon completion, [`stdout`](@ref) is restored to its prior setting. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-996"></a>996</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-997"></a>997</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-998"></a>998</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-999"></a>999</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1000"></a>1000</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stdout(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1001"></a>1001</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1002"></a>1002</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1003"></a>1003</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stderr(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1004"></a>1004</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1005"></a>1005</td> + <td></td> + <td></td> + <td> + <span class="code">Run the function `f` while redirecting [`stderr`](@ref) to `stream`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1006"></a>1006</td> + <td></td> + <td></td> + <td> + <span class="code">Upon completion, [`stderr`](@ref) is restored to its prior setting. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1007"></a>1007</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1008"></a>1008</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1009"></a>1009</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1010"></a>1010</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1011"></a>1011</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stderr(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1012"></a>1012</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1013"></a>1013</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1014"></a>1014</td> + <td></td> + <td></td> + <td> + <span class="code"> redirect_stdin(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1015"></a>1015</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1016"></a>1016</td> + <td></td> + <td></td> + <td> + <span class="code">Run the function `f` while redirecting [`stdin`](@ref) to `stream`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1017"></a>1017</td> + <td></td> + <td></td> + <td> + <span class="code">Upon completion, [`stdin`](@ref) is restored to its prior setting. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1018"></a>1018</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1019"></a>1019</td> + <td></td> + <td></td> + <td> + <span class="code">!!! note +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1020"></a>1020</td> + <td></td> + <td></td> + <td> + <span class="code"> `stream` must be a `TTY`, a `Pipe`, or a socket. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1021"></a>1021</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1022"></a>1022</td> + <td></td> + <td></td> + <td> + <span class="code">redirect_stdin(f::Function, stream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1023"></a>1023</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1024"></a>1024</td> + <td></td> + <td></td> + <td> + <span class="code">mark(x::LibuvStream) = mark(x.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1025"></a>1025</td> + <td></td> + <td></td> + <td> + <span class="code">unmark(x::LibuvStream) = unmark(x.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1026"></a>1026</td> + <td></td> + <td></td> + <td> + <span class="code">reset(x::LibuvStream) = reset(x.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1027"></a>1027</td> + <td></td> + <td></td> + <td> + <span class="code">ismarked(x::LibuvStream) = ismarked(x.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1028"></a>1028</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1029"></a>1029</td> + <td></td> + <td></td> + <td> + <span class="code">function peek(s::LibuvStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1030"></a>1030</td> + <td></td> + <td></td> + <td> + <span class="code"> mark(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1031"></a>1031</td> + <td></td> + <td></td> + <td> + <span class="code"> try read(s, UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1032"></a>1032</td> + <td></td> + <td></td> + <td> + <span class="code"> finally +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1033"></a>1033</td> + <td></td> + <td></td> + <td> + <span class="code"> reset(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1034"></a>1034</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1035"></a>1035</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1036"></a>1036</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1037"></a>1037</td> + <td></td> + <td></td> + <td> + <span class="code"># BufferStream's are non-OS streams, backed by a regular IOBuffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1038"></a>1038</td> + <td></td> + <td></td> + <td> + <span class="code">mutable struct BufferStream <: LibuvStream +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1039"></a>1039</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer::IOBuffer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1040"></a>1040</td> + <td></td> + <td></td> + <td> + <span class="code"> r_c::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1041"></a>1041</td> + <td></td> + <td></td> + <td> + <span class="code"> close_c::Condition +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1042"></a>1042</td> + <td></td> + <td></td> + <td> + <span class="code"> is_open::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1043"></a>1043</td> + <td></td> + <td></td> + <td> + <span class="code"> buffer_writes::Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1044"></a>1044</td> + <td></td> + <td></td> + <td> + <span class="code"> lock::ReentrantLock +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1045"></a>1045</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1046"></a>1046</td> + <td></td> + <td></td> + <td> + <span class="code"> BufferStream() = new(PipeBuffer(), Condition(), Condition(), true, false, ReentrantLock()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1047"></a>1047</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1048"></a>1048</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1049"></a>1049</td> + <td></td> + <td></td> + <td> + <span class="code">isopen(s::BufferStream) = s.is_open +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1050"></a>1050</td> + <td></td> + <td></td> + <td> + <span class="code">function close(s::BufferStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1051"></a>1051</td> + <td></td> + <td></td> + <td> + <span class="code"> s.is_open = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1052"></a>1052</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(s.r_c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1053"></a>1053</td> + <td></td> + <td></td> + <td> + <span class="code"> notify(s.close_c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1054"></a>1054</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1055"></a>1055</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1056"></a>1056</td> + <td></td> + <td></td> + <td> + <span class="code">uvfinalize(s::BufferStream) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1057"></a>1057</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1058"></a>1058</td> + <td></td> + <td></td> + <td> + <span class="code">read(s::BufferStream, ::Type{UInt8}) = (wait_readnb(s, 1); read(s.buffer, UInt8)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1059"></a>1059</td> + <td></td> + <td></td> + <td> + <span class="code">unsafe_read(s::BufferStream, a::Ptr{UInt8}, nb::UInt) = (wait_readnb(s, Int(nb)); unsafe_read(s.buffer, a, nb)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1060"></a>1060</td> + <td></td> + <td></td> + <td> + <span class="code">bytesavailable(s::BufferStream) = bytesavailable(s.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1061"></a>1061</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1062"></a>1062</td> + <td></td> + <td></td> + <td> + <span class="code">isreadable(s::BufferStream) = s.buffer.readable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1063"></a>1063</td> + <td></td> + <td></td> + <td> + <span class="code">iswritable(s::BufferStream) = s.buffer.writable +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1064"></a>1064</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1065"></a>1065</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readnb(s::BufferStream, nb::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1066"></a>1066</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(s) && bytesavailable(s.buffer) < nb +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1067"></a>1067</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(s.r_c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1068"></a>1068</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1069"></a>1069</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1070"></a>1070</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1071"></a>1071</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, s::BufferStream) = print(io,"BufferStream() bytes waiting:",bytesavailable(s.buffer),", isopen:", s.is_open) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1072"></a>1072</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1073"></a>1073</td> + <td></td> + <td></td> + <td> + <span class="code">function wait_readbyte(s::BufferStream, c::UInt8) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1074"></a>1074</td> + <td></td> + <td></td> + <td> + <span class="code"> while isopen(s) && !occursin(c, s.buffer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1075"></a>1075</td> + <td></td> + <td></td> + <td> + <span class="code"> wait(s.r_c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1076"></a>1076</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1077"></a>1077</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1078"></a>1078</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1079"></a>1079</td> + <td></td> + <td></td> + <td> + <span class="code">wait_close(s::BufferStream) = if isopen(s); wait(s.close_c); end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1080"></a>1080</td> + <td></td> + <td></td> + <td> + <span class="code">start_reading(s::BufferStream) = Int32(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1081"></a>1081</td> + <td></td> + <td></td> + <td> + <span class="code">stop_reading(s::BufferStream) = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1082"></a>1082</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1083"></a>1083</td> + <td></td> + <td></td> + <td> + <span class="code">write(s::BufferStream, b::UInt8) = write(s, Ref{UInt8}(b)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1084"></a>1084</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_write(s::BufferStream, p::Ptr{UInt8}, nb::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1085"></a>1085</td> + <td></td> + <td></td> + <td> + <span class="code"> rv = unsafe_write(s.buffer, p, nb) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1086"></a>1086</td> + <td></td> + <td></td> + <td> + <span class="code"> !(s.buffer_writes) && notify(s.r_c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1087"></a>1087</td> + <td></td> + <td></td> + <td> + <span class="code"> return rv +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1088"></a>1088</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1089"></a>1089</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1090"></a>1090</td> + <td></td> + <td></td> + <td> + <span class="code">function eof(s::BufferStream) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1091"></a>1091</td> + <td></td> + <td></td> + <td> + <span class="code"> wait_readnb(s, 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1092"></a>1092</td> + <td></td> + <td></td> + <td> + <span class="code"> return !isopen(s) && bytesavailable(s)<=0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1093"></a>1093</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1094"></a>1094</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1095"></a>1095</td> + <td></td> + <td></td> + <td> + <span class="code"># If buffer_writes is called, it will delay notifying waiters till a flush is called. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1096"></a>1096</td> + <td></td> + <td></td> + <td> + <span class="code">buffer_writes(s::BufferStream, bufsize=0) = (s.buffer_writes=true; s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstream-jl-9a841f596a6f3ffbe5b9-line.html-1097"></a>1097</td> + <td></td> + <td></td> + <td> + <span class="code">flush(s::BufferStream) = (notify(s.r_c); nothing) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/string-jl-d20bff96b5e2c46b112e-line.html b/profiling/statprof/string-jl-d20bff96b5e2c46b112e-line.html new file mode 100644 index 0000000000000000000000000000000000000000..de5a1356d4b6f2f2974024d58ef5556252f7f27c --- /dev/null +++ b/profiling/statprof/string-jl-d20bff96b5e2c46b112e-line.html @@ -0,0 +1,3564 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> StringIndexError(str, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">An error occurred when trying to access `str` at index `i` that is not valid. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">struct StringIndexError <: Exception +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> string::AbstractString +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> index::Integer +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code">@noinline string_index_err(s::AbstractString, i::Integer) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> throw(StringIndexError(s, Int(i))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">const ByteArray = Union{Vector{UInt8},Vector{Int8}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">@inline between(b::T, lo::T, hi::T) where {T<:Integer} = (lo ≤ b) & (b ≤ hi) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">## constructors and conversions ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"># String constructor docstring from boot.jl, workaround for #16730 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"># and the unavailability of @doc in boot.jl context. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> String(v::AbstractVector{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">Create a new `String` object from a byte vector `v` containing UTF-8 encoded +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">characters. If `v` is `Vector{UInt8}` it will be truncated to zero length and +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code">future modification of `v` cannot affect the contents of the resulting string. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code">To avoid truncation use `String(copy(v))`. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code">When possible, the memory of `v` will be used without copying when the `String` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">object is created. This is guaranteed to be the case for byte vectors returned +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">by [`take!`](@ref) on a writable [`IOBuffer`](@ref) and by calls to +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code">[`read(io, nb)`](@ref). This allows zero-copy conversion of I/O data to strings. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code">In other cases, `Vector{UInt8}` data may be copied, but `v` is truncated anyway +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code">to guarantee consistent behavior. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code">String(v::AbstractVector{UInt8}) = String(copyto!(StringVector(length(v)), v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-39"></a>39</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-Type-39"></a> + 1 (2.38%) samples spent in Type<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-124">line 124</a><br /> + </div> + <span class="code">String(v::Vector{UInt8}) = ccall(:jl_array_to_string, Ref{String}, (Any,), v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_string(p::Ptr{UInt8}, [length::Integer]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">Copy a string from the address of a C-style (NUL-terminated) string encoded as UTF-8. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">(The pointer can be safely freed afterwards.) If `length` is specified +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">(the length of the data in bytes), the string does not have to be NUL-terminated. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code">This function is labeled "unsafe" because it will crash if `p` is not +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">a valid memory address to data of the requested length. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_string(p::Union{Ptr{UInt8},Ptr{Int8}}, len::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> p == C_NULL && throw(ArgumentError("cannot convert NULL to string")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_pchar_to_string, Ref{String}, (Ptr{UInt8}, Int), p, len) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code">function unsafe_string(p::Union{Ptr{UInt8},Ptr{Int8}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> p == C_NULL && throw(ArgumentError("cannot convert NULL to string")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_cstr_to_string, Ref{String}, (Ptr{UInt8},), p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-60"></a>60</td> + <td>5 (11.90%)</td> + <td>5 (11.90%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60"></a> + 5 (11.90%) samples spent in _string_n<br /> + 5 (100.00%) (ex.), + 5 (100.00%) (incl.) + when called from + StringVector + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#Liobuffer-jl-0cfbb4403b3061764f48-line.html-31">line 31</a><br /> + </div> + <span class="code">_string_n(n::Integer) = ccall(:jl_alloc_string, Ref{String}, (Csize_t,), n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> String(s::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">Convert a string to a contiguous byte array representation encoded as UTF-8 bytes. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code">This representation is often appropriate for passing strings to C. +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">String(s::AbstractString) = print_to_string(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code">String(s::Symbol) = unsafe_string(unsafe_convert(Ptr{UInt8}, s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-71"></a>71</td> + <td>6 (14.29%)</td> + <td>6 (14.29%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71"></a> + 6 (14.29%) samples spent in StringVector<br /> + 6 (100.00%) (ex.), + 6 (100.00%) (incl.) + when called from + #IOBuffer#302 + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#Liobuffer-jl-0cfbb4403b3061764f48-line.html-114">line 114</a><br /> + </div> + <span class="code">unsafe_wrap(::Type{Vector{UInt8}}, s::String) = ccall(:jl_string_to_array, Ref{Vector{UInt8}}, (Any,), s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code">(::Type{Vector{UInt8}})(s::CodeUnits{UInt8,String}) = copyto!(Vector{UInt8}(undef, length(s)), s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">String(s::CodeUnits{UInt8,String}) = s.s +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code">## low-level functions ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">pointer(s::String) = unsafe_convert(Ptr{UInt8}, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">pointer(s::String, i::Integer) = pointer(s)+(i-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code">ncodeunits(s::String) = Core.sizeof(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">sizeof(s::String) = Core.sizeof(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code">codeunit(s::String) = UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function codeunit(s::String, i::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck checkbounds(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> GC.@preserve s unsafe_load(pointer(s, i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">## comparison ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">function cmp(a::String, b::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> al, bl = sizeof(a), sizeof(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> c = ccall(:memcmp, Int32, (Ptr{UInt8}, Ptr{UInt8}, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> a, b, min(al,bl)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> return c < 0 ? -1 : c > 0 ? +1 : cmp(al,bl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">function ==(a::String, b::String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> al = sizeof(a) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> al == sizeof(b) && 0 == ccall(:memcmp, Int32, (Ptr{UInt8}, Ptr{UInt8}, UInt), a, b, al) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::Type{String}) = "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">typemin(::String) = typemin(String) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">## thisind, nextind ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-110"></a>110</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110"></a> + 1 (2.38%) samples spent in lastindex<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + tostr_sizehint + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-107">line 107</a><br /> + </div> + <span class="code">thisind(s::String, i::Int) = _thisind_str(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"># s should be String or SubString{String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_thisind_str-113"></a> + 1 (2.38%) samples spent in _thisind_str<br /> + 1 (100.00%) (ex.), + 1 (100.00%) (incl.) + when called from + print_to_string + <a href="io-jl-f839edf29063078eece4-line.html#Lio-jl-f839edf29063078eece4-line.html-117">line 117</a><br /> + </div> + <span class="code">function _thisind_str(s, i::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-114"></a>114</td> + <td>1 (2.38%)</td> + <td>1 (2.38%)</td> + <td> + <span class="code"> i == 0 && return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> n = ncodeunits(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> i == n + 1 && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck between(i, 1, n) || throw(BoundsError(s, i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> (b & 0xc0 == 0x80) & (i-1 > 0) || return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i-1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> between(b, 0b11000000, 0b11110111) && return i-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> (b & 0xc0 == 0x80) & (i-2 > 0) || return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i-2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> between(b, 0b11100000, 0b11110111) && return i-2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> (b & 0xc0 == 0x80) & (i-3 > 0) || return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i-3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> between(b, 0b11110000, 0b11110111) && return i-3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">nextind(s::String, i::Int) = _nextind_str(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"># s should be String or SubString{String} +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code">function _nextind_str(s, i::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 0 && return 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> n = ncodeunits(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck between(i, 1, n) || throw(BoundsError(s, i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds l = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> (l < 0x80) | (0xf8 ≤ l) && return i+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> if l < 0xc0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> i′ = thisind(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> return i′ < i ? nextind(s, i′) : i+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> # first continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) > n && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 ≠ 0x80 && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (l < 0xe0) && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> # second continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 ≠ 0x80 && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (l < 0xf0) && return i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> # third continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> ifelse(b & 0xc0 ≠ 0x80, i, i+1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code">## checking UTF-8 & ACSII validity ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code">byte_string_classify(data::Vector{UInt8}) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:u8_isvalid, Int32, (Ptr{UInt8}, Int), data, length(data)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">byte_string_classify(s::String) = +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:u8_isvalid, Int32, (Ptr{UInt8}, Int), s, sizeof(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> # 0: neither valid ASCII nor UTF-8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> # 1: valid ASCII +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> # 2: valid UTF-8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">isvalid(::Type{String}, s::Union{Vector{UInt8},String}) = byte_string_classify(s) ≠ 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">isvalid(s::String) = isvalid(String, s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">is_valid_continuation(c) = c & 0xc0 == 0x80 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">## required core functionality ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">@propagate_inbounds function iterate(s::String, i::Int=firstindex(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> i > ncodeunits(s) && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> u = UInt32(b) << 24 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> between(b, 0x80, 0xf7) || return reinterpret(Char, u), i+1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> return next_continued(s, i, u) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">function next_continued(s::String, i::Int, u::UInt32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> u < 0xc0000000 && (i += 1; @goto ret) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code"> n = ncodeunits(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> # first continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) > n && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b) << 16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> # second continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (u < 0xe0000000) && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b) << 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> # third continuation byte +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (u < 0xf0000000) && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b); i += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">@label ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> return reinterpret(Char, u), i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">@propagate_inbounds function getindex(s::String, i::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> u = UInt32(b) << 24 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> between(b, 0x80, 0xf7) || return reinterpret(Char, u) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> return getindex_continued(s, i, u) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex_continued(s::String, i::Int, u::UInt32) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> if u < 0xc0000000 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> # called from `getindex` which checks bounds +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds isvalid(s, i) && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> string_index_err(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> n = ncodeunits(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) > n && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) # cont byte 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b) << 16 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (u < 0xe0000000) && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) # cont byte 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b) << 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> ((i += 1) > n) | (u < 0xf0000000) && @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) # cont byte 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> b & 0xc0 == 0x80 || @goto ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> u |= UInt32(b) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">@label ret +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code"> return reinterpret(Char, u) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">getindex(s::String, r::UnitRange{<:Integer}) = s[Int(first(r)):Int(last(r))] +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code">function getindex(s::String, r::UnitRange{Int}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(r) && return "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> i, j = first(r), last(r) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> checkbounds(s, r) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds isvalid(s, i) || string_index_err(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds isvalid(s, j) || string_index_err(s, j) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> j = nextind(s, j) - 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> n = j - i + 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> ss = _string_n(n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> p = pointer(ss) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> for k = 1:n +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p, codeunit(s, i + k - 1), k) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> return ss +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code">function length(s::String, i::Int, j::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> @boundscheck begin +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> 0 < i ≤ ncodeunits(s)+1 || throw(BoundsError(s, i)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> 0 ≤ j < ncodeunits(s)+1 || throw(BoundsError(s, j)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> j < i && return 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds i, k = thisind(s, i), i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> c = j - i + (i == k) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> length(s, i, j, c) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">length(s::String) = length(s, 1, ncodeunits(s), ncodeunits(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function length(s::String, i::Int, n::Int, c::Int) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> i < n || return c +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> @inbounds while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) ≤ n || return c +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> 0xc0 ≤ b ≤ 0xf7 && break +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> l = b +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) # cont byte 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> c -= (x = b & 0xc0 == 0x80) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> x & (l ≥ 0xe0) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) ≤ n || return c +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) # cont byte 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> c -= (x = b & 0xc0 == 0x80) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> x & (l ≥ 0xf0) || continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> (i += 1) ≤ n || return c +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> b = codeunit(s, i) # cont byte 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> c -= (b & 0xc0 == 0x80) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: delete or move to char.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">first_utf8_byte(c::Char) = (reinterpret(UInt32, c) >> 24) % UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code">## overload methods for efficiency ## +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">isvalid(s::String, i::Int) = checkbounds(Bool, s, i) && thisind(s, i) == i +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"># UTF-8 encoding length of a character +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code"># TODO: delete or move to char.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">codelen(c::Char) = 4 - (trailing_zeros(0xff000000 | reinterpret(UInt32, c)) >> 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> repeat(c::AbstractChar, r::Integer) -> String +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">Repeat a character `r` times. This can equivalently be accomplished by calling [`c^r`](@ref ^). +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"># Examples +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">```jldoctest +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">julia> repeat('A', 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">"AAA" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">``` +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">repeat(c::AbstractChar, r::Integer) = repeat(Char(c), r) # fallback +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code">function repeat(c::Char, r::Integer) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> r == 0 && return "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> r < 0 && throw(ArgumentError("can't repeat a character $r times")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> u = bswap(reinterpret(UInt32, c)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> n = 4 - (leading_zeros(u | 0xff) >> 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> s = _string_n(n*r) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> p = pointer(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> if n == 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:memset, Ptr{Cvoid}, (Ptr{UInt8}, Cint, Csize_t), p, u % UInt8, r) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif n == 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> p16 = reinterpret(Ptr{UInt16}, p) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:r +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p16, u % UInt16, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif n == 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> b1 = (u >> 0) % UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> b2 = (u >> 8) % UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> b3 = (u >> 16) % UInt8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 0:r-1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p, b1, 3i + 1) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p, b2, 3i + 2) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p, b3, 3i + 3) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif n == 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> p32 = reinterpret(Ptr{UInt32}, pointer(s)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:r +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> unsafe_store!(p32, u, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> return s +</span> + </td> + </tr> + + <tr> + <td><a name="Lstring-jl-d20bff96b5e2c46b112e-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/subs.html b/profiling/statprof/subs.html new file mode 100644 index 0000000000000000000000000000000000000000..b206c1d1225850995f82d5e2785fbbb9c6bec2b0 --- /dev/null +++ b/profiling/statprof/subs.html @@ -0,0 +1,476 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + <script src="sorttable.js"></script> + <title>StatProfilerHTML.jl: subroutine list</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table class="sortable"> + <caption>Subroutines, sorted by exclusive sample count</caption> + <tr> + <th class="sorttable_sorted">Exclusive</td> + <th>Inclusive</td> + <th>Subroutine</th> + </tr> + + <tr> + <td sorttable_customkey="6">6 (14.29%)</td> + <td sorttable_customkey="6">6 (14.29%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-StringVector-71">StringVector</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="5">5 (11.90%)</td> + <td sorttable_customkey="37">37 (88.10%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print_to_string-111">print_to_string</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="5">5 (11.90%)</td> + <td sorttable_customkey="5">5 (11.90%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_string_n-60">_string_n</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="3">3 (7.14%)</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="libuv-jl-530c66ad95b5a57763e9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-libuv-jl-process_events-98">process_events</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="2">2 (4.76%)</td> + <td sorttable_customkey="2">2 (4.76%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-53">+</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="2">2 (4.76%)</td> + <td sorttable_customkey="2">2 (4.76%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-div">div</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="15">15 (35.71%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-28">print</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="12">12 (28.57%)</td> + <td> + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-grisu-52">grisu</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="12">12 (28.57%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-IOBuffer-302-111">#IOBuffer#302</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="11">11 (26.19%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-fastshortest-105">fastshortest</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="8">8 (19.05%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-digitgen-64">digitgen</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-unsafe_write-401">unsafe_write</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="fastshortest-jl-253e248589e118f4dde7-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-fastshortest-jl-roundweed-34">roundweed</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-dividemodulointbignum-420">dividemodulointbignum!</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-54">*</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-_deleteend-823">_deleteend!</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="bignums-jl-e031ee9c77e42cd3aafb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-bignums-jl-compare-474">compare</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-ensureroom-293">ensureroom</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-442">>></a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-lastindex-110">lastindex</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-Type-39">Type</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="promotion-jl-fe649671ed190521a171-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-promotion-jl-425">==</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="string-jl-d20bff96b5e2c46b112e-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-string-jl-_thisind_str-113">_thisind_str</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-49"><</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="1">1 (2.38%)</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-427"><</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-exec_options-193">exec_options</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="client-jl-74fbd6bc37c8328be022-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-client-jl-_start-420">_start</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="loading-jl-267f08df202e5203e249-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-loading-jl-include_relative-1035">include_relative</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="sysimg-jl-58aafbf6293fe483e566-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-sysimg-jl-include-22">include</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="boot-jl-1c95b3ccecba8d7f1acb-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-boot-jl-include-317">include</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="test-jl-6f8538a27ff3da5824d9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-profiling-test-jl-f-7">f</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="40">40 (95.24%)</td> + <td> + <a href="Profile-jl-e79abb67faac09cf5e9b-line.html#S-buildworker-worker-package_linux64-build-usr-share-julia-stdlib-v1-0-Profile-src-Profile-jl-top-level-scope-25">top-level scope</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="37">37 (88.10%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-string-155">string</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="14">14 (33.33%)</td> + <td> + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-show-151">show</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="14">14 (33.33%)</td> + <td> + <a href="grisu-jl-fab39581eb10ad2e545a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-grisu-jl-_show-89">_show</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="12">12 (28.57%)</td> + <td> + <a href="nothing-0feca720e2c29dafb2c9-line.html#Snothing-Type">Type</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="5">5 (11.90%)</td> + <td> + <a href="iobuffer-jl-0cfbb4403b3061764f48-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-iobuffer-jl-StringVector-31">StringVector</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="coreio-jl-465d134c20f8b0bc664b-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-coreio-jl-print-2">print</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-print-165">print</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-uv_write-773">uv_write</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="stream-jl-9a841f596a6f3ffbe5b9-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-stream-jl-unsafe_write-828">unsafe_write</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="3">3 (7.14%)</td> + <td> + <a href="event-jl-9f2b370029d9fd3c8bef-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-event-jl-wait-243">wait</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="2">2 (4.76%)</td> + <td> + <a href="gcutils-jl-226c838c61f0891410cd-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-gcutils-jl-write-163">write</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-448">>></a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-tostr_sizehint-106">tostr_sizehint</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalize-48">normalize</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-803">+</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-165">print</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="array-jl-e331915c4fb281d94775-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-array-jl-resize-1011">resize!</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-binexp_cache-253">binexp_cache</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="int-jl-af434f8f2b4fe43f173a-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-int-jl-432">==</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-286">></a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="io-jl-7061b86fd468f75a7694-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-io-jl-unsafe_write-509">unsafe_write</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="operators-jl-714ade2c8745dd55a410-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-operators-jl-603">>></a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-print-166">print</a> + </td> + </tr> + + <tr> + <td sorttable_customkey="0">0</td> + <td sorttable_customkey="1">1 (2.38%)</td> + <td> + <a href="float-jl-2e7d768064d970d2b754-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-grisu-float-jl-normalizedbound-120">normalizedbound</a> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/sysimg-jl-58aafbf6293fe483e566-line.html b/profiling/statprof/sysimg-jl-58aafbf6293fe483e566-line.html new file mode 100644 index 0000000000000000000000000000000000000000..13ee57e176bf1a39cec477461ca54060a9553783 --- /dev/null +++ b/profiling/statprof/sysimg-jl-58aafbf6293fe483e566-line.html @@ -0,0 +1,5753 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">baremodule Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code">using Core.Intrinsics, Core.IR +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code">const is_primary_base_module = ccall(:jl_module_parent, Ref{Module}, (Any,), Base) === Core.Main +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code">ccall(:jl_set_istopmod, Cvoid, (Any, Bool), Base, is_primary_base_module) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"># Try to help prevent users from shooting them-selves in the foot +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code"># with ambiguities by defining a few common and critical operations +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"># (and these don't need the extra convert code) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code">getproperty(x::Module, f::Symbol) = getfield(x, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code">setproperty!(x::Module, f::Symbol, v) = setfield!(x, f, v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code">getproperty(x::Type, f::Symbol) = getfield(x, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code">setproperty!(x::Type, f::Symbol, v) = setfield!(x, f, v) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code">getproperty(Core.@nospecialize(x), f::Symbol) = getfield(x, f) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">setproperty!(x, f::Symbol, v) = setfield!(x, f, convert(fieldtype(typeof(x), f), v)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">function include_relative end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-sysimg-jl-include-22"></a> + 40 (95.24%) samples spent in include<br /> + 0 (ex.), + 40 (100.00%) (incl.) + when called from + exec_options + <a href="client-jl-74fbd6bc37c8328be022-line.html#Lclient-jl-74fbd6bc37c8328be022-line.html-266">line 266</a><br /> + </div> + <span class="code">function include(mod::Module, path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> local result +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> if INCLUDE_STATE === 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> result = _include1(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif INCLUDE_STATE === 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> result = _include(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif INCLUDE_STATE === 3 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-29"></a>29</td> + <td></td> + <td>40 (95.24%)</td> + <td> + <div class="callees"> + 40 (100.00%) + samples spent calling + <a href="loading-jl-267f08df202e5203e249-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-loading-jl-include_relative-1035">include_relative</a><br /> + </div> + <span class="code"> result = include_relative(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> result +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code">function include(path::AbstractString) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> local result +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-35"></a>35</td> + <td></td> + <td></td> + <td> + <span class="code"> if INCLUDE_STATE === 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> result = _include1(Base, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif INCLUDE_STATE === 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> result = _include(Base, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> # to help users avoid error (accidentally evaluating into Base), this is not allowed +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> error("Base.include(string) is discontinued, use `include(fname)` or `Base.include(@__MODULE__, fname)` instead.") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> result +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code">const _included_files = Array{Tuple{Module,String},1}() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code">function _include1(mod::Module, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.Compiler.push!(_included_files, (mod, ccall(:jl_prepend_cwd, Any, (Any,), path))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.include(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code">let SOURCE_PATH = "" +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> # simple, race-y TLS, relative include +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> global _include +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> function _include(mod::Module, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> prev = SOURCE_PATH +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> path = normpath(joinpath(dirname(prev), path)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(_included_files, (mod, abspath(path))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> SOURCE_PATH = path +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> result = Core.include(mod, path) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> SOURCE_PATH = prev +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> result +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code">INCLUDE_STATE = 1 # include = Core.include +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code">include("coreio.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code">eval(x) = Core.eval(Base, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code">eval(m::Module, x) = Core.eval(m, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code">VecElement{T}(arg) where {T} = VecElement{T}(convert(T, arg)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code">convert(::Type{T}, arg) where {T<:VecElement} = T(arg) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code">convert(::Type{T}, arg::T) where {T<:VecElement} = arg +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"># init core docsystem +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code">import Core: @doc, @__doc__, WrappedException +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">if isdefined(Core, :Compiler) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> import Core.Compiler.CoreDocs +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.atdoc!(CoreDocs.docm) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code">include("exports.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code">if false +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> # simple print definitions for debugging. enable these if something +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> # goes wrong during bootstrap before printing code is available. +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> # otherwise, they just just eventually get (noisily) overwritten later +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> global show, print, println +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> show(io::IO, x) = Core.show(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> print(io::IO, a...) = Core.print(io, a...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> println(io::IO, x...) = Core.println(io, x...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> time_ns() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code">Get the time in nanoseconds. The time corresponding to 0 is undefined, and wraps every 5.8 years. +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code">""" +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code">time_ns() = ccall(:jl_hrtime, UInt64, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code">start_base_include = time_ns() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code">## Load essential files and libraries +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code">include("essentials.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code">include("ctypes.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code">include("gcutils.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code">include("generator.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code">include("reflection.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code">include("options.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"># core operations & types +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code">include("promotion.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code">include("tuple.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code">include("pair.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code">include("traits.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code">include("range.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code">include("expr.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code">include("error.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"># core numeric operations & types +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code">include("bool.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code">include("number.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code">include("int.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code">include("operators.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code">include("pointer.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code">include("refvalue.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code">include("refpointer.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code">include("checked.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code">using .Checked +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"># vararg Symbol constructor +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code">Symbol(x...) = Symbol(string(x...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"># array structures +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code">include("indices.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code">include("array.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code">include("abstractarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code">include("subarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code">include("views.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"># ## dims-type-converting Array constructors for convenience +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"># type and dimensionality specified, accepting dims as series of Integers +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code">Vector{T}(::UndefInitializer, m::Integer) where {T} = Vector{T}(undef, Int(m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">Matrix{T}(::UndefInitializer, m::Integer, n::Integer) where {T} = Matrix{T}(undef, Int(m), Int(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::UndefInitializer, d::Vararg{Integer,N}) where {T,N} = Array{T,N}(undef, convert(Tuple{Vararg{Int}}, d)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code"># type but not dimensionality specified, accepting dims as series of Integers +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Integer) where {T} = Array{T,1}(undef, Int(m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Integer, n::Integer) where {T} = Array{T,2}(undef, Int(m), Int(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, m::Integer, n::Integer, o::Integer) where {T} = Array{T,3}(undef, Int(m), Int(n), Int(o)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, d::Integer...) where {T} = Array{T}(undef, convert(Tuple{Vararg{Int}}, d)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"># dimensionality but not type specified, accepting dims as series of Integers +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code">Vector(::UndefInitializer, m::Integer) = Vector{Any}(undef, Int(m)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code">Matrix(::UndefInitializer, m::Integer, n::Integer) = Matrix{Any}(undef, Int(m), Int(n)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"># Dimensions as a single tuple +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::UndefInitializer, d::NTuple{N,Integer}) where {T,N} = Array{T,N}(undef, convert(Tuple{Vararg{Int}}, d)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::UndefInitializer, d::NTuple{N,Integer}) where {T,N} = Array{T,N}(undef, convert(Tuple{Vararg{Int}}, d)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"># empty vector constructor +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code">Vector() = Vector{Any}(undef, 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"># Array constructors for nothing and missing +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"># type and dimensionality specified +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::Nothing, d...) where {T,N} = fill!(Array{T,N}(undef, d...), nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T,N}(::Missing, d...) where {T,N} = fill!(Array{T,N}(undef, d...), missing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"># type but not dimensionality specified +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::Nothing, d...) where {T} = fill!(Array{T}(undef, d...), nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code">Array{T}(::Missing, d...) where {T} = fill!(Array{T}(undef, d...), missing) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code">include("abstractdict.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code">include("iterators.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code">using .Iterators: zip, enumerate +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code">using .Iterators: Flatten, product # for generators +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">include("namedtuple.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code"># numeric operations +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code">include("hashing.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code">include("rounding.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code">using .Rounding +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code">include("float.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code">include("twiceprecision.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code">include("complex.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code">include("rational.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code">include("multinverses.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code">using .MultiplicativeInverses +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">include("abstractarraymath.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code">include("arraymath.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code"># define MIME"foo/bar" early so that we can overload 3-arg show +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code">struct MIME{mime} end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code">macro MIME_str(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> :(MIME{$(Expr(:quote, Symbol(s)))}) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"># fallback text/plain representation of any type: +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code">show(io::IO, ::MIME"text/plain", x) = show(io, x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"># SIMD loops +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code">include("simdloop.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code">using .SimdLoop +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"># map-reduce operators +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code">include("reduce.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code">## core structures +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code">include("reshapedarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code">include("reinterpretarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code">include("bitarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code">include("bitset.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code">if !isdefined(Core, :Compiler) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"> include("docs/core.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code"> Core.atdoc!(CoreDocs.docm) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"># Some type +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code">include("some.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code">include("dict.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code">include("abstractset.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code">include("set.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code">include("char.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code">include("strings/basic.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code">include("strings/string.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">include("strings/substring.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code"># Definition of StridedArray +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">StridedFastContiguousSubArray{T,N,A<:DenseArray} = FastContiguousSubArray{T,N,A} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code">StridedReinterpretArray{T,N,A<:Union{DenseArray,StridedFastContiguousSubArray}} = ReinterpretArray{T,N,S,A} where S +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code">StridedReshapedArray{T,N,A<:Union{DenseArray,StridedFastContiguousSubArray,StridedReinterpretArray}} = ReshapedArray{T,N,A} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code">StridedSubArray{T,N,A<:Union{DenseArray,StridedReshapedArray,StridedReinterpretArray}, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> I<:Tuple{Vararg{Union{RangeIndex, AbstractCartesianIndex}}}} = SubArray{T,N,A,I} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code">StridedArray{T,N} = Union{DenseArray{T,N}, StridedSubArray{T,N}, StridedReshapedArray{T,N}, StridedReinterpretArray{T,N}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code">StridedVector{T} = Union{DenseArray{T,1}, StridedSubArray{T,1}, StridedReshapedArray{T,1}, StridedReinterpretArray{T,1}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code">StridedMatrix{T} = Union{DenseArray{T,2}, StridedSubArray{T,2}, StridedReshapedArray{T,2}, StridedReinterpretArray{T,2}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">StridedVecOrMat{T} = Union{StridedVector{T}, StridedMatrix{T}} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code"># For OS specific stuff +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code">include(string((length(Core.ARGS)>=2 ? Core.ARGS[2] : ""), "build_h.jl")) # include($BUILDROOT/base/build_h.jl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code">include(string((length(Core.ARGS)>=2 ? Core.ARGS[2] : ""), "version_git.jl")) # include($BUILDROOT/base/version_git.jl) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code">include("osutils.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code">include("c.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"># Core I/O +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code">include("io.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code">include("iostream.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code">include("iobuffer.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"># strings & printing +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code">include("intfuncs.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code">include("strings/strings.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code">include("parse.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code">include("shell.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code">include("regex.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code">include("show.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">include("arrayshow.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"># multidimensional arrays +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code">include("cartesian.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code">using .Cartesian +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code">include("multidimensional.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code">include("permuteddimsarray.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code">using .PermutedDimsArrays +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code">include("broadcast.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code">using .Broadcast +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"># define the real ntuple functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function ntuple(f::F, ::Val{N}) where {F,N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> N::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code"> (N >= 0) || throw(ArgumentError(string("tuple length should be ≥0, got ", N))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> if @generated +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> quote +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> @nexprs $N i -> t_i = f(i) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> @ncall $N tuple t +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> Tuple(f(i) for i = 1:N) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code">@inline function fill_to_length(t::Tuple, val, ::Val{N}) where {N} +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> M = length(t) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> M > N && throw(ArgumentError("input tuple of length $M, requested $N")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> if @generated +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> quote +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> (t..., $(fill(:val, N-length(t.parameters))...)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> (t..., fill(val, N-M)...) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"># missing values +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code">include("missing.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"># version +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code">include("version.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"># system & environment +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code">include("sysinfo.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">include("libc.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code">using .Libc: getpid, gethostname, time +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">const DL_LOAD_PATH = String[] +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code">if Sys.isapple() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(DL_LOAD_PATH, "@loader_path/julia") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(DL_LOAD_PATH, "@loader_path") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code">include("env.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"># Scheduling +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code">include("libuv.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code">include("event.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code">include("task.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code">include("lock.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code">include("threads.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code">include("weakkeydict.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"># Logging +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code">include("logging.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code">using .CoreLogging +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"># functions defined in Random +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code">function rand end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code">function randn end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"># I/O +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code">include("stream.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code">include("filesystem.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code">using .Filesystem +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code">include("process.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code">include("grisu/grisu.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code">include("methodshow.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code">include("secretbuffer.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"># core math functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code">include("floatfuncs.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code">include("math.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code">using .Math +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code">const (√)=sqrt +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code">const (∛)=cbrt +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code">INCLUDE_STATE = 2 # include = _include (from lines above) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"># reduction along dims +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code">include("reducedim.jl") # macros in this file relies on string.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code">include("accumulate.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"># basic data structures +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code">include("ordering.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code">using .Order +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"># Combinatorics +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code">include("sort.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code">using .Sort +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"># Fast math +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code">include("fastmath.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code">using .FastMath +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code">function deepcopy_internal end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"># BigInts and BigFloats +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code">include("gmp.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code">using .GMP +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code">for T in [Signed, Integer, BigInt, Float32, Float64, Real, Complex, Rational] +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval flipsign(x::$T, ::Unsigned) = +x +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> @eval copysign(x::$T, ::Unsigned) = +x +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code">include("mpfr.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code">using .MPFR +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code">big(n::Integer) = convert(BigInt,n) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code">big(x::AbstractFloat) = convert(BigFloat,x) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code">big(q::Rational) = big(numerator(q))//big(denominator(q)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code">include("combinatorics.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"># more hashing definitions +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code">include("hashing2.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"># irrational mathematical constants +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code">include("irrationals.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code">include("mathconstants.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code">using .MathConstants: ℯ, π, pi +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"># (s)printf macros +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">include("printf.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"># import .Printf +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"># metaprogramming +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">include("meta.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"># enums +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code">include("Enums.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code">using .Enums +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"># concurrency and parallelism +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code">include("channels.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"># utilities +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code">include("deepcopy.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code">include("download.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code">include("summarysize.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code">include("errorshow.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code"># Stack frames and traces +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code">include("stacktraces.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">using .StackTraces +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code">include("initdefs.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"># worker threads +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code">include("threadcall.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"># code loading +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code">include("uuid.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code">include("loading.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"># misc useful functions & macros +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code">include("util.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code">include("asyncmap.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code">include("multimedia.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">using .Multimedia +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"># deprecated functions +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code">include("deprecated.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"># Some basic documentation +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code">include("docs/basedocs.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code">include("client.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"># Documentation -- should always be included last in sysimg. +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code">include("docs/Docs.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code">using .Docs +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code">if isdefined(Core, :Compiler) && is_primary_base_module +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> Docs.loaddocs(Core.Compiler.CoreDocs.DOCS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code">end_base_include = time_ns() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code">if is_primary_base_module +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code">function __init__() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> # try to ensuremake sure OpenBLAS does not set CPU affinity (#1070, #9639) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> if !haskey(ENV, "OPENBLAS_MAIN_FREE") && !haskey(ENV, "GOTOBLAS_MAIN_FREE") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> ENV["OPENBLAS_MAIN_FREE"] = "1" +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> # And try to prevent openblas from starting too many threads, unless/until specifically requested +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> if !haskey(ENV, "OPENBLAS_NUM_THREADS") && !haskey(ENV, "OMP_NUM_THREADS") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> cpu_threads = Sys.CPU_THREADS::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> if cpu_threads > 8 # always at most 8 +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> ENV["OPENBLAS_NUM_THREADS"] = "8" +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif haskey(ENV, "JULIA_CPU_THREADS") # or exactly as specified +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code"> ENV["OPENBLAS_NUM_THREADS"] = cpu_threads +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> end # otherwise, trust that openblas will pick CPU_THREADS anyways, without any intervention +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code"> # for the few uses of Libc.rand in Base: +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> Libc.srand() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> # Base library init +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> reinit_stdio() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> Multimedia.reinit_displays() # since Multimedia.displays uses stdout as fallback +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> # initialize loading +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> init_depot_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> init_load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code">INCLUDE_STATE = 3 # include = include_relative +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code">const tot_time_stdlib = RefValue(0.0) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code">end # baremodule Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code">using .Base +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"># Ensure this file is also tracked +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code">pushfirst!(Base._included_files, (@__MODULE__, joinpath(@__DIR__, "sysimg.jl"))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"># set up depot & load paths to be able to find stdlib packages +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code">@eval Base creating_sysimg = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code">Base.init_depot_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code">Base.init_load_path() +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code">if Base.is_primary_base_module +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"># load some stdlib packages but don't put their names in Main +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code">let +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> # Stdlibs manually sorted in top down order +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> stdlibs = [ +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> # No deps +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> :Base64, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> :CRC32c, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> :SHA, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> :FileWatching, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> :Unicode, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> :Mmap, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> :Serialization, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> :Libdl, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> :Markdown, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> :LibGit2, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> :Logging, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code"> :Sockets, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> :Printf, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> :Profile, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code"> :Dates, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> :DelimitedFiles, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"> :Random, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code"> :UUIDs, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> :Future, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> :LinearAlgebra, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> :SparseArrays, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> :SuiteSparse, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> :Distributed, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> :SharedArrays, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> :Pkg, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> :Test, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> :REPL, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> :Statistics, +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> ] +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> maxlen = maximum(textwidth.(string.(stdlibs))) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code"> print_time = (mod, t) -> (print(rpad(string(mod) * " ", maxlen + 3, "─")); Base.time_print(t * 10^9); println()) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> print_time(Base, (Base.end_base_include - Base.start_base_include) * 10^(-9)) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <span class="code"> Base._track_dependencies[] = true +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> Base.tot_time_stdlib[] = @elapsed for stdlib in stdlibs +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> tt = @elapsed Base.require(Base, stdlib) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> print_time(stdlib, tt) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> for dep in Base._require_dependencies +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> dep[3] == 0.0 && continue +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(Base._included_files, dep[1:2]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> empty!(Base._require_dependencies) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> Base._track_dependencies[] = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> print_time("Stdlibs total", Base.tot_time_stdlib[]) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"># Clear global state +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code">empty!(Core.ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code">empty!(Base.ARGS) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code">empty!(LOAD_PATH) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code">@eval Base creating_sysimg = false +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code">Base.init_load_path() # want to be able to find external packages in userimg.jl +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code">let +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code">tot_time_userimg = @elapsed (Base.isfile("userimg.jl") && Base.include(Main, "userimg.jl")) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code">tot_time_base = (Base.end_base_include - Base.start_base_include) * 10.0^(-9) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code">tot_time = tot_time_base + Base.tot_time_stdlib[] + tot_time_userimg +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code">println("Sysimage built. Summary:") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code">print("Total ─────── "); Base.time_print(tot_time * 10^9); print(" \n"); +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code">print("Base: ─────── "); Base.time_print(tot_time_base * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (tot_time_base / tot_time) * 100); println("%") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code">print("Stdlibs: ──── "); Base.time_print(Base.tot_time_stdlib[] * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (Base.tot_time_stdlib[] / tot_time) * 100); println("%") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code">if isfile("userimg.jl") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code">print("Userimg: ──── "); Base.time_print(tot_time_userimg * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (tot_time_userimg / tot_time) * 100); println("%") +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code">empty!(LOAD_PATH) +</span> + </td> + </tr> + + <tr> + <td><a name="Lsysimg-jl-58aafbf6293fe483e566-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code">empty!(DEPOT_PATH) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/test-jl-6f8538a27ff3da5824d9-line.html b/profiling/statprof/test-jl-6f8538a27ff3da5824d9-line.html new file mode 100644 index 0000000000000000000000000000000000000000..d8e9ad6d45536184b584e1322d084b8ce0294ce4 --- /dev/null +++ b/profiling/statprof/test-jl-6f8538a27ff3da5824d9-line.html @@ -0,0 +1,318 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on tor 10 okt 2019 11:38:33</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code">using Profile +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code">using BenchmarkTools +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">using Random +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code">using StatProfilerHTML +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">function f() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-profiling-test-jl-f-7"></a> + 40 (95.24%) samples spent in f<br /> + 0 (ex.), + 40 (100.00%) (incl.) + when called from + top-level scope + <a href="Profile-jl-e79abb67faac09cf5e9b-line.html#LProfile-jl-e79abb67faac09cf5e9b-line.html-25">line 25</a><br /> + </div> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> lst = rand(50000) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> for i in lst +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-11"></a>11</td> + <td></td> + <td>37 (88.10%)</td> + <td> + <div class="callees"> + 37 (100.00%) + samples spent calling + <a href="io-jl-f839edf29063078eece4-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-strings-io-jl-string-155">string</a><br /> + </div> + <span class="code"> s = "List entry $(i)\r" # The \r makes it so the terminal isn't filled +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> if i > 0.99 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-14"></a>14</td> + <td></td> + <td>3 (7.14%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="coreio-jl-465d134c20f8b0bc664b-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-coreio-jl-print-2">print</a><br /> + </div> + <span class="code"> print(s) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-15"></a>15</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code">@profile f() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code">Profile.print() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code">statprofilehtml() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code">f() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code">@time f() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code">x = @benchmark f() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code">println() +</span> + </td> + </tr> + + <tr> + <td><a name="Ltest-jl-6f8538a27ff3da5824d9-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code">println(x) +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/typeinfer-jl-14b2448d998dfdb61460-line.html b/profiling/statprof/typeinfer-jl-14b2448d998dfdb61460-line.html new file mode 100644 index 0000000000000000000000000000000000000000..fe48f50bc387e95043a989fdd35dc5e4a8813594 --- /dev/null +++ b/profiling/statprof/typeinfer-jl-14b2448d998dfdb61460-line.html @@ -0,0 +1,6551 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" type="text/css" href="statprofiler.css"> + + <title>StatProfilerHTML.jl: /home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./compiler/typeinfer.jl</title> + </head> + <body> +<div class="report-header"> + <div class="backlink"><a href="index.html">Report index</a></div> + <div class="report-title">StatProfilerHTML.jl report</div> + <div class="generated-on">Generated on ons 9 okt 2019 08:41:28</div> +</div> + + <div id="body-content"> + <table> + <caption>File source code</caption> + <tr> + <th>Line</td> + <th>Exclusive</th> + <th>Inclusive</th> + <th>Code</th> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-1"></a>1</td> + <td></td> + <td></td> + <td> + <span class="code"># This file is a part of Julia. License is MIT: https://julialang.org/license +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-2"></a>2</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-3"></a>3</td> + <td></td> + <td></td> + <td> + <span class="code">const COMPILER_TEMP_SYM = Symbol("#temp#") +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-4"></a>4</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-5"></a>5</td> + <td></td> + <td></td> + <td> + <span class="code"># build (and start inferring) the inference frame for the linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-6"></a>6</td> + <td></td> + <td></td> + <td> + <span class="code">function typeinf(result::InferenceResult, cached::Bool, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-7"></a>7</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(result, cached, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-8"></a>8</td> + <td></td> + <td></td> + <td> + <span class="code"> frame === nothing && return false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-9"></a>9</td> + <td></td> + <td></td> + <td> + <span class="code"> cached && (result.linfo.inInference = true) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-10"></a>10</td> + <td></td> + <td></td> + <td> + <span class="code"> return typeinf(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-11"></a>11</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-12"></a>12</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-13"></a>13</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf-13"></a> + 3 (8.11%) samples spent in typeinf<br /> + 0 (ex.), + 2 (66.67%) (incl.) + when called from + abstract_call_method_with_const_args + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#Labstractinterpretation-jl-35ae29f448859d864444-line.html-216">line 216</a><br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + typeinf_ext + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#Ltypeinfer-jl-14b2448d998dfdb61460-line.html-574">line 574</a><br /> + </div> + <span class="code">function typeinf(frame::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-14"></a>14</td> + <td></td> + <td></td> + <td> + <span class="code"> cached = frame.cached +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-15"></a>15</td> + <td></td> + <td>5 (13.51%)</td> + <td> + <div class="callees"> + 2 (40.00%) + samples spent calling + <a href="abstractinterpretation-jl-35ae29f448859d864444-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-abstractinterpretation-jl-typeinf_nocycle-1224">typeinf_nocycle</a><br /> + </div> + <span class="code"> typeinf_nocycle(frame) || return false # frame is now part of a higher cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-16"></a>16</td> + <td></td> + <td></td> + <td> + <span class="code"> # with no active ip's, frame is done +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-17"></a>17</td> + <td></td> + <td></td> + <td> + <span class="code"> frames = frame.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-18"></a>18</td> + <td></td> + <td></td> + <td> + <span class="code"> isempty(frames) && push!(frames, frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-19"></a>19</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frames +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-20"></a>20</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert !(caller.dont_work_on_me) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-21"></a>21</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.dont_work_on_me = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-22"></a>22</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-23"></a>23</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frames +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-24"></a>24</td> + <td></td> + <td></td> + <td> + <span class="code"> finish(caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-25"></a>25</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-26"></a>26</td> + <td></td> + <td></td> + <td> + <span class="code"> # collect results for the new expanded frame +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-27"></a>27</td> + <td></td> + <td></td> + <td> + <span class="code"> results = InferenceResult[ frames[i].result for i in 1:length(frames) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-28"></a>28</td> + <td></td> + <td></td> + <td> + <span class="code"> # empty!(frames) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-29"></a>29</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid = frame.min_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-30"></a>30</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid = frame.max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-31"></a>31</td> + <td></td> + <td></td> + <td> + <span class="code"> if cached || frame.parent !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-32"></a>32</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in results +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-33"></a>33</td> + <td></td> + <td></td> + <td> + <span class="code"> opt = caller.src +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-34"></a>34</td> + <td></td> + <td></td> + <td> + <span class="code"> if opt isa OptimizationState +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-35"></a>35</td> + <td></td> + <td>1 (2.70%)</td> + <td> + <div class="callees"> + 1 (100.00%) + samples spent calling + <a href="optimize-jl-9a25bbc7af72ab9ad4ff-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-optimize-jl-optimize-163">optimize</a><br /> + </div> + <span class="code"> optimize(opt, caller.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-36"></a>36</td> + <td></td> + <td></td> + <td> + <span class="code"> finish(opt.src) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-37"></a>37</td> + <td></td> + <td></td> + <td> + <span class="code"> # finish updating the result struct +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-38"></a>38</td> + <td></td> + <td></td> + <td> + <span class="code"> validate_code_in_debug_mode(opt.linfo, opt.src, "optimized") +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-39"></a>39</td> + <td></td> + <td></td> + <td> + <span class="code"> if opt.const_api +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-40"></a>40</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.result isa Const +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-41"></a>41</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.src = caller.result +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-42"></a>42</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-43"></a>43</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert isconstType(caller.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-44"></a>44</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.src = Const(caller.result.parameters[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-45"></a>45</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-46"></a>46</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif opt.src.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-47"></a>47</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.src = opt.src::CodeInfo # stash a copy of the code (for inlining) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-48"></a>48</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-49"></a>49</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.src = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-50"></a>50</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-51"></a>51</td> + <td></td> + <td></td> + <td> + <span class="code"> if min_valid < opt.min_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-52"></a>52</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid = opt.min_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-53"></a>53</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-54"></a>54</td> + <td></td> + <td></td> + <td> + <span class="code"> if max_valid > opt.max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-55"></a>55</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid = opt.max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-56"></a>56</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-57"></a>57</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-58"></a>58</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-59"></a>59</td> + <td></td> + <td></td> + <td> + <span class="code"> if cached +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-60"></a>60</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in results +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-61"></a>61</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_result(caller, min_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-62"></a>62</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-63"></a>63</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-64"></a>64</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-65"></a>65</td> + <td></td> + <td></td> + <td> + <span class="code"> # if we aren't cached, we don't need this edge +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-66"></a>66</td> + <td></td> + <td></td> + <td> + <span class="code"> # but our caller might, so let's just make it anyways +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-67"></a>67</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frames +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-68"></a>68</td> + <td></td> + <td></td> + <td> + <span class="code"> finalize_backedges(caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-69"></a>69</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-70"></a>70</td> + <td></td> + <td></td> + <td> + <span class="code"> if max_valid == typemax(UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-71"></a>71</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frames +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-72"></a>72</td> + <td></td> + <td></td> + <td> + <span class="code"> store_backedges(caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-73"></a>73</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-74"></a>74</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-75"></a>75</td> + <td></td> + <td></td> + <td> + <span class="code"> return true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-76"></a>76</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-77"></a>77</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-78"></a>78</td> + <td></td> + <td></td> + <td> + <span class="code"># inference completed on `me` +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-79"></a>79</td> + <td></td> + <td></td> + <td> + <span class="code"># update the MethodInstance and notify the edges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-80"></a>80</td> + <td></td> + <td></td> + <td> + <span class="code">function cache_result(result::InferenceResult, min_valid::UInt, max_valid::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-81"></a>81</td> + <td></td> + <td></td> + <td> + <span class="code"> def = result.linfo.def +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-82"></a>82</td> + <td></td> + <td></td> + <td> + <span class="code"> toplevel = !isa(result.linfo.def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-83"></a>83</td> + <td></td> + <td></td> + <td> + <span class="code"> if toplevel +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-84"></a>84</td> + <td></td> + <td></td> + <td> + <span class="code"> min_valid = UInt(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-85"></a>85</td> + <td></td> + <td></td> + <td> + <span class="code"> max_valid = UInt(0) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-86"></a>86</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-87"></a>87</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-88"></a>88</td> + <td></td> + <td></td> + <td> + <span class="code"> # check if the existing linfo metadata is also sufficient to describe the current inference result +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-89"></a>89</td> + <td></td> + <td></td> + <td> + <span class="code"> # to decide if it is worth caching it again (which would also clear any generated code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-90"></a>90</td> + <td></td> + <td></td> + <td> + <span class="code"> already_inferred = !result.linfo.inInference +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-91"></a>91</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(result.linfo, :inferred) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-92"></a>92</td> + <td></td> + <td></td> + <td> + <span class="code"> inf = result.linfo.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-93"></a>93</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(inf, CodeInfo) || (inf::CodeInfo).inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-94"></a>94</td> + <td></td> + <td></td> + <td> + <span class="code"> if min_world(result.linfo) == min_valid && max_world(result.linfo) == max_valid +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-95"></a>95</td> + <td></td> + <td></td> + <td> + <span class="code"> already_inferred = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-96"></a>96</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-97"></a>97</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-98"></a>98</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-99"></a>99</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-100"></a>100</td> + <td></td> + <td></td> + <td> + <span class="code"> # don't store inferred code if we've decided to interpret this function +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-101"></a>101</td> + <td></td> + <td></td> + <td> + <span class="code"> if !already_inferred && invoke_api(result.linfo) != 4 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-102"></a>102</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_result = result.src +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-103"></a>103</td> + <td></td> + <td></td> + <td> + <span class="code"> if inferred_result isa Const +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-104"></a>104</td> + <td></td> + <td></td> + <td> + <span class="code"> # use constant calling convention +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-105"></a>105</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_const = (result.src::Const).val +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-106"></a>106</td> + <td></td> + <td></td> + <td> + <span class="code"> const_flags = 0x3 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-107"></a>107</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-108"></a>108</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(result.result, Const) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-109"></a>109</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_const = (result.result::Const).val +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-110"></a>110</td> + <td></td> + <td></td> + <td> + <span class="code"> const_flags = 0x2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-111"></a>111</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isconstType(result.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-112"></a>112</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_const = result.result.parameters[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-113"></a>113</td> + <td></td> + <td></td> + <td> + <span class="code"> const_flags = 0x2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-114"></a>114</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-115"></a>115</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_const = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-116"></a>116</td> + <td></td> + <td></td> + <td> + <span class="code"> const_flags = 0x00 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-117"></a>117</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-118"></a>118</td> + <td></td> + <td></td> + <td> + <span class="code"> if !toplevel && inferred_result isa CodeInfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-119"></a>119</td> + <td></td> + <td></td> + <td> + <span class="code"> cache_the_tree = result.src.inferred && +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-120"></a>120</td> + <td></td> + <td></td> + <td> + <span class="code"> (result.src.inlineable || +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-121"></a>121</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_isa_compileable_sig, Int32, (Any, Any), result.linfo.specTypes, def) != 0) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-122"></a>122</td> + <td></td> + <td></td> + <td> + <span class="code"> if cache_the_tree +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-123"></a>123</td> + <td></td> + <td></td> + <td> + <span class="code"> # compress code for non-toplevel thunks +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-124"></a>124</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_result = ccall(:jl_compress_ast, Any, (Any, Any), def, inferred_result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-125"></a>125</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-126"></a>126</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_result = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-127"></a>127</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-128"></a>128</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-129"></a>129</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-130"></a>130</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(inferred_result, Union{CodeInfo, Vector{UInt8}}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-131"></a>131</td> + <td></td> + <td></td> + <td> + <span class="code"> inferred_result = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-132"></a>132</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-133"></a>133</td> + <td></td> + <td></td> + <td> + <span class="code"> cache = ccall(:jl_set_method_inferred, Ref{MethodInstance}, (Any, Any, Any, Any, Int32, UInt, UInt), +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-134"></a>134</td> + <td></td> + <td></td> + <td> + <span class="code"> result.linfo, widenconst(result.result), inferred_const, inferred_result, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-135"></a>135</td> + <td></td> + <td></td> + <td> + <span class="code"> const_flags, min_valid, max_valid) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-136"></a>136</td> + <td></td> + <td></td> + <td> + <span class="code"> if cache !== result.linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-137"></a>137</td> + <td></td> + <td></td> + <td> + <span class="code"> result.linfo.inInference = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-138"></a>138</td> + <td></td> + <td></td> + <td> + <span class="code"> result.linfo = cache +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-139"></a>139</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-140"></a>140</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-141"></a>141</td> + <td></td> + <td></td> + <td> + <span class="code"> result.linfo.inInference = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-142"></a>142</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-143"></a>143</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-144"></a>144</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-145"></a>145</td> + <td></td> + <td></td> + <td> + <span class="code">function finish(me::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-146"></a>146</td> + <td></td> + <td></td> + <td> + <span class="code"> # prepare to run optimization passes on fulltree +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-147"></a>147</td> + <td></td> + <td></td> + <td> + <span class="code"> if me.limited && me.cached && me.parent !== nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-148"></a>148</td> + <td></td> + <td></td> + <td> + <span class="code"> # a top parent will be cached still, but not this intermediate work +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-149"></a>149</td> + <td></td> + <td></td> + <td> + <span class="code"> # we can throw everything else away now +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-150"></a>150</td> + <td></td> + <td></td> + <td> + <span class="code"> me.cached = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-151"></a>151</td> + <td></td> + <td></td> + <td> + <span class="code"> me.linfo.inInference = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-152"></a>152</td> + <td></td> + <td></td> + <td> + <span class="code"> me.src.inlineable = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-153"></a>153</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-154"></a>154</td> + <td></td> + <td></td> + <td> + <span class="code"> # annotate fulltree with type information +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-155"></a>155</td> + <td></td> + <td></td> + <td> + <span class="code"> type_annotate!(me) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-156"></a>156</td> + <td></td> + <td></td> + <td> + <span class="code"> run_optimizer = (me.cached || me.parent !== nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-157"></a>157</td> + <td></td> + <td></td> + <td> + <span class="code"> if run_optimizer +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-158"></a>158</td> + <td></td> + <td></td> + <td> + <span class="code"> # construct the optimizer for later use, if we're building this IR to cache it +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-159"></a>159</td> + <td></td> + <td></td> + <td> + <span class="code"> # (otherwise, we'll run the optimization passes later, outside of inference) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-160"></a>160</td> + <td></td> + <td></td> + <td> + <span class="code"> opt = OptimizationState(me) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-161"></a>161</td> + <td></td> + <td></td> + <td> + <span class="code"> me.result.src = opt +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-162"></a>162</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-163"></a>163</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-164"></a>164</td> + <td></td> + <td></td> + <td> + <span class="code"> me.result.result = me.bestguess +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-165"></a>165</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-166"></a>166</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-167"></a>167</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-168"></a>168</td> + <td></td> + <td></td> + <td> + <span class="code">function finish(src::CodeInfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-169"></a>169</td> + <td></td> + <td></td> + <td> + <span class="code"> # convert all type information into the form consumed by the cache for inlining and code-generation +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-170"></a>170</td> + <td></td> + <td></td> + <td> + <span class="code"> widen_all_consts!(src) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-171"></a>171</td> + <td></td> + <td></td> + <td> + <span class="code"> src.inferred = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-172"></a>172</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-173"></a>173</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-174"></a>174</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-175"></a>175</td> + <td></td> + <td></td> + <td> + <span class="code">function finalize_backedges(me::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-176"></a>176</td> + <td></td> + <td></td> + <td> + <span class="code"> # update all of the (cycle) callers with real backedges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-177"></a>177</td> + <td></td> + <td></td> + <td> + <span class="code"> # by traversing the temporary list of backedges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-178"></a>178</td> + <td></td> + <td></td> + <td> + <span class="code"> for (i, _) in me.cycle_backedges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-179"></a>179</td> + <td></td> + <td></td> + <td> + <span class="code"> add_backedge!(me.linfo, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-180"></a>180</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-181"></a>181</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-182"></a>182</td> + <td></td> + <td></td> + <td> + <span class="code"> # finalize and record the linfo result +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-183"></a>183</td> + <td></td> + <td></td> + <td> + <span class="code"> me.inferred = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-184"></a>184</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-185"></a>185</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-186"></a>186</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-187"></a>187</td> + <td></td> + <td></td> + <td> + <span class="code"># add the real backedges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-188"></a>188</td> + <td></td> + <td></td> + <td> + <span class="code">function store_backedges(frame::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-189"></a>189</td> + <td></td> + <td></td> + <td> + <span class="code"> toplevel = !isa(frame.linfo.def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-190"></a>190</td> + <td></td> + <td></td> + <td> + <span class="code"> if !toplevel && (frame.cached || frame.parent !== nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-191"></a>191</td> + <td></td> + <td></td> + <td> + <span class="code"> caller = frame.result.linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-192"></a>192</td> + <td></td> + <td></td> + <td> + <span class="code"> for edges in frame.stmt_edges +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-193"></a>193</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-194"></a>194</td> + <td></td> + <td></td> + <td> + <span class="code"> while i <= length(edges) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-195"></a>195</td> + <td></td> + <td></td> + <td> + <span class="code"> to = edges[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-196"></a>196</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(to, MethodInstance) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-197"></a>197</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_method_instance_add_backedge, Cvoid, (Any, Any), to, caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-198"></a>198</td> + <td></td> + <td></td> + <td> + <span class="code"> i += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-199"></a>199</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-200"></a>200</td> + <td></td> + <td></td> + <td> + <span class="code"> typeassert(to, Core.MethodTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-201"></a>201</td> + <td></td> + <td></td> + <td> + <span class="code"> typ = edges[i + 1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-202"></a>202</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_method_table_add_backedge, Cvoid, (Any, Any, Any), to, typ, caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-203"></a>203</td> + <td></td> + <td></td> + <td> + <span class="code"> i += 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-204"></a>204</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-205"></a>205</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-206"></a>206</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-207"></a>207</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-208"></a>208</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-209"></a>209</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-210"></a>210</td> + <td></td> + <td></td> + <td> + <span class="code"># widen all Const elements in type annotations +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-211"></a>211</td> + <td></td> + <td></td> + <td> + <span class="code">function widen_all_consts!(src::CodeInfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-212"></a>212</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(src.ssavaluetypes) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-213"></a>213</td> + <td></td> + <td></td> + <td> + <span class="code"> src.ssavaluetypes[i] = widenconst(src.ssavaluetypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-214"></a>214</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-215"></a>215</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-216"></a>216</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(src.code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-217"></a>217</td> + <td></td> + <td></td> + <td> + <span class="code"> x = src.code[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-218"></a>218</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(x, PiNode) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-219"></a>219</td> + <td></td> + <td></td> + <td> + <span class="code"> src.code[i] = PiNode(x.val, widenconst(x.typ)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-220"></a>220</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-221"></a>221</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-222"></a>222</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-223"></a>223</td> + <td></td> + <td></td> + <td> + <span class="code"> return src +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-224"></a>224</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-225"></a>225</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-226"></a>226</td> + <td></td> + <td></td> + <td> + <span class="code">maybe_widen_conditional(@nospecialize vt) = vt +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-227"></a>227</td> + <td></td> + <td></td> + <td> + <span class="code">function maybe_widen_conditional(vt::Conditional) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-228"></a>228</td> + <td></td> + <td></td> + <td> + <span class="code"> if vt.vtype === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-229"></a>229</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(false) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-230"></a>230</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif vt.elsetype === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-231"></a>231</td> + <td></td> + <td></td> + <td> + <span class="code"> return Const(true) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-232"></a>232</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-233"></a>233</td> + <td></td> + <td></td> + <td> + <span class="code"> return Bool +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-234"></a>234</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-235"></a>235</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-236"></a>236</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-237"></a>237</td> + <td></td> + <td></td> + <td> + <span class="code">function annotate_slot_load!(e::Expr, vtypes::VarTable, sv::InferenceState, undefs::Array{Bool,1}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-238"></a>238</td> + <td></td> + <td></td> + <td> + <span class="code"> head = e.head +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-239"></a>239</td> + <td></td> + <td></td> + <td> + <span class="code"> i0 = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-240"></a>240</td> + <td></td> + <td></td> + <td> + <span class="code"> if is_meta_expr_head(head) || head === :const +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-241"></a>241</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-242"></a>242</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-243"></a>243</td> + <td></td> + <td></td> + <td> + <span class="code"> if head === :(=) || head === :method +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-244"></a>244</td> + <td></td> + <td></td> + <td> + <span class="code"> i0 = 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-245"></a>245</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-246"></a>246</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = i0:length(e.args) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-247"></a>247</td> + <td></td> + <td></td> + <td> + <span class="code"> subex = e.args[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-248"></a>248</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(subex, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-249"></a>249</td> + <td></td> + <td></td> + <td> + <span class="code"> annotate_slot_load!(subex, vtypes, sv, undefs) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-250"></a>250</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(subex, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-251"></a>251</td> + <td></td> + <td></td> + <td> + <span class="code"> e.args[i] = visit_slot_load!(subex, vtypes, sv, undefs) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-252"></a>252</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-253"></a>253</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-254"></a>254</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-255"></a>255</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-256"></a>256</td> + <td></td> + <td></td> + <td> + <span class="code">function visit_slot_load!(sl::Slot, vtypes::VarTable, sv::InferenceState, undefs::Array{Bool,1}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-257"></a>257</td> + <td></td> + <td></td> + <td> + <span class="code"> id = slot_id(sl) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-258"></a>258</td> + <td></td> + <td></td> + <td> + <span class="code"> s = vtypes[id] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-259"></a>259</td> + <td></td> + <td></td> + <td> + <span class="code"> vt = maybe_widen_conditional(s.typ) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-260"></a>260</td> + <td></td> + <td></td> + <td> + <span class="code"> if s.undef +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-261"></a>261</td> + <td></td> + <td></td> + <td> + <span class="code"> # find used-undef variables +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-262"></a>262</td> + <td></td> + <td></td> + <td> + <span class="code"> undefs[id] = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-263"></a>263</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-264"></a>264</td> + <td></td> + <td></td> + <td> + <span class="code"> # add type annotations where needed +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-265"></a>265</td> + <td></td> + <td></td> + <td> + <span class="code"> if !(sv.slottypes[id] ⊑ vt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-266"></a>266</td> + <td></td> + <td></td> + <td> + <span class="code"> return TypedSlot(id, vt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-267"></a>267</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-268"></a>268</td> + <td></td> + <td></td> + <td> + <span class="code"> return sl +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-269"></a>269</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-270"></a>270</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-271"></a>271</td> + <td></td> + <td></td> + <td> + <span class="code">function record_slot_assign!(sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-272"></a>272</td> + <td></td> + <td></td> + <td> + <span class="code"> # look at all assignments to slots +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-273"></a>273</td> + <td></td> + <td></td> + <td> + <span class="code"> # and union the set of types stored there +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-274"></a>274</td> + <td></td> + <td></td> + <td> + <span class="code"> # to compute a lower bound on the storage required +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-275"></a>275</td> + <td></td> + <td></td> + <td> + <span class="code"> states = sv.stmt_types +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-276"></a>276</td> + <td></td> + <td></td> + <td> + <span class="code"> body = sv.src.code::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-277"></a>277</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes = sv.slottypes::Vector{Any} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-278"></a>278</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:length(body) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-279"></a>279</td> + <td></td> + <td></td> + <td> + <span class="code"> expr = body[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-280"></a>280</td> + <td></td> + <td></td> + <td> + <span class="code"> st_i = states[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-281"></a>281</td> + <td></td> + <td></td> + <td> + <span class="code"> # find all reachable assignments to locals +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-282"></a>282</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(st_i, VarTable) && isa(expr, Expr) && expr.head === :(=) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-283"></a>283</td> + <td></td> + <td></td> + <td> + <span class="code"> lhs = expr.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-284"></a>284</td> + <td></td> + <td></td> + <td> + <span class="code"> rhs = expr.args[2] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-285"></a>285</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(lhs, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-286"></a>286</td> + <td></td> + <td></td> + <td> + <span class="code"> vt = widenconst(sv.src.ssavaluetypes[i]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-287"></a>287</td> + <td></td> + <td></td> + <td> + <span class="code"> if vt !== Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-288"></a>288</td> + <td></td> + <td></td> + <td> + <span class="code"> id = slot_id(lhs) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-289"></a>289</td> + <td></td> + <td></td> + <td> + <span class="code"> otherTy = slottypes[id] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-290"></a>290</td> + <td></td> + <td></td> + <td> + <span class="code"> if otherTy === Bottom +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-291"></a>291</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes[id] = vt +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-292"></a>292</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif otherTy === Any +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-293"></a>293</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes[id] = Any +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-294"></a>294</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-295"></a>295</td> + <td></td> + <td></td> + <td> + <span class="code"> slottypes[id] = tmerge(otherTy, vt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-296"></a>296</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-297"></a>297</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-298"></a>298</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-299"></a>299</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-300"></a>300</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-301"></a>301</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-302"></a>302</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-303"></a>303</td> + <td></td> + <td></td> + <td> + <span class="code"># annotate types of all symbols in AST +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-304"></a>304</td> + <td></td> + <td></td> + <td> + <span class="code">function type_annotate!(sv::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-305"></a>305</td> + <td></td> + <td></td> + <td> + <span class="code"> # delete dead statements only if we're building this IR to cache it +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-306"></a>306</td> + <td></td> + <td></td> + <td> + <span class="code"> # (otherwise, we'll run the optimization passes later, outside of inference) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-307"></a>307</td> + <td></td> + <td></td> + <td> + <span class="code"> run_optimizer = (sv.cached || sv.parent !== nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-308"></a>308</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-309"></a>309</td> + <td></td> + <td></td> + <td> + <span class="code"> # remove all unused ssa values +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-310"></a>310</td> + <td></td> + <td></td> + <td> + <span class="code"> gt = sv.src.ssavaluetypes +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-311"></a>311</td> + <td></td> + <td></td> + <td> + <span class="code"> for j = 1:length(gt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-312"></a>312</td> + <td></td> + <td></td> + <td> + <span class="code"> if gt[j] === NOT_FOUND +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-313"></a>313</td> + <td></td> + <td></td> + <td> + <span class="code"> gt[j] = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-314"></a>314</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-315"></a>315</td> + <td></td> + <td></td> + <td> + <span class="code"> gt[j] = maybe_widen_conditional(gt[j]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-316"></a>316</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-317"></a>317</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-318"></a>318</td> + <td></td> + <td></td> + <td> + <span class="code"> # compute the required type for each slot +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-319"></a>319</td> + <td></td> + <td></td> + <td> + <span class="code"> # to hold all of the items assigned into it +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-320"></a>320</td> + <td></td> + <td></td> + <td> + <span class="code"> record_slot_assign!(sv) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-321"></a>321</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-322"></a>322</td> + <td></td> + <td></td> + <td> + <span class="code"> # annotate variables load types +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-323"></a>323</td> + <td></td> + <td></td> + <td> + <span class="code"> # remove dead code optimization +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-324"></a>324</td> + <td></td> + <td></td> + <td> + <span class="code"> # and compute which variables may be used undef +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-325"></a>325</td> + <td></td> + <td></td> + <td> + <span class="code"> src = sv.src +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-326"></a>326</td> + <td></td> + <td></td> + <td> + <span class="code"> states = sv.stmt_types +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-327"></a>327</td> + <td></td> + <td></td> + <td> + <span class="code"> nargs = sv.nargs +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-328"></a>328</td> + <td></td> + <td></td> + <td> + <span class="code"> nslots = length(states[1]) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-329"></a>329</td> + <td></td> + <td></td> + <td> + <span class="code"> undefs = fill(false, nslots) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-330"></a>330</td> + <td></td> + <td></td> + <td> + <span class="code"> body = src.code::Array{Any,1} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-331"></a>331</td> + <td></td> + <td></td> + <td> + <span class="code"> nexpr = length(body) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-332"></a>332</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-333"></a>333</td> + <td></td> + <td></td> + <td> + <span class="code"> # replace gotoifnot with its condition if the branch target is unreachable +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-334"></a>334</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:nexpr +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-335"></a>335</td> + <td></td> + <td></td> + <td> + <span class="code"> expr = body[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-336"></a>336</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(expr, Expr) && expr.head === :gotoifnot +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-337"></a>337</td> + <td></td> + <td></td> + <td> + <span class="code"> tgt = expr.args[2]::Int +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-338"></a>338</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(states[tgt], VarTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-339"></a>339</td> + <td></td> + <td></td> + <td> + <span class="code"> body[i] = expr.args[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-340"></a>340</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-341"></a>341</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-342"></a>342</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-343"></a>343</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-344"></a>344</td> + <td></td> + <td></td> + <td> + <span class="code"> i = 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-345"></a>345</td> + <td></td> + <td></td> + <td> + <span class="code"> oldidx = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-346"></a>346</td> + <td></td> + <td></td> + <td> + <span class="code"> changemap = fill(0, nexpr) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-347"></a>347</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-348"></a>348</td> + <td></td> + <td></td> + <td> + <span class="code"> while i <= nexpr +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-349"></a>349</td> + <td></td> + <td></td> + <td> + <span class="code"> oldidx += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-350"></a>350</td> + <td></td> + <td></td> + <td> + <span class="code"> st_i = states[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-351"></a>351</td> + <td></td> + <td></td> + <td> + <span class="code"> expr = body[i] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-352"></a>352</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(st_i, VarTable) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-353"></a>353</td> + <td></td> + <td></td> + <td> + <span class="code"> # st_i === () => unreached statement (see issue #7836) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-354"></a>354</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(expr, Expr) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-355"></a>355</td> + <td></td> + <td></td> + <td> + <span class="code"> annotate_slot_load!(expr, st_i, sv, undefs) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-356"></a>356</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(expr, Slot) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-357"></a>357</td> + <td></td> + <td></td> + <td> + <span class="code"> body[i] = visit_slot_load!(expr, st_i, sv, undefs) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-358"></a>358</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-359"></a>359</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-360"></a>360</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(expr, Expr) && is_meta_expr_head(expr.head) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-361"></a>361</td> + <td></td> + <td></td> + <td> + <span class="code"> # keep any lexically scoped expressions +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-362"></a>362</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif run_optimizer +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-363"></a>363</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(body, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-364"></a>364</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(states, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-365"></a>365</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(src.ssavaluetypes, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-366"></a>366</td> + <td></td> + <td></td> + <td> + <span class="code"> deleteat!(src.codelocs, i) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-367"></a>367</td> + <td></td> + <td></td> + <td> + <span class="code"> nexpr -= 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-368"></a>368</td> + <td></td> + <td></td> + <td> + <span class="code"> if oldidx < length(changemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-369"></a>369</td> + <td></td> + <td></td> + <td> + <span class="code"> changemap[oldidx + 1] = -1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-370"></a>370</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-371"></a>371</td> + <td></td> + <td></td> + <td> + <span class="code"> continue +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-372"></a>372</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-373"></a>373</td> + <td></td> + <td></td> + <td> + <span class="code"> body[i] = Const(expr) # annotate that this statement actually is dead +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-374"></a>374</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-375"></a>375</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-376"></a>376</td> + <td></td> + <td></td> + <td> + <span class="code"> i += 1 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-377"></a>377</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-378"></a>378</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-379"></a>379</td> + <td></td> + <td></td> + <td> + <span class="code"> if run_optimizer +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-380"></a>380</td> + <td></td> + <td></td> + <td> + <span class="code"> renumber_ir_elements!(body, changemap) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-381"></a>381</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-382"></a>382</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-383"></a>383</td> + <td></td> + <td></td> + <td> + <span class="code"> # finish marking used-undef variables +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-384"></a>384</td> + <td></td> + <td></td> + <td> + <span class="code"> for j = 1:nslots +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-385"></a>385</td> + <td></td> + <td></td> + <td> + <span class="code"> if undefs[j] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-386"></a>386</td> + <td></td> + <td></td> + <td> + <span class="code"> src.slotflags[j] |= SLOT_USEDUNDEF | SLOT_STATICUNDEF +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-387"></a>387</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-388"></a>388</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-389"></a>389</td> + <td></td> + <td></td> + <td> + <span class="code"> nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-390"></a>390</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-391"></a>391</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-392"></a>392</td> + <td></td> + <td></td> + <td> + <span class="code"># at the end, all items in b's cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-393"></a>393</td> + <td></td> + <td></td> + <td> + <span class="code"># will now be added to a's cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-394"></a>394</td> + <td></td> + <td></td> + <td> + <span class="code">function union_caller_cycle!(a::InferenceState, b::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-395"></a>395</td> + <td></td> + <td></td> + <td> + <span class="code"> callers_in_cycle = b.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-396"></a>396</td> + <td></td> + <td></td> + <td> + <span class="code"> b.parent = a.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-397"></a>397</td> + <td></td> + <td></td> + <td> + <span class="code"> b.callers_in_cycle = a.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-398"></a>398</td> + <td></td> + <td></td> + <td> + <span class="code"> contains_is(a.callers_in_cycle, b) || push!(a.callers_in_cycle, b) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-399"></a>399</td> + <td></td> + <td></td> + <td> + <span class="code"> if callers_in_cycle !== a.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-400"></a>400</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-401"></a>401</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller !== b +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-402"></a>402</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.parent = a.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-403"></a>403</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.callers_in_cycle = a.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-404"></a>404</td> + <td></td> + <td></td> + <td> + <span class="code"> push!(a.callers_in_cycle, caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-405"></a>405</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-406"></a>406</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-407"></a>407</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-408"></a>408</td> + <td></td> + <td></td> + <td> + <span class="code"> return +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-409"></a>409</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-410"></a>410</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-411"></a>411</td> + <td></td> + <td></td> + <td> + <span class="code">function merge_call_chain!(parent::InferenceState, ancestor::InferenceState, child::InferenceState, limited::Bool) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-412"></a>412</td> + <td></td> + <td></td> + <td> + <span class="code"> # add backedge of parent <- child +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-413"></a>413</td> + <td></td> + <td></td> + <td> + <span class="code"> # then add all backedges of parent <- parent.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-414"></a>414</td> + <td></td> + <td></td> + <td> + <span class="code"> # and merge all of the callers into ancestor.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-415"></a>415</td> + <td></td> + <td></td> + <td> + <span class="code"> # and ensure that walking the parent list will get the same result (DAG) from everywhere +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-416"></a>416</td> + <td></td> + <td></td> + <td> + <span class="code"> while true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-417"></a>417</td> + <td></td> + <td></td> + <td> + <span class="code"> add_cycle_backedge!(child, parent, parent.currpc) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-418"></a>418</td> + <td></td> + <td></td> + <td> + <span class="code"> union_caller_cycle!(ancestor, child) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-419"></a>419</td> + <td></td> + <td></td> + <td> + <span class="code"> child = parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-420"></a>420</td> + <td></td> + <td></td> + <td> + <span class="code"> parent = child.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-421"></a>421</td> + <td></td> + <td></td> + <td> + <span class="code"> child === ancestor && break +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-422"></a>422</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-423"></a>423</td> + <td></td> + <td></td> + <td> + <span class="code"> if limited +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-424"></a>424</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in ancestor.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-425"></a>425</td> + <td></td> + <td></td> + <td> + <span class="code"> caller.limited = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-426"></a>426</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-427"></a>427</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-428"></a>428</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-429"></a>429</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-430"></a>430</td> + <td></td> + <td></td> + <td> + <span class="code"># Walk through `linfo`'s upstream call chain, starting at `parent`. If a parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-431"></a>431</td> + <td></td> + <td></td> + <td> + <span class="code"># frame matching `linfo` is encountered, then there is a cycle in the call graph +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-432"></a>432</td> + <td></td> + <td></td> + <td> + <span class="code"># (i.e. `linfo` is a descendant callee of itself). Upon encountering this cycle, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-433"></a>433</td> + <td></td> + <td></td> + <td> + <span class="code"># we "resolve" it by merging the call chain, which entails unioning each intermediary +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-434"></a>434</td> + <td></td> + <td></td> + <td> + <span class="code"># frame's `callers_in_cycle` field and adding the appropriate backedges. Finally, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-435"></a>435</td> + <td></td> + <td></td> + <td> + <span class="code"># we return `linfo`'s pre-existing frame. If no cycles are found, `nothing` is +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-436"></a>436</td> + <td></td> + <td></td> + <td> + <span class="code"># returned instead. +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-437"></a>437</td> + <td></td> + <td></td> + <td> + <span class="code">function resolve_call_cycle!(linfo::MethodInstance, parent::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-438"></a>438</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-439"></a>439</td> + <td></td> + <td></td> + <td> + <span class="code"> uncached = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-440"></a>440</td> + <td></td> + <td></td> + <td> + <span class="code"> limited = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-441"></a>441</td> + <td></td> + <td></td> + <td> + <span class="code"> while isa(frame, InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-442"></a>442</td> + <td></td> + <td></td> + <td> + <span class="code"> uncached |= !frame.cached # ensure we never add an uncached frame to a cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-443"></a>443</td> + <td></td> + <td></td> + <td> + <span class="code"> limited |= frame.limited +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-444"></a>444</td> + <td></td> + <td></td> + <td> + <span class="code"> if frame.linfo === linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-445"></a>445</td> + <td></td> + <td></td> + <td> + <span class="code"> uncached && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-446"></a>446</td> + <td></td> + <td></td> + <td> + <span class="code"> merge_call_chain!(parent, frame, frame, limited) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-447"></a>447</td> + <td></td> + <td></td> + <td> + <span class="code"> return frame +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-448"></a>448</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-449"></a>449</td> + <td></td> + <td></td> + <td> + <span class="code"> for caller in frame.callers_in_cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-450"></a>450</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.linfo === linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-451"></a>451</td> + <td></td> + <td></td> + <td> + <span class="code"> uncached && return true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-452"></a>452</td> + <td></td> + <td></td> + <td> + <span class="code"> merge_call_chain!(parent, frame, caller, limited) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-453"></a>453</td> + <td></td> + <td></td> + <td> + <span class="code"> return caller +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-454"></a>454</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-455"></a>455</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-456"></a>456</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = frame.parent +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-457"></a>457</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-458"></a>458</td> + <td></td> + <td></td> + <td> + <span class="code"> return false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-459"></a>459</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-460"></a>460</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-461"></a>461</td> + <td></td> + <td></td> + <td> + <span class="code"># compute (and cache) an inferred AST and return the current best estimate of the result type +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-462"></a>462</td> + <td></td> + <td></td> + <td> + <span class="code">function typeinf_edge(method::Method, @nospecialize(atypes), sparams::SimpleVector, caller::InferenceState) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-463"></a>463</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code_for_method(method, atypes, sparams, caller.params.world) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-464"></a>464</td> + <td></td> + <td></td> + <td> + <span class="code"> code === nothing && return Any, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-465"></a>465</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code::MethodInstance +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-466"></a>466</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(code, :inferred) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-467"></a>467</td> + <td></td> + <td></td> + <td> + <span class="code"> # return rettype if the code is already inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-468"></a>468</td> + <td></td> + <td></td> + <td> + <span class="code"> # staged functions make this hard since they have two "inferred" conditions, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-469"></a>469</td> + <td></td> + <td></td> + <td> + <span class="code"> # so need to check whether the code itself is also inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-470"></a>470</td> + <td></td> + <td></td> + <td> + <span class="code"> inf = code.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-471"></a>471</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(inf, CodeInfo) || (inf::CodeInfo).inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-472"></a>472</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(code, :inferred_const) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-473"></a>473</td> + <td></td> + <td></td> + <td> + <span class="code"> return AbstractEvalConstant(code.inferred_const), code +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-474"></a>474</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-475"></a>475</td> + <td></td> + <td></td> + <td> + <span class="code"> return code.rettype, code +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-476"></a>476</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-477"></a>477</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-478"></a>478</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-479"></a>479</td> + <td></td> + <td></td> + <td> + <span class="code"> if !caller.cached && caller.parent === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-480"></a>480</td> + <td></td> + <td></td> + <td> + <span class="code"> # this caller exists to return to the user +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-481"></a>481</td> + <td></td> + <td></td> + <td> + <span class="code"> # (if we asked resolve_call_cyle, it might instead detect that there is a cycle that it can't merge) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-482"></a>482</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-483"></a>483</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-484"></a>484</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = resolve_call_cycle!(code, caller) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-485"></a>485</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-486"></a>486</td> + <td></td> + <td></td> + <td> + <span class="code"> if frame === false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-487"></a>487</td> + <td></td> + <td></td> + <td> + <span class="code"> # completely new +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-488"></a>488</td> + <td></td> + <td></td> + <td> + <span class="code"> code.inInference = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-489"></a>489</td> + <td></td> + <td></td> + <td> + <span class="code"> result = InferenceResult(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-490"></a>490</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(result, #=cached=#true, caller.params) # always use the cache for edge targets +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-491"></a>491</td> + <td></td> + <td></td> + <td> + <span class="code"> if frame === nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-492"></a>492</td> + <td></td> + <td></td> + <td> + <span class="code"> # can't get the source for this, so we know nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-493"></a>493</td> + <td></td> + <td></td> + <td> + <span class="code"> code.inInference = false +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-494"></a>494</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-495"></a>495</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-496"></a>496</td> + <td></td> + <td></td> + <td> + <span class="code"> if caller.cached || caller.limited # don't involve uncached functions in cycle resolution +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-497"></a>497</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.parent = caller +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-498"></a>498</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-499"></a>499</td> + <td></td> + <td></td> + <td> + <span class="code"> typeinf(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-500"></a>500</td> + <td></td> + <td></td> + <td> + <span class="code"> return frame.bestguess, frame.inferred ? frame.linfo : nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-501"></a>501</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif frame === true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-502"></a>502</td> + <td></td> + <td></td> + <td> + <span class="code"> # unresolvable cycle +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-503"></a>503</td> + <td></td> + <td></td> + <td> + <span class="code"> return Any, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-504"></a>504</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-505"></a>505</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = frame::InferenceState +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-506"></a>506</td> + <td></td> + <td></td> + <td> + <span class="code"> return frame.bestguess, nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-507"></a>507</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-508"></a>508</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-509"></a>509</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-510"></a>510</td> + <td></td> + <td></td> + <td> + <span class="code">#### entry points for inferring a MethodInstance given a type signature #### +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-511"></a>511</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-512"></a>512</td> + <td></td> + <td></td> + <td> + <span class="code"># compute an inferred AST and return type +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-513"></a>513</td> + <td></td> + <td></td> + <td> + <span class="code">function typeinf_code(method::Method, @nospecialize(atypes), sparams::SimpleVector, run_optimizer::Bool, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-514"></a>514</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code_for_method(method, atypes, sparams, params.world) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-515"></a>515</td> + <td></td> + <td></td> + <td> + <span class="code"> code === nothing && return (nothing, Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-516"></a>516</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_begin, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-517"></a>517</td> + <td></td> + <td></td> + <td> + <span class="code"> result = InferenceResult(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-518"></a>518</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(result, false, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-519"></a>519</td> + <td></td> + <td></td> + <td> + <span class="code"> frame === nothing && return (nothing, Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-520"></a>520</td> + <td></td> + <td></td> + <td> + <span class="code"> if typeinf(frame) && run_optimizer +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-521"></a>521</td> + <td></td> + <td></td> + <td> + <span class="code"> opt = OptimizationState(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-522"></a>522</td> + <td></td> + <td></td> + <td> + <span class="code"> optimize(opt, result.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-523"></a>523</td> + <td></td> + <td></td> + <td> + <span class="code"> opt.src.inferred = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-524"></a>524</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-525"></a>525</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-526"></a>526</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.inferred || return (nothing, Any) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-527"></a>527</td> + <td></td> + <td></td> + <td> + <span class="code"> return (frame.src, widenconst(result.result)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-528"></a>528</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-529"></a>529</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-530"></a>530</td> + <td></td> + <td></td> + <td> + <span class="code"># compute (and cache) an inferred AST and return type +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-531"></a>531</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf_ext-531"></a> + 3 (8.11%) samples spent in typeinf_ext<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + typeinf_ext + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#Ltypeinfer-jl-14b2448d998dfdb61460-line.html-611">line 611</a><br /> + </div> + <span class="code">function typeinf_ext(linfo::MethodInstance, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-532"></a>532</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:2 # test-and-lock-and-test +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-533"></a>533</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_begin, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-534"></a>534</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(linfo, :inferred) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-535"></a>535</td> + <td></td> + <td></td> + <td> + <span class="code"> # see if this code already exists in the cache +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-536"></a>536</td> + <td></td> + <td></td> + <td> + <span class="code"> # staged functions make this hard since they have two "inferred" conditions, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-537"></a>537</td> + <td></td> + <td></td> + <td> + <span class="code"> # so need to check whether the code itself is also inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-538"></a>538</td> + <td></td> + <td></td> + <td> + <span class="code"> if min_world(linfo) <= params.world <= max_world(linfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-539"></a>539</td> + <td></td> + <td></td> + <td> + <span class="code"> inf = linfo.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-540"></a>540</td> + <td></td> + <td></td> + <td> + <span class="code"> if invoke_api(linfo) == 2 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-541"></a>541</td> + <td></td> + <td></td> + <td> + <span class="code"> method = linfo.def::Method +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-542"></a>542</td> + <td></td> + <td></td> + <td> + <span class="code"> tree = ccall(:jl_new_code_info_uninit, Ref{CodeInfo}, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-543"></a>543</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.code = Any[ Expr(:return, quoted(linfo.inferred_const)) ] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-544"></a>544</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.method_for_inference_limit_heuristics = nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-545"></a>545</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.slotnames = Any[ COMPILER_TEMP_SYM for i = 1:method.nargs ] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-546"></a>546</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.slotflags = fill(0x00, Int(method.nargs)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-547"></a>547</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.ssavaluetypes = 0 +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-548"></a>548</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.codelocs = Int32[1] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-549"></a>549</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.linetable = [LineInfoNode(method.module, method.name, method.file, Int(method.line), 0)] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-550"></a>550</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.inferred = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-551"></a>551</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.ssaflags = UInt8[] +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-552"></a>552</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.pure = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-553"></a>553</td> + <td></td> + <td></td> + <td> + <span class="code"> tree.inlineable = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-554"></a>554</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-555"></a>555</td> + <td></td> + <td></td> + <td> + <span class="code"> return svec(linfo, tree) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-556"></a>556</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(inf, CodeInfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-557"></a>557</td> + <td></td> + <td></td> + <td> + <span class="code"> if inf.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-558"></a>558</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-559"></a>559</td> + <td></td> + <td></td> + <td> + <span class="code"> return svec(linfo, inf) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-560"></a>560</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-561"></a>561</td> + <td></td> + <td></td> + <td> + <span class="code"> elseif isa(inf, Vector{UInt8}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-562"></a>562</td> + <td></td> + <td></td> + <td> + <span class="code"> inf = uncompressed_ast(linfo.def::Method, inf) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-563"></a>563</td> + <td></td> + <td></td> + <td> + <span class="code"> if inf.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-564"></a>564</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-565"></a>565</td> + <td></td> + <td></td> + <td> + <span class="code"> return svec(linfo, inf) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-566"></a>566</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-567"></a>567</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-568"></a>568</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-569"></a>569</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-570"></a>570</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-571"></a>571</td> + <td></td> + <td></td> + <td> + <span class="code"> linfo.inInference = true +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-572"></a>572</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(InferenceResult(linfo), #=cached=#true, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-573"></a>573</td> + <td></td> + <td></td> + <td> + <span class="code"> frame === nothing && return svec(nothing, nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-574"></a>574</td> + <td></td> + <td>3 (8.11%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf-13">typeinf</a><br /> + </div> + <span class="code"> typeinf(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-575"></a>575</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-576"></a>576</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.src.inferred || return svec(nothing, nothing) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-577"></a>577</td> + <td></td> + <td></td> + <td> + <span class="code"> return svec(frame.result.linfo, frame.src) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-578"></a>578</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-579"></a>579</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-580"></a>580</td> + <td></td> + <td></td> + <td> + <span class="code"># compute (and cache) an inferred AST and return the inferred return type +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-581"></a>581</td> + <td></td> + <td></td> + <td> + <span class="code">function typeinf_type(method::Method, @nospecialize(atypes), sparams::SimpleVector, params::Params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-582"></a>582</td> + <td></td> + <td></td> + <td> + <span class="code"> if contains_is(unwrap_unionall(atypes).parameters, Union{}) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-583"></a>583</td> + <td></td> + <td></td> + <td> + <span class="code"> return Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-584"></a>584</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-585"></a>585</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code_for_method(method, atypes, sparams, params.world) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-586"></a>586</td> + <td></td> + <td></td> + <td> + <span class="code"> code === nothing && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-587"></a>587</td> + <td></td> + <td></td> + <td> + <span class="code"> code = code::MethodInstance +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-588"></a>588</td> + <td></td> + <td></td> + <td> + <span class="code"> for i = 1:2 # test-and-lock-and-test +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-589"></a>589</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_begin, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-590"></a>590</td> + <td></td> + <td></td> + <td> + <span class="code"> if isdefined(code, :inferred) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-591"></a>591</td> + <td></td> + <td></td> + <td> + <span class="code"> # see if this rettype already exists in the cache +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-592"></a>592</td> + <td></td> + <td></td> + <td> + <span class="code"> # staged functions make this hard since they have two "inferred" conditions, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-593"></a>593</td> + <td></td> + <td></td> + <td> + <span class="code"> # so need to check whether the code itself is also inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-594"></a>594</td> + <td></td> + <td></td> + <td> + <span class="code"> inf = code.inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-595"></a>595</td> + <td></td> + <td></td> + <td> + <span class="code"> if !isa(inf, CodeInfo) || (inf::CodeInfo).inferred +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-596"></a>596</td> + <td></td> + <td></td> + <td> + <span class="code"> i == 2 && ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-597"></a>597</td> + <td></td> + <td></td> + <td> + <span class="code"> return code.rettype +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-598"></a>598</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-599"></a>599</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-600"></a>600</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-601"></a>601</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceResult(code) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-602"></a>602</td> + <td></td> + <td></td> + <td> + <span class="code"> typeinf(frame, true, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-603"></a>603</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-604"></a>604</td> + <td></td> + <td></td> + <td> + <span class="code"> frame.result isa InferenceState && return nothing +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-605"></a>605</td> + <td></td> + <td></td> + <td> + <span class="code"> return widenconst(frame.result) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-606"></a>606</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-607"></a>607</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-608"></a>608</td> + <td></td> + <td></td> + <td> + <div class="call-sites"> + <a name="S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf_ext-608"></a> + 3 (8.11%) samples spent in typeinf_ext<br /> + 0 (ex.), + 3 (100.00%) (incl.) + when called from + StringVector + <a href="string-jl-d20bff96b5e2c46b112e-line.html#Lstring-jl-d20bff96b5e2c46b112e-line.html-71">line 71</a><br /> + </div> + <span class="code">@timeit function typeinf_ext(linfo::MethodInstance, world::UInt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-609"></a>609</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(linfo.def, Method) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-610"></a>610</td> + <td></td> + <td></td> + <td> + <span class="code"> # method lambda - infer this specialization via the method cache +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-611"></a>611</td> + <td></td> + <td>3 (8.11%)</td> + <td> + <div class="callees"> + 3 (100.00%) + samples spent calling + <a href="typeinfer-jl-14b2448d998dfdb61460-line.html#S-home-simsc266-TDDE45-lab5-lab5-metaprogramming-and-debugging-lab-julia-julia-1-0-4-bin-share-julia-base-compiler-typeinfer-jl-typeinf_ext-531">typeinf_ext</a><br /> + </div> + <span class="code"> return typeinf_ext(linfo, Params(world)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-612"></a>612</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-613"></a>613</td> + <td></td> + <td></td> + <td> + <span class="code"> # toplevel lambda - infer directly +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-614"></a>614</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_begin, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-615"></a>615</td> + <td></td> + <td></td> + <td> + <span class="code"> result = InferenceResult(linfo) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-616"></a>616</td> + <td></td> + <td></td> + <td> + <span class="code"> frame = InferenceState(result, linfo.inferred::CodeInfo, +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-617"></a>617</td> + <td></td> + <td></td> + <td> + <span class="code"> #=cached=#true, Params(world)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-618"></a>618</td> + <td></td> + <td></td> + <td> + <span class="code"> typeinf(frame) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-619"></a>619</td> + <td></td> + <td></td> + <td> + <span class="code"> ccall(:jl_typeinf_end, Cvoid, ()) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-620"></a>620</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert frame.inferred # TODO: deal with this better +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-621"></a>621</td> + <td></td> + <td></td> + <td> + <span class="code"> @assert frame.linfo === linfo +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-622"></a>622</td> + <td></td> + <td></td> + <td> + <span class="code"> linfo.rettype = widenconst(frame.bestguess) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-623"></a>623</td> + <td></td> + <td></td> + <td> + <span class="code"> return svec(linfo, frame.src) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-624"></a>624</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-625"></a>625</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-626"></a>626</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-627"></a>627</td> + <td></td> + <td></td> + <td> + <span class="code"> +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-628"></a>628</td> + <td></td> + <td></td> + <td> + <span class="code">function return_type(@nospecialize(f), @nospecialize(t)) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-629"></a>629</td> + <td></td> + <td></td> + <td> + <span class="code"> params = Params(ccall(:jl_get_tls_world_age, UInt, ())) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-630"></a>630</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = Union{} +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-631"></a>631</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(f, Builtin) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-632"></a>632</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = builtin_tfunction(f, Any[t.parameters...], nothing, params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-633"></a>633</td> + <td></td> + <td></td> + <td> + <span class="code"> if isa(rt, TypeVar) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-634"></a>634</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = rt.ub +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-635"></a>635</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-636"></a>636</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = widenconst(rt) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-637"></a>637</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-638"></a>638</td> + <td></td> + <td></td> + <td> + <span class="code"> else +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-639"></a>639</td> + <td></td> + <td></td> + <td> + <span class="code"> for m in _methods(f, t, -1, params.world) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-640"></a>640</td> + <td></td> + <td></td> + <td> + <span class="code"> ty = typeinf_type(m[3], m[1], m[2], params) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-641"></a>641</td> + <td></td> + <td></td> + <td> + <span class="code"> ty === nothing && return Any +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-642"></a>642</td> + <td></td> + <td></td> + <td> + <span class="code"> rt = tmerge(rt, ty) +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-643"></a>643</td> + <td></td> + <td></td> + <td> + <span class="code"> rt === Any && break +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-644"></a>644</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-645"></a>645</td> + <td></td> + <td></td> + <td> + <span class="code"> end +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-646"></a>646</td> + <td></td> + <td></td> + <td> + <span class="code"> return rt +</span> + </td> + </tr> + + <tr> + <td><a name="Ltypeinfer-jl-14b2448d998dfdb61460-line.html-647"></a>647</td> + <td></td> + <td></td> + <td> + <span class="code">end +</span> + </td> + </tr> + </table> + </div> + </body> +</html> diff --git a/profiling/statprof/zoomable_stacks.attrs b/profiling/statprof/zoomable_stacks.attrs new file mode 100644 index 0000000000000000000000000000000000000000..e50c76c29407f56ad69cecd2d97e10603c509405 --- /dev/null +++ b/profiling/statprof/zoomable_stacks.attrs @@ -0,0 +1,56 @@ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:803 function=+ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./loading.jl:include_relative:1035 function=include_relative +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:string:155 function=string +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./sysimg.jl:include:22 function=include +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalize:48 function=normalize +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:_deleteend!:823 function=_deleteend! +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:StringVector:71 function=StringVector +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./boot.jl:include:317 function=include +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/profiling/test.jl:f:7 function=f +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:write:163 function=write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:165 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:ensureroom:293 function=ensureroom +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:compare:474 function=compare +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./libuv.jl:process_events:98 function=process_events +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print_to_string:111 function=print_to_string +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:28 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:roundweed:34 function=roundweed +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:fastshortest:105 function=fastshortest +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_string_n:60 function=_string_n +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./coreio.jl:print:2 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:exec_options:193 function=exec_options +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:grisu:52 function=grisu +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:show:151 function=show +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/fastshortest.jl:digitgen:64 function=digitgen +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/bignums.jl:dividemodulointbignum!:420 function=dividemodulointbignum! +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:*:54 function=* +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:448 function=>> +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./client.jl:_start:420 function=_start +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:tostr_sizehint:106 function=tostr_sizehint +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>>:603 function=>> +nothing:Type function=Type +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./event.jl:wait:243 function=wait +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:normalizedbound:120 function=normalizedbound +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/io.jl:print:166 function=print +/buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Profile/src/Profile.jl:top-level scope:25 function=top-level scope +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:div function=div +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:#IOBuffer#302:111 function=#IOBuffer#302 +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./gcutils.jl:print:165 function=print +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./promotion.jl:==:425 function=== +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/float.jl:binexp_cache:253 function=binexp_cache +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:uv_write:773 function=uv_write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:+:53 function=+ +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:>>:442 function=>> +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:StringVector:31 function=StringVector +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./grisu/grisu.jl:_show:89 function=_show +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./array.jl:resize!:1011 function=resize! +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:Type:39 function=Type +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:lastindex:110 function=lastindex +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:>:286 function=> +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./io.jl:unsafe_write:509 function=unsafe_write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./stream.jl:unsafe_write:828 function=unsafe_write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:==:432 function=== +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./strings/string.jl:_thisind_str:113 function=_thisind_str +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./iobuffer.jl:unsafe_write:401 function=unsafe_write +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:427 function=< +/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:<:49 function=< diff --git a/profiling/statprof/zoomable_stacks_by_time.svg b/profiling/statprof/zoomable_stacks_by_time.svg new file mode 100644 index 0000000000000000000000000000000000000000..01ab7c2e8fdee85c881866fcfff6e3f4487906cf --- /dev/null +++ b/profiling/statprof/zoomable_stacks_by_time.svg @@ -0,0 +1,587 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" width="1200" height="386" onload="init(evt)" viewBox="0 0 1200 386" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. --> +<defs > + <linearGradient id="background" y1="0" y2="1" x1="0" x2="0" > + <stop stop-color="#eeeeee" offset="5%" /> + <stop stop-color="#eeeeb0" offset="95%" /> + </linearGradient> +</defs> +<style type="text/css"> + .func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; } +</style> +<script type="text/ecmascript"> +<![CDATA[ + var details, searchbtn, matchedtxt, svg; + function init(evt) { + details = document.getElementById("details").firstChild; + searchbtn = document.getElementById("search"); + matchedtxt = document.getElementById("matched"); + svg = document.getElementsByTagName("svg")[0]; + searching = 0; + } + + // mouse-over for info + function s(node) { // show + info = g_to_text(node); + details.nodeValue = "sub " + info; + } + function c() { // clear + details.nodeValue = ' '; + } + + // ctrl-F for search + window.addEventListener("keydown",function (e) { + if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) { + e.preventDefault(); + search_prompt(); + } + }) + + // functions + function find_child(parent, name, attr) { + var children = parent.childNodes; + for (var i=0; i<children.length;i++) { + if (children[i].tagName == name) + return (attr != undefined) ? children[i].attributes[attr].value : children[i]; + } + return; + } + function orig_save(e, attr, val) { + if (e.attributes["_orig_"+attr] != undefined) return; + if (e.attributes[attr] == undefined) return; + if (val == undefined) val = e.attributes[attr].value; + e.setAttribute("_orig_"+attr, val); + } + function orig_load(e, attr) { + if (e.attributes["_orig_"+attr] == undefined) return; + e.attributes[attr].value = e.attributes["_orig_"+attr].value; + e.removeAttribute("_orig_"+attr); + } + function g_to_text(e) { + var text = find_child(e, "title").firstChild.nodeValue; + return (text) + } + function g_to_func(e) { + var func = g_to_text(e); + if (func != null) + func = func.replace(/ .*/, ""); + return (func); + } + function update_text(e) { + var r = find_child(e, "rect"); + var t = find_child(e, "text"); + var w = parseFloat(r.attributes["width"].value) -3; + var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,""); + t.attributes["x"].value = parseFloat(r.attributes["x"].value) +3; + + // Smaller than this size won't fit anything + if (w < 2*12*0.59) { + t.textContent = ""; + return; + } + + t.textContent = txt; + // Fit in full text width + if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w) + return; + + for (var x=txt.length-2; x>0; x--) { + if (t.getSubStringLength(0, x+2) <= w) { + t.textContent = txt.substring(0,x) + ".."; + return; + } + } + t.textContent = ""; + } + + // zoom + function zoom_reset(e) { + if (e.attributes != undefined) { + orig_load(e, "x"); + orig_load(e, "width"); + } + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_reset(c[i]); + } + } + function zoom_child(e, x, ratio) { + if (e.attributes != undefined) { + if (e.attributes["x"] != undefined) { + orig_save(e, "x"); + e.attributes["x"].value = (parseFloat(e.attributes["x"].value) - x - 10) * ratio + 10; + if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 3; + } + if (e.attributes["width"] != undefined) { + orig_save(e, "width"); + e.attributes["width"].value = parseFloat(e.attributes["width"].value) * ratio; + } + } + + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_child(c[i], x-10, ratio); + } + } + function zoom_parent(e) { + if (e.attributes) { + if (e.attributes["x"] != undefined) { + orig_save(e, "x"); + e.attributes["x"].value = 10; + } + if (e.attributes["width"] != undefined) { + orig_save(e, "width"); + e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (10*2); + } + } + if (e.childNodes == undefined) return; + for(var i=0, c=e.childNodes; i<c.length; i++) { + zoom_parent(c[i]); + } + } + function zoom(node) { + var attr = find_child(node, "rect").attributes; + var width = parseFloat(attr["width"].value); + var xmin = parseFloat(attr["x"].value); + var xmax = parseFloat(xmin + width); + var ymin = parseFloat(attr["y"].value); + var ratio = (svg.width.baseVal.value - 2*10) / width; + + // XXX: Workaround for JavaScript float issues (fix me) + var fudge = 0.0001; + + var unzoombtn = document.getElementById("unzoom"); + unzoombtn.style["opacity"] = "1.0"; + + var el = document.getElementsByTagName("g"); + for(var i=0;i<el.length;i++){ + var e = el[i]; + var a = find_child(e, "rect").attributes; + var ex = parseFloat(a["x"].value); + var ew = parseFloat(a["width"].value); + // Is it an ancestor + if (0 == 0) { + var upstack = parseFloat(a["y"].value) > ymin; + } else { + var upstack = parseFloat(a["y"].value) < ymin; + } + if (upstack) { + // Direct ancestor + if (ex <= xmin && (ex+ew+fudge) >= xmax) { + e.style["opacity"] = "0.5"; + zoom_parent(e); + e.onclick = function(e){unzoom(); zoom(this);}; + update_text(e); + } + // not in current path + else + e.style["display"] = "none"; + } + // Children maybe + else { + // no common path + if (ex < xmin || ex + fudge >= xmax) { + e.style["display"] = "none"; + } + else { + zoom_child(e, xmin, ratio); + e.onclick = function(e){zoom(this);}; + update_text(e); + } + } + } + } + function unzoom() { + var unzoombtn = document.getElementById("unzoom"); + unzoombtn.style["opacity"] = "0.0"; + + var el = document.getElementsByTagName("g"); + for(i=0;i<el.length;i++) { + el[i].style["display"] = "block"; + el[i].style["opacity"] = "1"; + zoom_reset(el[i]); + update_text(el[i]); + } + } + + // search + function reset_search() { + var el = document.getElementsByTagName("rect"); + for (var i=0; i < el.length; i++) { + orig_load(el[i], "fill") + } + } + function search_prompt() { + if (!searching) { + var term = prompt("Enter a search term (regexp " + + "allowed, eg: ^ext4_)", ""); + if (term != null) { + search(term) + } + } else { + reset_search(); + searching = 0; + searchbtn.style["opacity"] = "0.1"; + searchbtn.firstChild.nodeValue = "Search" + matchedtxt.style["opacity"] = "0.0"; + matchedtxt.firstChild.nodeValue = "" + } + } + function search(term) { + var re = new RegExp(term); + var el = document.getElementsByTagName("g"); + var matches = new Object(); + var maxwidth = 0; + for (var i = 0; i < el.length; i++) { + var e = el[i]; + if (e.attributes["class"].value != "func_g") + continue; + var func = g_to_func(e); + var rect = find_child(e, "rect"); + if (rect == null) { + // the rect might be wrapped in an anchor + // if nameattr href is being used + if (rect = find_child(e, "a")) { + rect = find_child(r, "rect"); + } + } + if (func == null || rect == null) + continue; + + // Save max width. Only works as we have a root frame + var w = parseFloat(rect.attributes["width"].value); + if (w > maxwidth) + maxwidth = w; + + if (func.match(re)) { + // highlight + var x = parseFloat(rect.attributes["x"].value); + orig_save(rect, "fill"); + rect.attributes["fill"].value = + "rgb(230,0,230)"; + + // remember matches + if (matches[x] == undefined) { + matches[x] = w; + } else { + if (w > matches[x]) { + // overwrite with parent + matches[x] = w; + } + } + searching = 1; + } + } + if (!searching) + return; + + searchbtn.style["opacity"] = "1.0"; + searchbtn.firstChild.nodeValue = "Reset Search" + + // calculate percent matched, excluding vertical overlap + var count = 0; + var lastx = -1; + var lastw = 0; + var keys = Array(); + for (k in matches) { + if (matches.hasOwnProperty(k)) + keys.push(k); + } + // sort the matched frames by their x location + // ascending, then width descending + keys.sort(function(a, b){ + return a - b; + if (a < b || a > b) + return a - b; + return matches[b] - matches[a]; + }); + // Step through frames saving only the biggest bottom-up frames + // thanks to the sort order. This relies on the tree property + // where children are always smaller than their parents. + for (var k in keys) { + var x = parseFloat(keys[k]); + var w = matches[keys[k]]; + if (x >= lastx + lastw) { + count += w; + lastx = x; + lastw = w; + } + } + // display matched percent + matchedtxt.style["opacity"] = "1.0"; + pct = 100 * count / maxwidth; + if (pct == 100) + pct = "100" + else + pct = pct.toFixed(1) + matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%"; + } + function searchover(e) { + searchbtn.style["opacity"] = "1.0"; + } + function searchout(e) { + if (searching) { + searchbtn.style["opacity"] = "1.0"; + } else { + searchbtn.style["opacity"] = "0.1"; + } + } +]]> +</script> +<rect x="0.0" y="0" width="1200.0" height="386.0" fill="url(#background)" /> +<text text-anchor="middle" x="600.00" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Graph</text> +<text text-anchor="" x="10.00" y="369" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text> +<text text-anchor="" x="10.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text> +<text text-anchor="" x="1090.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" >Search</text> +<text text-anchor="" x="1090.00" y="369" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="matched" > </text> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>* (1 samples, 2.38%)</title><rect x="431.4" y="65" width="28.1" height="15.0" fill="rgb(220,97,29)" rx="2" ry="2" /> +<text text-anchor="" x="434.43" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >*</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print_to_string (37 samples, 88.10%)</title><rect x="94.3" y="193" width="1039.5" height="15.0" fill="rgb(245,33,43)" rx="2" ry="2" /> +<text text-anchor="" x="97.29" y="203.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print_to_string</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>fastshortest (11 samples, 26.19%)</title><rect x="347.1" y="97" width="309.1" height="15.0" fill="rgb(206,70,11)" rx="2" ry="2" /> +<text text-anchor="" x="350.14" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >fastshortest</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>uv_write (3 samples, 7.14%)</title><rect x="10.0" y="161" width="84.3" height="15.0" fill="rgb(220,205,19)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >uv_write</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_string_n (5 samples, 11.90%)</title><rect x="824.8" y="129" width="140.4" height="15.0" fill="rgb(229,160,50)" rx="2" ry="2" /> +<text text-anchor="" x="827.76" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_string_n</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>div (2 samples, 4.76%)</title><rect x="515.7" y="65" width="56.2" height="15.0" fill="rgb(242,104,14)" rx="2" ry="2" /> +<text text-anchor="" x="518.71" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >div</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>StringVector (6 samples, 14.29%)</title><rect x="965.2" y="145" width="168.6" height="15.0" fill="rgb(232,140,35)" rx="2" ry="2" /> +<text text-anchor="" x="968.24" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >StringVector</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>lastindex (1 samples, 2.38%)</title><rect x="712.4" y="161" width="28.1" height="15.0" fill="rgb(226,224,5)" rx="2" ry="2" /> +<text text-anchor="" x="715.38" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >l..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>exec_options (40 samples, 95.24%)</title><rect x="10.0" y="305" width="1123.8" height="15.0" fill="rgb(210,137,12)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="315.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >exec_options</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>wait (3 samples, 7.14%)</title><rect x="10.0" y="145" width="84.3" height="15.0" fill="rgb(210,45,29)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >wait</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>== (1 samples, 2.38%)</title><rect x="628.1" y="49" width="28.1" height="15.0" fill="rgb(249,196,34)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >==</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>digitgen (8 samples, 19.05%)</title><rect x="375.2" y="81" width="224.8" height="15.0" fill="rgb(216,168,42)" rx="2" ry="2" /> +<text text-anchor="" x="378.24" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >digitgen</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include (40 samples, 95.24%)</title><rect x="10.0" y="289" width="1123.8" height="15.0" fill="rgb(231,196,14)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="299.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:(:427 (1 samples, 2.38%)</title><rect x="487.6" y="65" width="28.1" height="15.0" fill="rgb(222,211,25)" rx="2" ry="2" /> +<text text-anchor="" x="490.62" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_show (14 samples, 33.33%)</title><rect x="319.0" y="145" width="393.4" height="15.0" fill="rgb(249,118,35)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_show</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>all (42 samples, 100%)</title><rect x="10.0" y="337" width="1180.0" height="15.0" fill="rgb(227,47,12)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="347.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (1 samples, 2.38%)</title><rect x="262.9" y="177" width="28.1" height="15.0" fill="rgb(249,20,16)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >p..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>f (40 samples, 95.24%)</title><rect x="10.0" y="225" width="1123.8" height="15.0" fill="rgb(225,149,36)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="235.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >f</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>dividemodulointbignum! (1 samples, 2.38%)</title><rect x="1161.9" y="321" width="28.1" height="15.0" fill="rgb(225,226,17)" rx="2" ry="2" /> +<text text-anchor="" x="1164.90" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >d..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>roundweed (1 samples, 2.38%)</title><rect x="403.3" y="65" width="28.1" height="15.0" fill="rgb(224,87,23)" rx="2" ry="2" /> +<text text-anchor="" x="406.33" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >r..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>binexp_cache (1 samples, 2.38%)</title><rect x="600.0" y="81" width="28.1" height="15.0" fill="rgb(240,108,23)" rx="2" ry="2" /> +<text text-anchor="" x="603.00" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >b..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>process_events (3 samples, 7.14%)</title><rect x="10.0" y="129" width="84.3" height="15.0" fill="rgb(224,197,23)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >process_e..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><rect x="459.5" y="49" width="28.1" height="15.0" fill="rgb(227,157,27)" rx="2" ry="2" /> +<text text-anchor="" x="462.52" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:)):442 (1 samples, 2.38%)</title><rect x="571.9" y="33" width="28.1" height="15.0" fill="rgb(247,182,14)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="43.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><rect x="656.2" y="129" width="28.1" height="15.0" fill="rgb(212,221,44)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><rect x="656.2" y="113" width="28.1" height="15.0" fill="rgb(226,31,4)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>show (14 samples, 33.33%)</title><rect x="319.0" y="161" width="393.4" height="15.0" fill="rgb(216,117,52)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >show</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:)):448 (1 samples, 2.38%)</title><rect x="571.9" y="49" width="28.1" height="15.0" fill="rgb(236,43,23)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="59.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><rect x="684.3" y="97" width="28.1" height="15.0" fill="rgb(221,16,24)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>resize! (1 samples, 2.38%)</title><rect x="234.8" y="177" width="28.1" height="15.0" fill="rgb(228,99,15)" rx="2" ry="2" /> +<text text-anchor="" x="237.76" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >r..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>Type (1 samples, 2.38%)</title><rect x="740.5" y="177" width="28.1" height="15.0" fill="rgb(230,13,7)" rx="2" ry="2" /> +<text text-anchor="" x="743.48" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >T..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (1 samples, 2.38%)</title><rect x="262.9" y="145" width="28.1" height="15.0" fill="rgb(238,175,1)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >u..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (1 samples, 2.38%)</title><rect x="684.3" y="129" width="28.1" height="15.0" fill="rgb(246,103,2)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >p..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_start (40 samples, 95.24%)</title><rect x="10.0" y="321" width="1123.8" height="15.0" fill="rgb(216,157,19)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_start</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>ensureroom (1 samples, 2.38%)</title><rect x="262.9" y="129" width="28.1" height="15.0" fill="rgb(211,146,4)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >e..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_deleteend! (1 samples, 2.38%)</title><rect x="234.8" y="161" width="28.1" height="15.0" fill="rgb(226,189,43)" rx="2" ry="2" /> +<text text-anchor="" x="237.76" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include (40 samples, 95.24%)</title><rect x="10.0" y="257" width="1123.8" height="15.0" fill="rgb(206,59,22)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="267.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:)):603 (1 samples, 2.38%)</title><rect x="571.9" y="65" width="28.1" height="15.0" fill="rgb(233,4,40)" rx="2" ry="2" /> +<text text-anchor="" x="574.90" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>grisu (12 samples, 28.57%)</title><rect x="319.0" y="129" width="337.2" height="15.0" fill="rgb(216,60,13)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >grisu</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (3 samples, 7.14%)</title><rect x="10.0" y="209" width="84.3" height="15.0" fill="rgb(234,183,30)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="219.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>tostr_sizehint (1 samples, 2.38%)</title><rect x="712.4" y="177" width="28.1" height="15.0" fill="rgb(222,77,3)" rx="2" ry="2" /> +<text text-anchor="" x="715.38" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >t..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>top-level scope (40 samples, 95.24%)</title><rect x="10.0" y="241" width="1123.8" height="15.0" fill="rgb(208,107,50)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="251.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >top-level scope</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (15 samples, 35.71%)</title><rect x="291.0" y="177" width="421.4" height="15.0" fill="rgb(254,214,41)" rx="2" ry="2" /> +<text text-anchor="" x="293.95" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>StringVector (5 samples, 11.90%)</title><rect x="824.8" y="145" width="140.4" height="15.0" fill="rgb(241,12,52)" rx="2" ry="2" /> +<text text-anchor="" x="827.76" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >StringVector</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>include_relative (40 samples, 95.24%)</title><rect x="10.0" y="273" width="1123.8" height="15.0" fill="rgb(210,188,32)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="283.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >include_relative</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./int.jl:(:49 (1 samples, 2.38%)</title><rect x="656.2" y="81" width="28.1" height="15.0" fill="rgb(229,171,10)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><rect x="600.0" y="65" width="28.1" height="15.0" fill="rgb(205,78,21)" rx="2" ry="2" /> +<text text-anchor="" x="603.00" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>write (1 samples, 2.38%)</title><rect x="262.9" y="161" width="28.1" height="15.0" fill="rgb(252,102,14)" rx="2" ry="2" /> +<text text-anchor="" x="265.86" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >w..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>normalize (1 samples, 2.38%)</title><rect x="628.1" y="65" width="28.1" height="15.0" fill="rgb(220,60,11)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >n..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>/home/simsc266/TDDE45/lab5/lab5-metaprogramming-and-debugging-lab/julia/julia-1.0.4/bin/../share/julia/base/./operators.jl:):286 (1 samples, 2.38%)</title><rect x="656.2" y="97" width="28.1" height="15.0" fill="rgb(238,73,43)" rx="2" ry="2" /> +<text text-anchor="" x="659.19" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >/..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>unsafe_write (3 samples, 7.14%)</title><rect x="10.0" y="177" width="84.3" height="15.0" fill="rgb(240,56,0)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >unsafe_wr..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>print (3 samples, 7.14%)</title><rect x="10.0" y="193" width="84.3" height="15.0" fill="rgb(224,187,41)" rx="2" ry="2" /> +<text text-anchor="" x="13.00" y="203.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >print</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>normalizedbound (1 samples, 2.38%)</title><rect x="628.1" y="81" width="28.1" height="15.0" fill="rgb(245,79,41)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >n..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>string (37 samples, 88.10%)</title><rect x="94.3" y="209" width="1039.5" height="15.0" fill="rgb(240,188,35)" rx="2" ry="2" /> +<text text-anchor="" x="97.29" y="219.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >string</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>== (1 samples, 2.38%)</title><rect x="628.1" y="33" width="28.1" height="15.0" fill="rgb(243,76,40)" rx="2" ry="2" /> +<text text-anchor="" x="631.10" y="43.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >==</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>grisu (12 samples, 28.57%)</title><rect x="319.0" y="113" width="337.2" height="15.0" fill="rgb(248,92,1)" rx="2" ry="2" /> +<text text-anchor="" x="322.05" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >grisu</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>_thisind_str (1 samples, 2.38%)</title><rect x="768.6" y="177" width="28.1" height="15.0" fill="rgb(230,135,38)" rx="2" ry="2" /> +<text text-anchor="" x="771.57" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>+ (1 samples, 2.38%)</title><rect x="459.5" y="65" width="28.1" height="15.0" fill="rgb(213,178,17)" rx="2" ry="2" /> +<text text-anchor="" x="462.52" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >+</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>#IOBuffer#302 (12 samples, 28.57%)</title><rect x="796.7" y="161" width="337.1" height="15.0" fill="rgb(238,209,33)" rx="2" ry="2" /> +<text text-anchor="" x="799.67" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >#IOBuffer#302</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>Type (12 samples, 28.57%)</title><rect x="796.7" y="177" width="337.1" height="15.0" fill="rgb(218,23,48)" rx="2" ry="2" /> +<text text-anchor="" x="799.67" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Type</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>compare (1 samples, 2.38%)</title><rect x="1133.8" y="321" width="28.1" height="15.0" fill="rgb(241,222,3)" rx="2" ry="2" /> +<text text-anchor="" x="1136.81" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >c..</text> +</g> +<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"> +<title>write (1 samples, 2.38%)</title><rect x="684.3" y="113" width="28.1" height="15.0" fill="rgb(232,78,27)" rx="2" ry="2" /> +<text text-anchor="" x="687.29" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >w..</text> +</g> +</svg> diff --git a/profiling/test.jl b/profiling/test.jl index 9ac19b19f16b39f154c3800f23077ab3103d6343..99d691d8e8e84f04f5a6d28073b72cf8f55e9b01 100644 --- a/profiling/test.jl +++ b/profiling/test.jl @@ -1,14 +1,16 @@ using Profile using BenchmarkTools using Random +using StatProfilerHTML function f() lst = rand(50000) for i in lst - s = "List entry $(i)\r" # The \r makes it so the terminal isn't filled + if i > 0.99 + s = "List entry $(i)\r" # The \r makes it so the terminal isn't filled print(s) end @@ -17,6 +19,7 @@ end @profile f() Profile.print() +statprofilehtml() f() @time f()