Просмотр исходного кода

Add everyExternalDeclaration() and ensure().

master
Ian Piumarta 2 лет назад
Родитель
Сommit
20a3d6d17b
1 измененных файлов: 33 добавлений и 2 удалений
  1. +33
    -2
      src/ccmeta.leg

+ 33
- 2
src/ccmeta.leg Просмотреть файл

@ -3,7 +3,7 @@
# Copyright (c) 2016-2021 Ian Piumarta and other contributors (see AUTHORS)
# All rights reserved (see LICENSE)
#
# Last edited: 2023-03-22 17:37:51 by piumarta on zora-10.local
# Last edited: 2023-03-22 17:45:58 by piumarta on zora-10.local
%{
/* compile: leg -o ccmeta.c ccmeta.leg
@ -1325,6 +1325,38 @@ typedef enum {
language lang = C, printLang = C;
oop outputProgram= 0;
oop everyExternalDeclaration(oop s)
{
oop eed = map_get(globals, intern("everyExternalDeclaration"));
if (is(Function, eed)) {
s = apply(globals, globals, eed, makeArrayFromElement(s, 1), mrAST);
}
return s;
}
oop ensure(int id, oop s)
{
if (is(Map, s)) {
oop protoSymbol = map_get(s, __proto___symbol);
switch(id) {
case t_C_id: {
if (map_get(protoSymbol, __name___symbol) != map_get(C_id_proto, __name___symbol)) { // map_get for tree copy because __name__ : C_id != __name__ : C_id
fprintf(stderr, "Meta expression did not return required Id\n");
exit(1);
}
break;
}
default: {
fprintf(stderr, "ensure function: id not impleted");
exit(1);
}
}
}
return s;
}
oop clone(oop obj)
{
switch(getType(obj)) {
@ -3588,7 +3620,6 @@ oop evalArgs(oop scope, oop args)
}
oop AST= NULL;
oop outputProgram= 0;
void outputNode(oop node);
void printTree(oop element, language id);

Загрузка…
Отмена
Сохранить