polserver/testsuite/escript/classes/super-multiple-01.src
Kevin Eady 59046fdc7c
Normalize TypeOf and TypeOfInt return value for ClassInstanceRef (#821)
* implementation

* tests

* docs and core changes

* fix tests due to cmake 4 update
2025-09-29 08:55:48 +02:00

47 lines
1.4 KiB
Text

class BaseClass1()
function BaseClass1( this, arg0, arg1 )
print( $"BaseClass1 arg0={arg0} arg1={arg1}" );
this.base1 := { this.base1 ?: {} ..., { arg0, arg1 } };
endfunction
endclass
class BaseClass2()
function BaseClass2( this, arg0 )
print( $"BaseClass2 arg0={arg0}" );
// this.base2 := arg0;
this.base2 := { this.base2 ?: {} ..., { arg0 } };
endfunction
endclass
class Foo( BaseClass1, BaseClass2 )
function Foo( this, arg0 )
// Will "expand" arguments in order
super( "unscoped-arg0", "unscoped-arg1", "unscoped-arg2" );
print( "---" );
// Can be scoped ...
super( BaseClass1::arg0:= "scoped-c1.arg0", BaseClass1::arg1:= "scoped-c1.arg1",
BaseClass2::arg0:= "scoped-c2.arg0" );
print( "---" );
// ... in any order, eg. putting Class2 first
super( BaseClass2::arg0:= "scoped-c2.arg0", BaseClass1::arg0:= "scoped-c1.arg0",
BaseClass1::arg1:= "scoped-c1.arg1" );
print( "---" );
// And do not need to scope uniquely-named arguments (arg1)
super( BaseClass2::arg0:= "scoped-c2.arg0", arg1 := "scoped-c1.arg1",
BaseClass1::arg0:= "scoped-c1.arg0" );
print( "---" );
this.child := arg0;
endfunction
endclass
var obj := Foo( "foo" );
// We'll see that obj.base1 always contains a value of *-arg0/1, and obj.base2
// will have "unscoped-arg2" and scoped arg0s
foreach key in obj
print( $"{_key_iter}={key}" );
endforeach