module Savi::Program::Declarator::Bootstrap

Defined in:

savi/program/declarator/bootstrap.cr

Constant Summary

BOOTSTRAP_DECLARATORS = [Declarator.new_bootstrap("declarator", intrinsic: true, begins: ["declarator"], terms: [TermAcceptor::Typed.new(Source::Pos.none, "name", "Name")] of TermAcceptor), Declarator.new_bootstrap("intrinsic", intrinsic: true, context: "declarator"), Declarator.new_bootstrap("context", intrinsic: true, context: "declarator", terms: [TermAcceptor::Typed.new(Source::Pos.none, "name", "Name")] of TermAcceptor), Declarator.new_bootstrap("begins", intrinsic: true, context: "declarator", terms: [TermAcceptor::Typed.new(Source::Pos.none, "name", "Name")] of TermAcceptor), Declarator.new_bootstrap("term", intrinsic: true, context: "declarator", begins: ["declarator_term"], terms: [TermAcceptor::Typed.new(Source::Pos.none, "name", "Name"), TermAcceptor::Typed.new(Source::Pos.none, "type", "Term")] of TermAcceptor)]

This is the minimal set of "bootstrap" declarators needed for declaring the declarators used for declaring declarators.

We must declare them here instead of in Savi code like the others, because these must be in place before we can declare anything in Savi code. We then remove them from circulation once the "real" ones are in place.

See the explanation in meta_declarators.savi for more information about the reasoning and intention behind the bootstrapping process.