diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 839db6917f..ee9289f23c 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -481,6 +481,10 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) { } ast.SelectorExpr { // retrieve table.Field + if it.expr_type == 0 { + c.error('0 type in SelectorExpr', expr.position()) + return + } typ_sym := c.table.get_type_symbol(it.expr_type) match typ_sym.kind { .struct_ { diff --git a/vlib/v/tests/interface_test.v b/vlib/v/tests/interface_test.v index 78358ebcc1..6af3426508 100644 --- a/vlib/v/tests/interface_test.v +++ b/vlib/v/tests/interface_test.v @@ -56,22 +56,9 @@ fn test_perform_speak() { fn perform_speakers(speakers []Speaker) {} -/* -interface Speak2er { - name ()string - speak() - } - - -struct Foo { - speaker Speaker - speakers []Speaker -} - - - interface Register { - register()} + register() +} struct RegTest { a int @@ -82,12 +69,19 @@ fn (f RegTest) register() {} fn handle_reg(r Register) {} fn test_register() { - if true { - // QTODO - return - } f := RegTest{} f.register() handle_reg(f) } -*/ + +interface Speaker2 { + name() string + speak() +} + + +struct Foo { + //speaker Speaker + //speakers []Speaker +} +