mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-20 14:09:12 +02:00
pas2js: safecall for procedure
git-svn-id: trunk@45417 -
This commit is contained in:
parent
fef402f6e6
commit
f74eb4692f
@ -2178,8 +2178,15 @@ function(){
|
|||||||
rtl = {
|
rtl = {
|
||||||
...
|
...
|
||||||
createCallback: function(scope, fn){
|
createCallback: function(scope, fn){
|
||||||
var cb = function(){
|
var cb;
|
||||||
return scope[fn].apply(scope,arguments);
|
if (typeof(fn)==='string'){
|
||||||
|
cb = function(){
|
||||||
|
return scope[fn].apply(scope,arguments);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
cb = function(){
|
||||||
|
return fn.apply(scope,arguments);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
cb.scope = scope;
|
cb.scope = scope;
|
||||||
cb.fn = fn;
|
cb.fn = fn;
|
||||||
@ -2195,9 +2202,18 @@ rtl = {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>You can assign a nested procedure to procedure variable.
|
<li>You can assign a nested procedure to procedure variable.
|
||||||
You don't need and you must not add the FPC "<i>is nested</i>" modifier.</li>
|
You don't need and you must not add the FPC "<i>is nested</i>" modifier.</li>
|
||||||
<li>A procedural typed declared as 'reference to' accepts in pas2js procedures,
|
<li>In pas2js a procedural typed declared as <i>'reference to'</i> accepts procedures,
|
||||||
local procedures and methods. Delphi only supports capturing procedures and methods.
|
local procedures and methods. Delphi only supports capturing procedures and methods.
|
||||||
FPC 3.0.4 does not support reference-to.</li>
|
FPC 3.0.4 does not support reference-to.</li>
|
||||||
|
<li>In pas2js the calling convention <i>safecall</i> has a special meaning:<br>
|
||||||
|
Assigning a procedure/method, uses <i>rtl.createSafeCallback</i> instead of
|
||||||
|
<i>createCallback</i>, enclosing a call in a <i>try..catch</i> block. When
|
||||||
|
an exception is thrown by JS, it is caught and delegated to
|
||||||
|
<i>rtl.handleUncaughtException(err)</i>.<br>
|
||||||
|
For example:<br>
|
||||||
|
<i>aButtonElement.OnClick:=@DoClick;</i> uses <i>rtl.createSafeCallback</i><br>
|
||||||
|
<i>aButtonElement.OnClick:=SomeElement.OnClick;</i> does not.<br>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user