[fpc-pascal] Next language feature for pas2js...
Michael Van Canneyt
michael at freepascal.org
Tue May 1 10:17:56 CEST 2018
On Tue, 1 May 2018, Ryan Joseph wrote:
>
>
>> On May 1, 2018, at 2:03 PM, Michael Van Canneyt <michael at freepascal.org> wrote:
>>
>> Of sorts.
>> MyClass = Class external name 'my'
>> const
>> MyConst : integer
>> end;
>>
>> Will emit MyClass.MyConst. The compiler needs to know the type.
>
> I’m confused now. The class is named WebGLRenderingContext in JS (I think
> that’s what it’s called by JS doesn’t really have classes does it?) so how
> does it look?
See below.
>
> // no external name because the names are the same
That is only so for methods and fields. I corrected the class below:
type
WebGLRenderingContext = class external name 'WebGLRenderingContext'
procedure clearColor (red, green, blue, alpha: GLfloat);
end;
>
> So constants must be part of the class? In the example below gl.COLOR_BUFFER_BIT is scoped to WebGLRenderingContext so I guess that’s the reason.
Yes.
Constants without expression can only exist in an external class.
>
> Also I mistyped, GLfloat is a type so how do this map to JS, or do I even need to since the names are the same?
You need to define types.
type
GLfloat = double;
>
> How does this JS translate to Pascal then? drawingBufferWidth are read only properties but no type is specified so how does Pascal handle all the untyped variables we see in JS?
This is pascal. You need a type.
https://www.khronos.org/registry/webgl/specs/latest/1.0/
shows that drawingBufferWidth has type GLsizei, which is a long.
If you don't know the type, use JSValue. It's the 'unknown type'. It has
limited possibilities, in essence you'll need to typecast a JSValue before
using it. You can assign JSValues of course.
Michael.
More information about the fpc-pascal
mailing list