Skip to content

Commit

Permalink
Линкер генерирует функции для ADT:: и Ident:: (Mazdaywik/Refal-05#28)
Browse files Browse the repository at this point in the history
Для совместимости профиля Рефала-5 с Рефалом-05 добавлена генерация
функций для идентификаторов, создаваемых для АДТ и идентификаторов
Модульного Рефала.

Функция имеет вид

Имя {
  Explode = 'Квалифицированное::Имя::Сущности';
}

Так что такие имена можно вызывать как <Mu s.Name Explode> и получать их
текстовое представление. Если это, конечно, когда-нибудь понадобится.
  • Loading branch information
Mazdaywik committed Nov 19, 2019
1 parent 8c76a82 commit 9a9c922
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions Sources/Compiler/BE-Refal5/MLinker.mref
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,12 @@ AddRequest {
t.UnitStorage 'Swap::' e.Name =
<AddRequestAux t.UnitStorage 'Swap::' e.Name>;

t.UnitStorage 'ADT::' e.Name =
<AddRequestAux t.UnitStorage 'ADT::' e.Name>;

t.UnitStorage 'Ident::' e.Name =
<AddRequestAux t.UnitStorage 'Ident::' e.Name>;

t.UnitStorage e.OtherName =
t.UnitStorage;
}
Expand Down Expand Up @@ -315,11 +321,31 @@ GetNextUnit {
t.Linked
] ((e.NextName s.Hash) e.Body);

[UnitStorage (Requests ('ADT::' e.Name) e.Requests) t.Units t.Linked] =
[UnitStorage (Requests e.Requests) t.Units t.Linked]
<MakeGhostUnit 'ADT::' e.Name>;

[UnitStorage (Requests ('Ident::' e.Name) e.Requests) t.Units t.Linked] =
[UnitStorage (Requests e.Requests) t.Units t.Linked]
<MakeGhostUnit 'Ident::' e.Name>;

[UnitStorage (Requests (e.NextName s.Hash) e.Requests) t.Units t.Linked] =
[UnitStorage (Requests (e.NextName s.Hash) e.Requests) t.Units t.Linked]
UnresolvedName e.NextName;
}

MakeGhostUnit {
e.Name =
(
(e.Name)
(('$' e.Name) ' { Explode = ' ('' <DropHash e.Name>) '; }')
);
}

DropHash {
e.Name s.Hash = e.Name;
}

/**
<NotLinkedList-D t.UnitStorage>
== t.UnitStorage (e.NotLinkedUnitName)*
Expand Down

0 comments on commit 9a9c922

Please sign in to comment.