scrml.dev v0.7.1
Reference › Errors

E-SCOPE-001

An identifier is not declared in scope — commonly a reactive read missing its @.

Error Compile-time SPEC §5.2 (normative)

What it means

The most frequent cause is a reactive cell read without its sigil. Reactive reads must be written @name: the sigil is what tells the compiler to wire a dependency edge, and without it the emitted code references an undefined local rather than the cell. The compiler recognises this specific shape and names the cell you probably meant. The code also covers genuinely undeclared identifiers.

Minimal reproducer

This is the exact source compiled against the linked compiler and verified to produce E-SCOPE-001.

<program title="p">
    <count> = 0
    const <double> = count * 2
    <p>${@double}</p>
</>

How to fix

  1. Add the @ sigil. count * 2 becomes @count * 2. Reactivity is opt-in by notation — there is no implicit capture.
  2. Declare the identifier if it really is missing. A local needs const/let; a reactive cell needs a <name> = init declaration.

Related

Specification

Normative text: §5.2, §6.2, §23.3, §55.10, §34. Spec lives at compiler/SPEC.md .

← Reference