Skip to content

Error: internal error: yield in expr not lowered #13583

@Ethosa

Description

@Ethosa

Reduced example (from the comment below):

proc hello(): int {.discardable.} = 12

iterator test(): int {.closure.} =
  while true:
    yield 12
    hello()

let t = test

Original issue:

A very strange error appears when I use the SDL2 library (https://github.com/nim-lang/sdl2):

Error: internal error: yield in expr not lowered
No stack traceback available
To create a stacktrace, rerun compilation with ./koch temp c <file>

Here's how it appears:

method setText*(edittext: EditTextRef, text: cstring) {.async.} =
  ## Redraws the EditText's text.
  ##
  ## If text is empty, then draws hint with hint color.
  ##
  ## Arguments:
  ## -   ``text`` -- new text.
  if text.len == 0:
    edittext.text = text
    edittext.background.fillRect(nil, 0x00000000)
    blitSurface(edittext.saved_background, nil, edittext.background, nil)
    var rendered = edittext.font.renderUtf8BlendedWrapped(
      edittext.hint, await parseColor(edittext.hint_color.int), 1024)
    var rect = rect(edittext.x, edittext.y, rendered.w, rendered.h)
    # The error appears due to the line below
    blitSurface(rendered, nil, edittext.background, rect.addr)
  else:
    await procCall edittext.TextViewRef.setText(text)

How do I fix this error?
add discard after error line

method setText*(edittext: EditTextRef, text: cstring) {.async.} =
  ## Redraws the EditText's text.
  ##
  ## If text is empty, then draws hint with hint color.
  ##
  ## Arguments:
  ## -   ``text`` -- new text.
  if text.len == 0:
    edittext.text = text
    edittext.background.fillRect(nil, 0x00000000)
    blitSurface(edittext.saved_background, nil, edittext.background, nil)
    var rendered = edittext.font.renderUtf8BlendedWrapped(
      edittext.hint, await parseColor(edittext.hint_color.int), 1024)
    var rect = rect(edittext.x, edittext.y, rendered.w, rendered.h)
    blitSurface(rendered, nil, edittext.background, rect.addr)
    # When I add discard - the error disappears
    discard
  else:
    await procCall edittext.TextViewRef.setText(text)

How do I run the code?
nim c -r -d: release --showAllMismatches: on --hints: off --threads: on -d: ssl: on --opt: speed FILE.nim

OS: Windows, x64
Nim version: 1.0.6

Full code here: https://github.com/Ethosa/yukiko

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions