|
Subject: [OpenJade patch] map-constructor From: Matthias Clasen <clasen@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 18 Jun 1999 23:41:07 +0200 |
Just to keep the CVS maintainers busy, one more little patch.
This one implements map-constructor from 12.4.3.
--- jade-1.2.1/style/primitive.h Wed Oct 7 07:16:34 1998
+++ jade-1.2.1+/style/primitive.h Fri Jun 18 22:20:52 1999
@@ -61,6 +61,7 @@
PRIMITIVE(Literal, "literal", 0, 0, 1)
PRIMITIVE(ProcessChildren, "process-children", 0, 0, 0)
PRIMITIVE(ProcessChildrenTrim, "process-children-trim", 0, 0, 0)
+PRIMITIVE(MapConstructor, "map-constructor", 2, 0, 0)
PRIMITIVE(SosofoAppend, "sosofo-append", 0, 0, 1)
PRIMITIVE(NextMatch, "next-match", 0, 1, 0)
PRIMITIVE(EmptySosofo, "empty-sosofo", 0, 0, 0)
--- jade-1.2.1/style/primitive.cxx Wed Oct 7 07:16:34 1998
+++ jade-1.2.1+/style/primitive.cxx Fri Jun 18 22:39:47 1999
@@ -1848,6 +1862,43 @@
return new (interp) ProcessNodeListSosofoObj(nl, context.processingMode);
}
+DEFPRIMITIVE(MapConstructor, argc, argv, context, interp, loc)
+{
+ FunctionObj *func = argv[0]->asFunction();
+ if (!func)
+ return argError(interp, loc,
+ InterpreterMessages::notAProcedure, 0, argv[0]);
+ if (func->totalArgs() > 0) {
+ interp.message(InterpreterMessages::tooManyArgs);
+ return interp.makeError();
+ }
+ NodeListObj *nl = argv[1]->asNodeList();
+ if (!nl)
+ return argError(interp, loc,
+ InterpreterMessages::notANodeList, 1, argv[1]);
+ AppendSosofoObj *obj = new (interp) AppendSosofoObj;
+ NodePtr nd;
+ ELObj *ret;
+ while (nd = nl->nodeListFirst(context, interp)) {
+ nl = nl->nodeListRest(context, interp);
+ {
+ EvalContext::CurrentNodeSetter cns(nd, context.processingMode, context);
+ InsnPtr insn(func->makeCallInsn(0, interp, loc, InsnPtr()));
+ VM vm(context, interp);
+ ret = vm.eval(insn.pointer());
+ }
+ if (interp.isError(ret)) {
+ return interp.makeError();
+ }
+ SosofoObj *sosofo = ret->asSosofo();
+ if (!sosofo) {
+ return interp.makeError();
+ }
+ obj->append(sosofo);
+ }
+ return obj;
+}
+
static
void reverse(StringC &s)
{
--
Matthias Clasen,
Tel. 0761/203-5606
Email: clasen@xxxxxxxxxxxxxxxxxxxxxxxxxx
Mathematisches Institut, Albert-Ludwigs-Universitaet Freiburg
DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: OpenJade News, DPawson | Thread | [OpenJade] List of missing pieces, Matthias Clasen |
| RE: Generating high-level formattin, Sebastian Rahtz | Date | [OpenJade] List of missing pieces, Matthias Clasen |
| Month |