blob: 0e92245b509e4e542668ebcc47e3b78320058a47 [file] [log] [blame]
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="../css/ot.css" />
<link rel="stylesheet" type="text/css" href="../css/otjld.css" />
<title>OT/J Language Definition v1.3</title>
</head>
<body class="otdt">
<div id="content">
<table class="nav">
<tr>
<td class="back"><a id="top"></a><a href="s4.4.html" rel="prev">&lt;&lt;&nbsp;&sect;4.4&nbsp;Callin parameter mapping</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s4.6.html" rel="next">&sect;4.6&nbsp;Overriding access restrictions&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s4.html" rel="section">&sect;4&nbsp;Callin Binding</a></div>
<div class="sect depth2" id="s4.5">
<h2 class="sect">&sect;4.5&nbsp;Lifting and lowering<a class="img" href="s4.5.html"
title="PermaLink to &sect;4.5&nbsp;Lifting and lowering"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h2>
<p>For basic definition see <a href="s2.2.html" title="&sect;2.2&nbsp;Lowering" class="sect">&sect;2.2</a>
and <a href="s2.3.html" title="&sect;2.3&nbsp;Lifting" class="sect">&sect;2.3</a>.
<br />
(The following rules are reverse forms of those from <a href="s3.3.html" title="&sect;3.3&nbsp;Lifting and lowering" class="sect">&sect;3.3</a>)
</p>
<div class="subsect depth3" id="s4.5.a">
<h4 class="subsect">(a)&nbsp;<span class="title">Call target translation</span><a class="img" href="s4.5.a.html"
title="PermaLink to (a)&nbsp;Call target translation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>Invoking a role method due to a callin binding first
<strong>lifts</strong> the base object to the role class of the
callin binding, in order to obtain the effective call target.
This is why callin bindings cannot be defined in roles that are <em>unliftable</em>
due to <em>potential binding ambiguity</em> (see <a href="s4.1.b.html" title="&sect;4.1.(b)&nbsp;Prerequisite: Class binding"
class="sect">&sect;4.1.(b)</a>
above and <a href="s2.3.4.a.html" title="&sect;2.3.4.(a)&nbsp;Potential ambiguity"
class="sect">&sect;2.3.4.(a)</a>).
</p>
</div>
<div class="subsect depth3" id="s4.5.b">
<h4 class="subsect">(b)&nbsp;<span class="title">Parameter translation</span><a class="img" href="s4.5.b.html"
title="PermaLink to (b)&nbsp;Parameter translation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>During callin execution, each parameter for which the role method expects a role
object is implicitly <strong>lifted</strong> to the declared role class.
</p>
</div>
<div class="subsect depth3" id="s4.5.c">
<h4 class="subsect">(c)&nbsp;<span class="title">Result translation</span><a class="img" href="s4.5.c.html"
title="PermaLink to (c)&nbsp;Result translation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>Returning a role object from a callin method implicitly
<strong>lowers</strong> this object.
</p>
</div>
<div class="subsect depth3" id="s4.5.d">
<h4 class="subsect">(d)&nbsp;<span class="title">Typing rules</span><a class="img" href="s4.5.d.html" title="PermaLink to (d)&nbsp;Typing rules"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>A parameter mapping (implicit by parameter position or explicit
by a <code>with</code> clause) is <strong>well typed</strong> if
the right hand side conforms to the left hand side, either by
</p>
<ul>
<li>type equality</li>
<li>implicit primitive type conversion</li>
<li>subtype polymorphism</li>
<li>translation polymorphism, here: <em>lifting</em>;<br />
however, within <code>replace</code> bindings step 1 of the smart lifting
algorithm (<a href="s2.3.3.a.html" title="&sect;2.3.3.(a)&nbsp;Static adjustment"
class="sect">&sect;2.3.3.(a)</a>) is not applicable
</li>
<li><em>or</em> by a combination of the above.
</li>
</ul>
<p>A result mapping (implicit or explicit by a <code>with</code> clause)
is well typed, if the value at the left hand conforms to the
right hand side according to the rules given above, except that
translation polymorphism here applies <em>lowering</em> instead of
lifting.
</p>
<p>
These rules define <strong>translation polymorphism</strong> as introduced in
<a href="s2.3.html" title="&sect;2.3&nbsp;Lifting" class="sect">&sect;2.3</a>.
</p>
<p>Additionally, in a <code>replace</code> callin binding compatibility of parameters and return
types must hold in both directions.
Thus, from the above list of conversions a replace binding cannot apply subtype polymorphism
nor primitive type conversion.
If more flexibility is desired, type parameters can be used as defined in <a href="s4.10.html" title="&sect;4.10&nbsp;Generic callin bindings"
class="sect">&sect;4.10</a>.
</p>
</div>
<div class="subsect depth3" id="s4.5.e">
<h4 class="subsect">(e)&nbsp;<span class="title">Role arrays</span><a class="img" href="s4.5.e.html" title="PermaLink to (e)&nbsp;Role arrays"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>For arrays of roles as parameters <a href="s2.3.d.html" title="&sect;2.3.(d)&nbsp;Lifting of arrays"
class="sect">&sect;2.3.(d)</a> applies
accordingly. For arrays as return value <a href="s2.2.e.html" title="&sect;2.2.(e)&nbsp;Lowering of arrays"
class="sect">&sect;2.2.(e)</a> applies.
</p>
</div>
<div class="subsect depth3" id="s4.5.f">
<h4 class="subsect">(f)&nbsp;<span class="title">Base calls</span><a class="img" href="s4.5.f.html" title="PermaLink to (f)&nbsp;Base calls"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>For base calls these rules are reversed again, i.e., a
base call behaves like a callout binding.
</p>
</div>
</div>
<table class="nav">
<tr>
<td class="back"><a href="s4.4.html" rel="prev">&lt;&lt;&nbsp;&sect;4.4&nbsp;Callin parameter mapping</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s4.6.html" rel="next">&sect;4.6&nbsp;Overriding access restrictions&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s4.html" rel="section">&sect;4&nbsp;Callin Binding</a></div>
</div>
<div id="footer">
<hr /><a class="w3c img" href="http://jigsaw.w3.org/css-validator/check/referer"
shape="rect"><img src="../images/valid-css2-blue.png" alt="Valid CSS!" height="31" width="88" /></a><a class="w3c img" href="http://validator.w3.org/check?uri=referer" shape="rect"><img src="../images/valid-xhtml10-blue.png" alt="Valid XHTML 1.0 Strict" height="31"
width="88" /></a><address>&copy; Stephan Herrmann, Christine Hundt, Marco Mosconi</address>
OT/J version 1.3 &mdash; last modified: 2010-06-08
</div>
</body>
</html>