/* +------------------------------------------------------------------ | FUNCTION : MakeMethod | INPUT : const char * : naam van de methode (Dylan syntax) | PRIM : primitive (C naam) | ... : variabel aantal argumenten | OUTPUT : - | RETURN : - | DATE : | | ABSTRACT : Toevoegen van een primitive methode aan de | methode dictionnary. | | CHANGES : +------------------------------------------------------------------ */ void MakeMethod( const char *MethodName, PRIM g , DylanObject *obj, ...) { List<Parameter *> *ParList ; va_list args ; DylanObject *AnObject ; Method *Primitive ; int Counter = 0 ; ParList = new List<Parameter *> ; ParList->AppendItem( new Parameter( (parameter_types) obj->ReturnParaType(), "dummy", new ConstRef(obj), (char *) NULL )) ; va_start( args, obj ) ; AnObject = va_arg( args, DylanObject * ) ; while ( AnObject != NULL ) { ParList->AppendItem( new Parameter( (parameter_types) AnObject->ReturnParaType(), "dummy", new ConstRef(AnObject), (char *) NULL )) ; AnObject = va_arg( args, DylanObject * ) ; } Primitive = new Method( MethodName, ParList, g ) ; MethodDict.InsertMethod( Primitive, 0 ) ; }
/* +------------------------------------------------------------------ | FUNCTION : local_apply | INPUT : function : een methode | list : een lijst van argumenten | OUTPUT : - | RETURN : een object | DATE : | | ABSTRACT : Uitvoeren van de functie f over een lijst van | argumenten | | CHANGES : +------------------------------------------------------------------ */ DylanObject *local_apply( function *f, list *lijst ) { DylanObject *Arg[255] ; // 255 argumenten lijkt mij een voldoende limitatie List<DylanObject *> *P ; int i ; P = new List<DylanObject *> ; for( i = 0; i < lijst->Size(); i++ ) { Arg[i+1] = lijst->GetElement(i) ; P->AppendItem(lijst->GetElement(i) ) ; } return apply( f, f->GetEnv(),P,Arg,NULL ) ; }