コード例 #1
0
ファイル: Type.cpp プロジェクト: orochisam/emojicode
Type Type::resolveOnSuperArgumentsAndConstraints(const TypeContext &typeContext) const {
    if (typeContext.calleeType().type() == TypeType::NoReturn) {
        return *this;
    }
    TypeDefinition *c = typeContext.calleeType().typeDefinition();
    Type t = *this;
    if (type() == TypeType::NoReturn) {
        return t;
    }
    bool optional = t.optional();
    bool box = t.storageType() == StorageType::Box;

    // Try to resolve on the generic arguments to the superclass.
    while (t.type() == TypeType::GenericVariable && t.genericVariableIndex() < c->superGenericArguments().size()) {
        t = c->superGenericArguments()[t.genericArgumentIndex_];
    }
    while (t.type() == TypeType::LocalGenericVariable && typeContext.function() == t.localResolutionConstraint_) {
        t = typeContext.function()->constraintForIndex(t.genericArgumentIndex_);
    }
    while (t.type() == TypeType::GenericVariable
           && typeContext.calleeType().typeDefinition()->canBeUsedToResolve(t.typeDefinition())) {
        t = typeContext.calleeType().typeDefinition()->constraintForIndex(t.genericArgumentIndex_);
    }

    if (optional) {
        t.setOptional();
    }
    if (box) {
        t.forceBox_ = true;
    }
    return t;
}
コード例 #2
0
ファイル: PortType.c プロジェクト: kYc0o/kevoree-c
TypeDefinition* newPoly_PortType()
{
	PortType* pPortTypeObj = NULL;
	TypeDefinition* pObj = new_TypeDefinition();

	/* Allocating memory */
	pPortTypeObj = (PortType*)malloc(sizeof(PortType));

	if (pPortTypeObj == NULL)
	{
		pObj->Delete(pObj);
		return NULL;
	}

	pObj->pDerivedObj = pPortTypeObj; /* Pointing to derived object */
	pPortTypeObj->super = pObj;
	
	pPortTypeObj->synchrone = -1;

	pObj->super->metaClassName = PortType_metaClassName;
	pObj->internalGetKey = PortType_internalGetKey;
	pObj->VisitAttributes = PortType_VisitAttributes;
	pObj->VisitPathAttributes = PortType_VisitPathAttributes;
	pObj->VisitReferences = TypeDefinition_VisitReferences;
	pObj->VisitPathReferences = TypeDefinition_VisitPathReferences;
	pObj->FindByPath = PortType_FindByPath;
	
	pObj->Delete = deletePoly_PortType;

	return pObj;
}
コード例 #3
0
ファイル: NodeType.c プロジェクト: Jean-Emile/kevoree-contiki
TypeDefinition* newPoly_NodeType()
{
	NodeType* pNodeTypeObj = NULL;
	TypeDefinition* pObj = new_TypeDefinition();

	/* Allocating memory */
	pNodeTypeObj = (NodeType*)malloc(sizeof(NodeType));

	if (pNodeTypeObj == NULL)
	{
		pObj->Delete(pObj);
		return NULL;
	}

	pObj->pDerivedObj = pNodeTypeObj; /* Pointing to derived object */

	pObj->MetaClassName = NodeType_MetaClassName;
	pObj->InternalGetKey = NodeType_InternalGetKey;
	pObj->VisitAttributes = NodeType_VisitAttributes;
	pObj->VisitReferences = TypeDefinition_VisitReferences;
	
	pObj->Delete = deletePoly_NodeType;

	return pObj;
}
コード例 #4
0
ファイル: ComponentType.c プロジェクト: kYc0o/kevoree-contiki
TypeDefinition* newPoly_ComponentType(void)
{
	ComponentType* pCompTypeObj = NULL;
	TypeDefinition* pObj = new_TypeDefinition();

	if(pObj == NULL)
		return NULL;

	/* Allocating memory */
	pCompTypeObj = (ComponentType*)malloc(sizeof(ComponentType));

	if (pCompTypeObj == NULL)
	{
		pObj->Delete(pObj);
		return NULL;
	}

	pObj->pDerivedObj = pCompTypeObj; /* Pointing to derived object */
	pCompTypeObj->super = pObj;

	pCompTypeObj->eContainer = NULL;
	pCompTypeObj->path = NULL;
	pCompTypeObj->refs = NULL;
	pCompTypeObj->required = NULL;
	pCompTypeObj->provided = NULL;

	pCompTypeObj->FindRequiredByID = ComponentType_FindRequiredByID;
	pCompTypeObj->FindProvidedByID = ComponentType_FindProvidedByID;
	pCompTypeObj->AddRequired = ComponentType_AddRequired;
	pCompTypeObj->AddProvided = ComponentType_AddProvided;
	pCompTypeObj->RemoveRequired = ComponentType_RemoveRequired;
	pCompTypeObj->RemoveProvided = ComponentType_RemoveProvided;

	pCompTypeObj->metaClassName = ComponentType_metaClassName;
	pCompTypeObj->internalGetKey = ComponentType_internalGetKey;
	pCompTypeObj->VisitAttributes = ComponentType_VisitAttributes;
	pCompTypeObj->VisitPathAttributes = ComponentType_VisitPathAttributes;
	pCompTypeObj->VisitReferences = ComponentType_VisitReferences;
	pCompTypeObj->VisitPathReferences = ComponentType_VisitPathReferences;

	pObj->super->metaClassName = ComponentType_metaClassName;
	pObj->internalGetKey = ComponentType_internalGetKey;
	pObj->VisitAttributes = ComponentType_VisitAttributes;
	pObj->VisitReferences = ComponentType_VisitReferences;
	pObj->FindByPath = ComponentType_FindByPath;

	pObj->Delete = deletePoly_ComponentType;

	return pObj;
}
コード例 #5
0
ファイル: Type.cpp プロジェクト: orochisam/emojicode
Type Type::resolveReferenceToBaseReferenceOnSuperArguments(const TypeContext &typeContext) const {
    TypeDefinition *c = typeContext.calleeType().typeDefinition();
    Type t = *this;

    // Try to resolve on the generic arguments to the superclass.
    while (t.type() == TypeType::GenericVariable && c->canBeUsedToResolve(t.typeDefinition()) &&
           t.genericVariableIndex() < c->superGenericArguments().size()) {
        Type tn = c->superGenericArguments()[t.genericVariableIndex()];
        if (tn.type() == TypeType::GenericVariable && tn.genericVariableIndex() == t.genericVariableIndex()
            && tn.typeDefinition() == t.typeDefinition()) {
            break;
        }
        t = tn;
    }
    return t;
}
コード例 #6
0
ファイル: TypeRegistry.cpp プロジェクト: lynxis/libavg
void TypeRegistry::registerType(const TypeDefinition& def, const char* pParentNames[])
{
    m_TypeDefs.insert(TypeDefMap::value_type(def.getName(), def));

    if (pParentNames) {
        string sChildArray[1];
        sChildArray[0] = def.getName();
        vector<string> sChildren = vectorFromCArray(1, sChildArray);
        const char **ppCurParentName = pParentNames;

        while (*ppCurParentName) {
            TypeDefinition def = getTypeDef(*ppCurParentName);
            def.addChildren(sChildren);
            updateDefinition(def);

            ++ppCurParentName;
        }
    }
}
コード例 #7
0
ファイル: TypeRegistry.cpp プロジェクト: lynxis/libavg
void TypeRegistry::writeTypeDTD(const TypeDefinition& def, stringstream& ss) const
{
    ss << "<!ELEMENT " << def.getName() << " " << def.getDTDChildrenString() << " >\n";
    if (!def.getDefaultArgs().getArgMap().empty()) {
        ss << "<!ATTLIST " << def.getName();
        for (ArgMap::const_iterator argIt = def.getDefaultArgs().getArgMap().begin(); 
            argIt != def.getDefaultArgs().getArgMap().end(); argIt++)
        {
            string argName = argIt->first;
            string argType = (argName == "id") ? "ID" : "CDATA";
            string argRequired = def.getDefaultArgs().getArg(argName)->isRequired() ?
                    "#REQUIRED" : "#IMPLIED";
            ss << "\n    " << argName << " " << argType << " " << argRequired;
        }
        ss << " >\n";
    }
}
コード例 #8
0
ファイル: TypeRegistry.cpp プロジェクト: lynxis/libavg
void TypeRegistry::updateDefinition(const TypeDefinition& def)
{
    m_TypeDefs[def.getName()] = def;
}
コード例 #9
0
void DebugBootstrapTest::testBug(){

	DefaultkevoreeFactory factory;
	ContainerRoot   *model = factory.createContainerRoot();
	ContainerRoot   *model2 = factory.createContainerRoot();

	CPPUNIT_ASSERT(model != NULL);
	CPPUNIT_ASSERT(model2 != NULL);

	DeployUnit *d =factory.createDeployUnit();
	d->name = "CPPNodeType";
	d->groupName = "org.kevoree.library";
	d->version = "1.0";
	d->type ="elf32-i386";


	TypeDefinition *nodetype = factory.createNodeType();
	nodetype->name = "CPPNode";
	nodetype->abstract= false;
	nodetype->adddeployUnit(d);


	DeployUnit *dg =factory.createDeployUnit();
	dg->name = "kevoree-group-websocket";
	dg->groupName = "org.kevoree.library";
	dg->version = "1.0";
	dg->type ="elf32-i386";

	TypeDefinition *grouptype = factory.createGroupType();
	grouptype->abstract= false;
	grouptype->name ="w";
	grouptype->version = "1";

	DictionaryType *typegroup= factory.createDictionaryType();
	DictionaryAttribute *attport = factory.createDictionaryAttribute();
	attport->optional = false;
	attport->datatype = "int";
	attport->fragmentDependant = true;
	attport->name ="port";
	attport->defaultValue = "9000";
	typegroup->addattributes(attport);

	grouptype->adddictionaryType(typegroup);

	grouptype->adddeployUnit(dg);


	ContainerNode *node0 = factory.createContainerNode();
	node0->name = "node0";
	node0->started = true;


	Group *group = factory.createGroup();
	group->name ="g0";
	group->started = true;
	group->addtypeDefinition(grouptype);

	FragmentDictionary *dico =factory.createFragmentDictionary();

	dico->name ="node0";
	DictionaryValue *valport = factory.createDictionaryValue();
	valport->name ="port";
	valport->value ="9000";

	dico->addvalues(valport);

	group->addfragmentDictionary(dico);

	TypeDefinition *comtype  = factory.createComponentType();
	comtype->name = "comp";
	comtype->abstract = false;

	DeployUnit *dc =factory.createDeployUnit();
	dc->name = "HelloWorldComponent";
	dc->groupName = "org.kevoree.library";
	dc->version = "1.0";
	dc->type ="elf32-i386";

	comtype->adddeployUnit(dc);

	ComponentInstance *c2 = factory.createComponentInstance();
	c2->name ="HelloWorldComponent0";
	c2->started = true;

	node0->addtypeDefinition(nodetype);

	model->addtypeDefinitions(grouptype);
	model->addtypeDefinitions(nodetype);
	model->addtypeDefinitions(comtype);

	model->adddeployUnits(d);
	model->adddeployUnits(dg);
	model->adddeployUnits(dc);

	c2->addtypeDefinition(comtype);
	model->addnodes(node0);

	model->addgroups(group);
	group->addsubNodes(node0);
	node0->addgroups(group);

	ModelCompare *compare= new ModelCompare();
	TraceSequence *sequencediff = compare->diff(model,model);
	TraceSequence *sequenceinter = compare->inter(model,model);
	TraceSequence *sequencemerge = compare->merge(model,model);

	TraceSequence *sequencediff2 = compare->diff(model2,model);
//	std::cout << sequencediff2->exportToString() << std::endl;

	CPPUNIT_ASSERT(sequencediff2->traces.size()  != 0);
	CPPUNIT_ASSERT(sequencediff->traces.size()  == 0);
	CPPUNIT_ASSERT(sequenceinter->traces.size()  ==70);
	CPPUNIT_ASSERT(sequencemerge->traces.size()  ==0);



}