/*
$ tks class_virtualdispatch_network2.tks
-----------------------------------
class = Layer
Layer::consumeAction
Layer::consumeAction
-----------------------------------
class = TableCellEditor
Layer::consumeAction
Layer::consumeAction
Layer::consumeAction
as Layer:
Layer::consumeAction
Layer::consumeAction
-----------------------------------
class = FloatParamEditor
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
as Layer:
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
-----------------------------------
class = TableCellEditorFloatParam
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
as Layer:
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
as TableCellEditor:
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
as FloatParamEditor:
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
FloatParamEditor::consumeAction
*/
module Main;
class Layer {
public method consumeAction() {
trace "Layer::consumeAction";
}
x() { consumeAction(); }
}
class TableCellEditor : Layer {
y() { consumeAction(); }
}
class FloatParamEditor : Layer {
public virtual consumeAction() {
trace "FloatParamEditor::consumeAction";
}
z() { consumeAction(); }
}
class TableCellEditorFloatParam : TableCellEditor, FloatParamEditor {
w() { consumeAction(); }
}
trace "-----------------------------------";
trace "class = Layer";
Layer l;
l.consumeAction();
l.x();
trace "\n";
trace "-----------------------------------";
trace "class = TableCellEditor";
TableCellEditor tce;
tce.consumeAction();
tce.x();
tce.y();
trace " as Layer:";
l <= tce;
l.consumeAction();
l.x();
trace "\n";
trace "-----------------------------------";
trace "class = FloatParamEditor";
FloatParamEditor fpe;
fpe.consumeAction();
fpe.x();
fpe.z();
trace " as Layer:";
l <= fpe;
l.consumeAction();
l.x();
trace "\n";
trace "-----------------------------------";
trace "class = TableCellEditorFloatParam";
TableCellEditorFloatParam tcefp;
tcefp.consumeAction();
tcefp.x();
tcefp.y();
tcefp.z();
trace " as Layer:";
l <= tcefp;
l.consumeAction();
l.x();
trace " as TableCellEditor:";
tce <= tcefp;
tce.consumeAction();
tce.x();
tce.y();
trace " as FloatParamEditor:";
fpe <= tcefp;
fpe.consumeAction();
fpe.x();
fpe.z();