about summary refs log tree commit diff stats
path: root/themes/aqua
blob: a0f7fb91218ea568abcd66684b427f3f3bf859b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
[colours]
bkgnd=default
titlebar=blue
titlebar.text=bold_white
titlebar.brackets=white
titlebar.unencrypted=cyan
titlebar.encrypted=white
titlebar.untrusted=cyan
titlebar.trusted=white
titlebar.online=bold_white
titlebar.offline=cyan
titlebar.away=white
titlebar.chat=bold_white
titlebar.dnd=cyan
titlebar.xa=bold_cyan
statusbar=blue
statusbar.text=bold_white
statusbar.brackets=white
statusbar.active=cyan
statusbar.new=white
main.text=blue
main.text.me=bold_cyan
main.text.them=bold_white
main.splash=bold_white
main.time=cyan
input.text=white
subscribed=bold_cyan
unsubscribed=blue
otr.started.trusted=white
otr.started.untrusted=cyan
otr.ended=cyan
otr.trusted=white
otr.untrusted=cyan
online=bold_cyan
away=bold_blue
chat=white
dnd=blue
xa=cyan
offline=bold_black
incoming=bold_cyan
mention=bold_blue
trigger=bold_blue
typing=cyan
gone=blue
error=bold_white
roominfo=white
roommention=bold_blue
roommention.term=bold_blue
roomtrigger=bold_blue
roomtrigger.term=bold_blue
me=cyan
them=white
roster.header=bold_white
roster.chat=white
roster.online=bold_cyan
roster.away=bold_blue
roster.xa=cyan
roster.dnd=blue
roster.offline=bold_black
roster.chat.active=white
roster.online.active=bold_cyan
roster.away.active=bold_blue
roster.xa.active=cyan
roster.dnd.active=blue
roster.offline.active=bold_black
roster.chat.unread=white
roster.online.unread=bold_cyan
roster.away.unread=bold_blue
roster.xa.unread=cyan
roster.dnd.unread=blue
roster.offline.unread=bold_black
roster.room=cyan
roster.room.unread=bold_cyan
roster.room.mention=bold_blue
roster.room.trigger=bold_blue
occupants.header=bold_white
receipt.sent=white
ation' href='/akkartik/mu/commit/html/099hardware_checks.cc.html?h=hlt&id=2c678a4e1d7f97c862342ee19cf2d6ee6e901d85'>2c678a4e ^
9e751bb8 ^
2c678a4e ^
9e751bb8 ^
1c2d788b ^
9e751bb8 ^















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130











                                                                                                               


                                                                                                 


                                       
                             



                                  
                                                        


                               
                                                                           



























































                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                      









                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                           

                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   



                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                















                                                                                                                                                     
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 099hardware_checks.cc</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
a { color:#eeeeee; text-decoration: none; }
a:hover { text-decoration: underline; }
* { font-size: 12pt; font-size: 1em; }
.Constant { color: #00a0a0; }
.muRecipe { color: #ff8700; }
.Conceal { color: #4e4e4e; }
.traceContains { color: #008000; }
.Special { color: #c00000; }
.Comment { color: #9090ff; }
.Comment a { color:#0000ee; text-decoration:underline; }
.Delimiter { color: #800080; }
.LineNr { color: #444444; }
.Identifier { color: #c0a020; }
.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
.cSpecial { color: #008000; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: Let's raise errors when students use real hardware in any functions</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">//: besides 'main'. Part of the goal is to teach them testing hygiene and</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">//: dependency injection.</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">//:</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment">//: This is easy to sidestep, it's for feedback rather than safety.</span>
<span id="L6" class="LineNr"> 6 </span>
<span id="L7" class="LineNr"> 7 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L8" class="LineNr"> 8 </span>vector&lt;type_tree*&gt; Real_hardware_types<span class="Delimiter">;</span>
<span id="L9" class="LineNr"> 9 </span><span class="Delimiter">:(before &quot;Begin transform_all&quot;)</span>
<span id="L10" class="LineNr">10 </span><a href='099hardware_checks.cc.html#L14'>setup_real_hardware_types</a><span class="Delimiter">();</span>
<span id="L11" class="LineNr">11 </span><span class="Delimiter">:(before &quot;End transform_all&quot;)</span>
<span id="L12" class="LineNr">12 </span><a href='099hardware_checks.cc.html#L25'>teardown_real_hardware_types</a><span class="Delimiter">();</span>
<span id="L13" class="LineNr">13 </span><span class="Delimiter">:(code)</span>
<span id="L14" class="LineNr">14 </span><span class="Normal">void</span> <a href='099hardware_checks.cc.html#L14'>setup_real_hardware_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L15" class="LineNr">15 </span>  Real_hardware_types<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='099hardware_checks.cc.html#L19'>parse_type</a><span class="Delimiter">(</span><span class="Constant">&quot;address:screen&quot;</span><span class="Delimiter">));</span>
<span id="L16" class="LineNr">16 </span>  Real_hardware_types<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='099hardware_checks.cc.html#L19'>parse_type</a><span class="Delimiter">(</span><span class="Constant">&quot;address:console&quot;</span><span class="Delimiter">));</span>
<span id="L17" class="LineNr">17 </span>  Real_hardware_types<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='099hardware_checks.cc.html#L19'>parse_type</a><span class="Delimiter">(</span><span class="Constant">&quot;address:resources&quot;</span><span class="Delimiter">));</span>
<span id="L18" class="LineNr">18 </span><span class="Delimiter">}</span>
<span id="L19" class="LineNr">19 </span>type_tree* <a href='099hardware_checks.cc.html#L19'>parse_type</a><span class="Delimiter">(</span>string s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L20" class="LineNr">20 </span>  reagent x<span class="Delimiter">(</span><span class="Constant">&quot;x:&quot;</span>+s<span class="Delimiter">);</span>
<span id="L21" class="LineNr">21 </span>  type_tree* result = x<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
<span id="L22" class="LineNr">22 </span>  x<span class="Delimiter">.</span>type = <span class="Constant">NULL</span><span class="Delimiter">;</span>  <span class="Comment">// don't deallocate on return</span>
<span id="L23" class="LineNr">23 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L24" class="LineNr">24 </span><span class="Delimiter">}</span>
<span id="L25" class="LineNr">25 </span><span class="Normal">void</span> <a href='099hardware_checks.cc.html#L25'>teardown_real_hardware_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L26" class="LineNr">26 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Real_hardware_types<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
<span id="L27" class="LineNr">27 </span>  <span class="Conceal">¦</span> <span class="Normal">delete</span> Real_hardware_types<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L28" class="LineNr">28 </span>  Real_hardware_types<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
<span id="L29" class="LineNr">29 </span><span class="Delimiter">}</span>
<span id="L30" class="LineNr">30 </span>
<span id="L31" class="LineNr">31 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
<span id="L32" class="LineNr">32 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='099hardware_checks.cc.html#L34'>check_for_misuse_of_real_hardware</a><span class="Delimiter">);</span>
<span id="L33" class="LineNr">33 </span><span class="Delimiter">:(code)</span>
<span id="L34" class="LineNr">34 </span><span class="Normal">void</span> <a href='099hardware_checks.cc.html#L34'>check_for_misuse_of_real_hardware</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L35" class="LineNr">35 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
<span id="L36" class="LineNr">36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L37" class="LineNr">37 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L38" class="LineNr">38 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check if <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has any dependency-injection mistakes&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L39" class="LineNr">39 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L40" class="LineNr">40 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L41" class="LineNr">41 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation &lt; <a href='010vm.cc.html#L191'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L42" class="LineNr">42 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L43" class="LineNr">43 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; ing = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L44" class="LineNr">44 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>ing<span class="Delimiter">)</span> || ing<span class="Delimiter">.</span>name != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L45" class="LineNr">45 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
<span id="L46" class="LineNr">46 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L47" class="LineNr">47 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L48" class="LineNr">48 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; expected_ing = callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L49" class="LineNr">49 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Real_hardware_types<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L50" class="LineNr">50 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>*Real_hardware_types<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> == *expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span>
<span id="L51" class="LineNr">51 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L158'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
<span id="L52" class="LineNr">52 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L53" class="LineNr">53 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L54" class="LineNr">54 </span>  <span class="Delimiter">}</span>
<span id="L55" class="LineNr">55 </span><span class="Delimiter">}</span>
<span id="L56" class="LineNr">56 </span>
<span id="L57" class="LineNr">57 </span><span class="Delimiter">:(scenarios transform)</span>
<span id="L58" class="LineNr">58 </span><span class="Delimiter">:(scenario warn_on_using_real_screen_directly_in_non_main_recipe)</span>
<span id="L59" class="LineNr">59 </span><span class="Special">% Hide_errors = true;</span>
<span id="L60" class="LineNr">60 </span><span class="muRecipe">def</span> foo [
<span id="L61" class="LineNr">61 </span>  print <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
<span id="L62" class="LineNr">62 </span>]
<span id="L63" class="LineNr">63 </span><span class="traceContains">+error: foo: 'print 0, 34': only 'main' can pass 0 into a (address screen)</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->