[BACK]Return to tree.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan / Kclass

Diff for /OpenXM/src/kan96xx/Kan/Kclass/tree.c between version 1.1 and 1.8

version 1.1, 2003/11/21 02:10:37 version 1.8, 2005/06/16 05:07:24
Line 1 
Line 1 
 /* $OpenXM$ */  /* $OpenXM: OpenXM/src/kan96xx/Kan/Kclass/tree.c,v 1.7 2003/12/06 02:49:22 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
 #include "../datatype.h"  #include "../datatype.h"
 #include "../stackm.h"  #include "../stackm.h"
Line 11  struct object KpoTree(struct object ob) {
Line 11  struct object KpoTree(struct object ob) {
   
 /* Data conversion function : see KclassDataConversion*/  /* Data conversion function : see KclassDataConversion*/
 struct object KpoTree(struct object ob) {  struct object KpoTree(struct object ob) {
   struct object rob;    struct object rob = OINIT;
   struct object ob1,ob2,ob3;    struct object ob1 = OINIT;
     struct object ob2 = OINIT;
     struct object ob3 = OINIT;
   struct object *newobp;    struct object *newobp;
   rob.tag = Sclass;    rob.tag = Sclass;
   rob.lc.ival = CLASSNAME_tree;    rob.lc.ival = CLASSNAME_tree;
   newobp = (struct object *) sGC_malloc(sizeof(struct object));    newobp = (struct object *) sGC_malloc(sizeof(struct object));
   if (newobp == NULL) errorKan1("%s\n","Kclass/indeterminate.c, no more memory.");    if (newobp == NULL) errorKan1("%s\n","Kclass/indeterminate.c, no more memory.");
   if (ob.tag != Sarray) {    if (ob.tag != Sarray) {
     errorKan1("%s\n","Kclass/indeterminate.c, only properly formatted list object can be transformed into tree. [name, cdname, arglist].");      errorKan1("%s\n","Kclass/indeterminate.c, only properly formatted list object can be transformed into tree. [name, attr-list, arglist].");
   }    }
   if (getoaSize(ob) < 3) {    if (getoaSize(ob) < 3) {
     errorKan1("%s\n","Kclass/indeterminate.c, the length must 3 or more than 3. [name, cdname, arglist].");      errorKan1("%s\n","Kclass/indeterminate.c, the length must 3 or more than 3. [name, attr-list, arglist].");
   }    }
   ob1 = getoa(ob,0); ob2 = getoa(ob,1); ob3 = getoa(ob,2);    ob1 = getoa(ob,0); ob2 = getoa(ob,1); ob3 = getoa(ob,2);
   if (ob1.tag != Sdollar || ob2.tag != Sarray || ob3.tag != Sarray) {    if (ob1.tag != Sdollar || ob2.tag != Sarray || ob3.tag != Sarray) {
     errorKan1("%s\n","Kclass/indeterminate.c, [string name, list attributes, list arglist].");      errorKan1("%s\n","Kclass/indeterminate.c, [string name, list attributes, list arglist].");
   }    }
   *newobp = ob;    *newobp = ob;   /* Add class-tag to the array */
   rob.rc.voidp = newobp;    rob.rc.voidp = newobp;
   return(rob);    return(rob);
 }  }
Line 41  int isTreeAdd(struct object ob) {
Line 43  int isTreeAdd(struct object ob) {
 }  }
   
 int isTreeAdd(struct object ob) {  int isTreeAdd(struct object ob) {
   struct object name;    struct object name = OINIT;
   if (ob.tag != Sclass) {    if (ob.tag != Sclass) {
     return(0);      return(0);
   }    }
Line 56  int isTreeAdd(struct object ob) {
Line 58  int isTreeAdd(struct object ob) {
   if (name.tag != Sdollar) {    if (name.tag != Sdollar) {
     errorKan1("%s\n","CLASSNAME_tree is broken. Should be string.");      errorKan1("%s\n","CLASSNAME_tree is broken. Should be string.");
   }    }
   if (strcmp(KopString(name),"add") == 0) {    if (strcmp(KopString(name),"plus") == 0) {
     return(1);      return(1);
   }else{    }else{
     return(0);      return(0);
Line 65  struct object addTree(struct object ob1, struct object
Line 67  struct object addTree(struct object ob1, struct object
   
 struct object addTree(struct object ob1, struct object ob2)  struct object addTree(struct object ob1, struct object ob2)
 {  {
   struct object rob,aob;    struct object rob = OINIT;
   struct object ob3,ob4;    struct object aob = OINIT;
     struct object ob3 = OINIT;
     struct object ob4 = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   int i;    int i;
     to = ob2; ob2=ob1; ob1=to; /* Exchange ob1 and ob2 */
   if (isTreeAdd(ob1) && !isTreeAdd(ob2)) {    if (isTreeAdd(ob1) && !isTreeAdd(ob2)) {
     ob1 = KopTree(ob1);      ob1 = KopTree(ob1);
     ob3 = getoa(ob1,2);      ob3 = getoa(ob1,2);
Line 101  struct object addTree(struct object ob1, struct object
Line 109  struct object addTree(struct object ob1, struct object
     putoa(aob,0,ob1);      putoa(aob,0,ob1);
     putoa(aob,1,ob2);      putoa(aob,1,ob2);
   }    }
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
   rob = newObjectArray(3);    rob = newObjectArray(3);
   putoa(rob,0,KpoString("add"));    putoa(rob,0,KpoString("plus"));
   putoa(rob,1,KpoString("basic"));    putoa(rob,1,attr);
   putoa(rob,2,aob);    putoa(rob,2,aob);
   return(KpoTree(rob));    return(KpoTree(rob));
 }  }
   struct object minusTree(struct object ob1,struct object ob2) {
     struct object rob = OINIT;
     struct object aob = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   
     rob = NullObject;
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     aob = newObjectArray(2);
     putoa(aob,0,ob1);
     putoa(aob,1,ob2);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
     rob = newObjectArray(3);
     putoa(rob,0,KpoString("minus"));
     putoa(rob,1,attr);
     putoa(rob,2,aob);
     return(KpoTree(rob));
     return(rob);
   }
   struct object timesTree(struct object ob1,struct object ob2) {
     struct object rob = OINIT;
     struct object aob = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   
 /*------------------------------------------*/    rob = NullObject;
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     aob = newObjectArray(2);
     putoa(aob,0,ob1);
     putoa(aob,1,ob2);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
     rob = newObjectArray(3);
     putoa(rob,0,KpoString("times"));
     putoa(rob,1,attr);
     putoa(rob,2,aob);
     return(KpoTree(rob));
     return(rob);
   }
   struct object divideTree(struct object ob1,struct object ob2) {
     struct object rob = OINIT;
     struct object aob = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   
     rob = NullObject;
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     aob = newObjectArray(2);
     putoa(aob,0,ob1);
     putoa(aob,1,ob2);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
     rob = newObjectArray(3);
     putoa(rob,0,KpoString("divide"));
     putoa(rob,1,attr);
     putoa(rob,2,aob);
     return(KpoTree(rob));
     return(rob);
   }
   struct object powerTree(struct object ob1,struct object ob2) {
     struct object rob = OINIT;
     struct object aob = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   
     rob = NullObject;
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     aob = newObjectArray(2);
     putoa(aob,0,ob1);
     putoa(aob,1,ob2);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
     rob = newObjectArray(3);
     putoa(rob,0,KpoString("power"));
     putoa(rob,1,attr);
     putoa(rob,2,aob);
     return(KpoTree(rob));
     return(rob);
   }
   struct object unaryminusTree(struct object ob1) {
     struct object rob = OINIT;
     struct object aob = OINIT;
     struct object attr = OINIT;
     struct object keyValue = OINIT;
     struct object to = OINIT;
   
     rob = NullObject;
     attr = newObjectArray(1);
     keyValue = newObjectArray(2);
     aob = newObjectArray(1);
     putoa(aob,0,ob1);
     putoa(keyValue,0,KpoString("cd"));
     putoa(keyValue,1,KpoString("arith1"));
     putoa(attr,0,keyValue);
     rob = newObjectArray(3);
     putoa(rob,0,KpoString("unaryminus"));
     putoa(rob,1,attr);
     putoa(rob,2,aob);
     return(KpoTree(rob));
     return(rob);
   }
   
   /* XML DOM-like interfaces */
   struct object KtreeGetDocumentElement(struct object to) {
     struct object rob = OINIT;
     struct object ob = OINIT;
     if (to.tag != Sclass) errorKan1("%s\n","KtreeGetDocumentElement");
     if (ectag(to) != CLASSNAME_tree) errorKan1("%s\n","KtreeGetDocumentElement");
     ob = KopTree(to);
     if (ob.tag != Sarray) errorKan1("%s\n","KtreeGetDocumentElement: not an array.");
     if (getoaSize(ob) != 3) errorKan1("%s\n","KtreeGetDocumentElement: array is broken.");
     ob=getoa(ob,0);
     if (ob.tag != Sdollar) errorKan1("%s\n","KtreeGetDocumentElement: element must be a string");
     return ob;
   }
   
   struct object KtreeGetAttributes(struct object to) {
     struct object rob = OINIT;
     struct object ob = OINIT;
     if (to.tag != Sclass) errorKan1("%s\n","KtreeGetAttributes:");
     if (ectag(to) != CLASSNAME_tree) errorKan1("%s\n","KtreeGetAttributes:");
     ob = KopTree(to);
     if (ob.tag != Sarray) errorKan1("%s\n","KtreeGetAttributes: not an array.");
     if (getoaSize(ob) != 3) errorKan1("%s\n","KtreeGetAttributes: array is broken.");
     return getoa(ob,1);
   }
   
   struct object KtreeGetChildNodes(struct object to) {
     struct object rob = OINIT;
     struct object ob = OINIT;
     if (to.tag != Sclass) errorKan1("%s\n","KtreeGetChildNodes:");
     if (ectag(to) != CLASSNAME_tree) errorKan1("%s\n","KtreeGetChildNodes:");
     ob = KopTree(to);
     if (ob.tag != Sarray) errorKan1("%s\n","KtreeGetChildNodes: not an array.");
     if (getoaSize(ob) != 3) errorKan1("%s\n","KtreeGetChildNodes: array is broken.");
     return getoa(ob,2);
   }
   
   struct object KtreeCreateElement(struct object ostr) {
     struct object ob = OINIT;
     if (ostr.tag != Sdollar) errorKan1("%s\n","KtreeCreateElement: not a string.");
     ob = newObjectArray(3);
     getoa(ob,0)=ostr;
     getoa(ob,1) = newObjectArray(0);
     getoa(ob,2) = newObjectArray(0);
     return KpoTree(ob);
   }
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.8

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>