From efb0d5f4f92dd7712d963353c4a0817b7ff205a8 Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 3 Sep 2021 11:20:38 +0300 Subject: [PATCH] PICodeParser predefined PIP macros --- libs/main/code/picodeparser.cpp | 43 ++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/libs/main/code/picodeparser.cpp b/libs/main/code/picodeparser.cpp index 98954099..1e519117 100644 --- a/libs/main/code/picodeparser.cpp +++ b/libs/main/code/picodeparser.cpp @@ -190,6 +190,31 @@ void PICodeParser::clear() { piForeachC (PIString & d, defs) defines << Define(d, ""); defines << Define(PIStringAscii("PICODE"), "") << custom_defines; + macros << Macro(PIStringAscii("PIOBJECT"), "", PIStringList() << "name") + << Macro(PIStringAscii("PIOBJECT_PARENT"), "", PIStringList() << "parent") + << Macro(PIStringAscii("PIOBJECT_SUBCLASS"), "", PIStringList() << "name" << "parent") + + << Macro(PIStringAscii("EVENT" ), "void name()", PIStringList() << "name") + << Macro(PIStringAscii("EVENT0"), "void name()", PIStringList() << "name") + << Macro(PIStringAscii("EVENT1"), "void name(a0 n0)", PIStringList() << "name" << "a0" << "n0") + << Macro(PIStringAscii("EVENT2"), "void name(a0 n0, a1 n1)", PIStringList() << "name" << "a0" << "n0" << "a1" << "n1") + << Macro(PIStringAscii("EVENT3"), "void name(a0 n0, a1 n1, a2 n2)", PIStringList() << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2") + << Macro(PIStringAscii("EVENT4"), "void name(a0 n0, a1 n1, a2 n2, a3 n3)", PIStringList() << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2" << "a3" << "n3") + + << Macro(PIStringAscii("EVENT_HANDLER" ), "ret name()", PIStringList() << "ret" << "name") + << Macro(PIStringAscii("EVENT_HANDLER0"), "ret name()", PIStringList() << "ret" << "name") + << Macro(PIStringAscii("EVENT_HANDLER1"), "ret name(a0 n0)", PIStringList() << "ret" << "name" << "a0" << "n0") + << Macro(PIStringAscii("EVENT_HANDLER2"), "ret name(a0 n0, a1 n1)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1") + << Macro(PIStringAscii("EVENT_HANDLER3"), "ret name(a0 n0, a1 n1, a2 n2)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2") + << Macro(PIStringAscii("EVENT_HANDLER4"), "ret name(a0 n0, a1 n1, a2 n2, a3 n3)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2" << "a3" << "n3") + + << Macro(PIStringAscii("EVENT_VHANDLER" ), "virtual ret name()", PIStringList() << "ret" << "name") + << Macro(PIStringAscii("EVENT_VHANDLER0"), "virtual ret name()", PIStringList() << "ret" << "name") + << Macro(PIStringAscii("EVENT_VHANDLER1"), "virtual ret name(a0 n0)", PIStringList() << "ret" << "name" << "a0" << "n0") + << Macro(PIStringAscii("EVENT_VHANDLER2"), "virtual ret name(a0 n0, a1 n1)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1") + << Macro(PIStringAscii("EVENT_VHANDLER3"), "virtual ret name(a0 n0, a1 n1, a2 n2)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2") + << Macro(PIStringAscii("EVENT_VHANDLER4"), "virtual ret name(a0 n0, a1 n1, a2 n2, a3 n3)", PIStringList() << "ret" << "name" << "a0" << "n0" << "a1" << "n1" << "a2" << "n2" << "a3" << "n3") + ; } @@ -1052,10 +1077,10 @@ PIString PICodeParser::procMacros(PIString fc) { bool PICodeParser::parseDirective(PIString d) { - static const PIString s_include = PIStringAscii("include"); - static const PIString s_define = PIStringAscii("define"); - static const PIString s_undef = PIStringAscii("undef"); - static const PIString s_PIMETA = PIStringAscii("PIMETA"); + static const PIString s_include = PIStringAscii("include"); + static const PIString s_define = PIStringAscii("define"); + static const PIString s_undef = PIStringAscii("undef"); + static const PIString s_PIMETA = PIStringAscii("PIMETA"); if (d.isEmpty()) return true; PIString dname = d.takeCWord(); //piCout << "parseDirective" << d; @@ -1074,9 +1099,19 @@ bool PICodeParser::parseDirective(PIString d) { if (mname == s_PIMETA) return true; if (d.left(1) == PIChar('(')) { // macro PIStringList args = d.takeRange('(', ')').split(',').trim(); + for (int i = 0; i < macros.size_s(); ++i) + if (macros[i].name == mname) { + macros.remove(i); + break; + } macros << Macro(mname, d.trim(), args); } else { // define d.trim(); + for (int i = 0; i < defines.size_s(); ++i) + if (defines[i].first == mname) { + defines.remove(i); + break; + } defines << Define(mname, d); evaluator.setVariable(mname, complexd_1); }