Advanced syntax
Method declarations
A method can be declared indented under a model prefixed with the fn keyword and potentially the static keyword as well, in which case it is put before fn, i.e. static fn. The fn keyword is followed by the name of the method followed by a parameter list. After the parameter list follows an optional return value consisting of a right arrow -> and the return type.
The parameter list is wrapped with parenthesis, (), and each parameter is separated by a comma ,. Each parameter is defined by a name followed by : and a type.
Foo:
x is Real: 1.0
ModelWithMethods:
fn my_method(x: Real, y: Foo, z: Bool[]) -> Int
static fn my_static_method() -> Foo
# Methods without return types are special and cannot be called from within OpenPLX
static fn my_void_method(foo: Foo)
fn onInit()
Operator overloads
To declare an operator overload use the operator keyword followed by the operator to overload, +, -, * or / followed by a parameter list.
Foo:
x is Real: 1.0
Bar:
y is Int: 2.0
operator +(lhs: Foo, rhs: Foo) -> Foo
operator -(unary: Foo) -> Foo
operator -(lhs: Foo, rhs: Bar) -> Foo
operator *(lhs: Bar, rhs: Foo) -> Bar
operator /(lhs: Foo, rhs: Foo) -> Bar
Grammar
method → INDENT ("static")? "fn" IDENTIFIER "(" params? ")" ("->" typeref)
operator → "operator" ("+" | "-" | "*" | "/") "(" params? ")" ("->" typeref)
params → IDENTIFIER ":" typeref ( "," IDENTIFIER ":" typeref )*
typeref → (IDENTIFIER ".")* IDENTIFIER ("[]")?