E07430: return not required/supported in this context

Category: E07xxx Full resolution · Reported in phase: EXPLICIT_TYPE_SYMBOL_DEFINITION · Classification: RETURN_VALUE_NOT_SUPPORTED · All error codes

What went wrong

A value is returned where nothing may be. Two declarations carry no return: a constructor, which makes the object and gives nothing back, and an operator that changes the object in place (':=:', ':^:', ':~:', '+=', '-=', '++', '--') which also returns nothing.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 118 (How do I implement the builder pattern in EK9?)

How to fix it

  1. Remove the returning declaration ('<- rtn as ...') from the constructor or in-place operator
  2. If a result is needed, use a method that returns it, or an operator that is meant to return one

Common causes

  • Adding '<- rtn as ...' to a constructor
  • Declaring ':=:' or '+=' as if it produced a new value
  • Copying a method signature into an operator

See also

  • E07430: a return on a constructor or in-place operator (this error)
  • E07400: missing return declaration

Examples

Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.

Fails with E07430: return not required/supported in this context

#!ek9
defines module error.e07430.bad

  defines class

    Wallet
      amount <- 0.0

      holding() as pure
        <- rtn as Float: amount

      //Copy changes this object in place; it returns nothing
      default operator ?

      operator :=:
        -> other as Wallet
        <- rtn as Float: other.holding()

Fixed: Remove the returning declaration

#!ek9
defines module error.e07430.good

  defines class

    Wallet
      amount <- 0.0

      holding() as pure
        <- rtn as Float: amount

      default operator ?

      operator :=:
        -> other as Wallet
        amount :=: other.holding()

Questions and answers

These Q&A entries show E07430 and its fix: