From 20a3d6d17b30ccb94694e6b3f91cb0b95f6fc9a5 Mon Sep 17 00:00:00 2001 From: Ian Piumarta Date: Wed, 22 Mar 2023 17:47:13 +0900 Subject: [PATCH] Add everyExternalDeclaration() and ensure(). --- src/ccmeta.leg | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/ccmeta.leg b/src/ccmeta.leg index 457f64f..e257667 100644 --- a/src/ccmeta.leg +++ b/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);