[Pas2js] '&' Prefix support

warley camargo warleyalex at yahoo.com.br
Mon May 14 17:17:26 CEST 2018


Let's say in your application, move your cursor beyond the . (period character) 
after the TJSUint8Array statement, and press Ctrl+Space. The Code Completion window appears.
Locate the "of" method. Uh... there's an ugly "_of" undercore method, hit ENTER your code will 
be completed to:

-------------------------
var
  compressed_UInt8Array: TJSUint8Array;
begin
  compressed_UInt8Array := TJSUint8Array._of(1,2,3);


---------------------------
Now, try putting the "&" prefix rather than "_" prefix to all indentifiers declared in the JS.pas unit, 
e.g. 
  TJSUint8Array  = class external name 'Uint8Array' (TJSTypedArray)
  private
    {...}
  public
    {...}
    class function &of(aValue : jsValue) : TJSUInt8Array; varargs;external name 'of';
  end;

  TJSPromise = class external name 'Promise'
    {...}
    function &then (onAccepted : TJSPromiseResolver) : TJSPromise; external name 'then';
    function catch (onRejected : TJSPromiseResolver) : TJSPromise;
    function &finally(value : TJSPromiseFinallyHandler): TJSPromise;
  end;


The consequence is that you should see the "correct identifier" when the code completion 
apperars, when you hit ENTER, you've got the code completed with the ugly "&of" method.


Pas2JS compiler, could do some black magic, at compile-time evaluations, to support for
the ‘&’ escape prefix to allow using reserved words as identifiers. 

I think it's a good practice to prefix all Pascal identifies with an & prefix, 
usually declared in external classes, so the pas2js compiler can correctly compile the code,
it won't get name conflict, just because have already evaluated the identifier, for instance in:

  compressed_UInt8Array := TJSUint8Array.of(1,2,3);
  //  or
  defer
    .then(@_doTask1)
    .then(@_doTask2)
    .then(@_doTask3);


More information about the Pas2js mailing list