当前位置: 首页>>代码示例>>C++>>正文


C++ FunctionNode类代码示例

本文整理汇总了C++中FunctionNode的典型用法代码示例。如果您正苦于以下问题:C++ FunctionNode类的具体用法?C++ FunctionNode怎么用?C++ FunctionNode使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了FunctionNode类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: evaluate

 virtual void evaluate( const FunctionNode& function ) {
     return;
     return;
     switch (function.getType()) {
         case FunctionNode::FT_MOVE :
         {
             //suma
             //                    int result = 0;
             //                    for (int i = 0; i < arity - 1; ++i) {
             //                        result += arguments[i]->getValue();
             //                    }
             //                    arguments[arity - 1]->setValue(result);
             //                    std::cout << function.toString() << std::endl;
             break;
         }
         case FunctionNode::FT_SWAP :
         {
             //resta
             //                    int result = 0;
             //                    for (int i = 0; i < arity - 1; ++i) {
             //                        result -= arguments[i]->getValue();
             //                    }
             //                    arguments[arity - 1]->setValue(result);
             break;
         }
         default: DEBUGM(TO_STRING(function.getType()));
             assert(0);
     }
 }
开发者ID:jcrada,项目名称:jcrada-creatures,代码行数:29,代码来源:GpModel.cpp

示例2: initVar

void ShaderCodeGenerator::writeFunction(const DoutSocket *socket)
{
    QString output;
    initVar(socket);
    output.append(newline());
    output.append(getVariable(socket));
    output.append(" = ");
    FunctionNode *fnode = (FunctionNode*)socket->getNode();
    output.append(fnode->getFunctionName());
    output.append("(");
    for(const DinSocket *nsocket : fnode->getInSockets())
    {
        if(nsocket->getToken())
        {
            output.append("\"");
            output.append(nsocket->getName());
            output.append("\", ");
        }
        output.append(writeVarName(nsocket));
        gotoNextNode(nsocket);
        if(!fnode->getInSockets().endsWith(const_cast<DinSocket*>(nsocket)))
            output.append(", ");
    }

    output.append(");");
    addToCode(output);
}
开发者ID:frigge,项目名称:MindTree,代码行数:27,代码来源:shaderwriter.cpp

示例3: varIt

void AstPrinterVisitor::visitBlockNode(BlockNode* node) {
    if (!isMainScope(node->scope())) {
        _output << "{" << endl;
    }

    Scope::VarIterator varIt(node->scope());
    while(varIt.hasNext()) {
        AstVar* var = varIt.next();
        printVarType(var->type());
        _output << " " << var->name();
        printSemicolon();
    }

    Scope::FunctionIterator funcIt(node->scope());
    while(funcIt.hasNext()) {
        FunctionNode* func = funcIt.next()->node();
        func->visit(this);
    }

    for (uint32_t i = 0; i < node->nodes(); ++i) {
        node->nodeAt(i)->visit(this);
        if (!(node->nodeAt(i)->isIfNode()
              || node->nodeAt(i)->isWhileNode()
              || node->nodeAt(i)->isForNode()
              || node->nodeAt(i)->isReturnNode()
              || node->nodeAt(i)->isBlockNode())) {
            printSemicolon();
        }
    }
    if (!isMainScope(node->scope())) {
        _output << "}" << endl;
    }
}
开发者ID:kamanov,项目名称:Shared,代码行数:33,代码来源:ast_printer.cpp

示例4: quickifyCommand

void QsCodeParser::setQuickDoc(Node *quickNode,
                               const Doc& doc,
                               const QStringList& qtParams,
                               const QStringList& quickParams)
{
    QRegExp quickifyCommand("\\\\" + COMMAND_QUICKIFY + "([^\n]*)(?:\n|$)");

    if (quickNode->type() == Node::Function) {
	FunctionNode *quickFunc = (FunctionNode *) quickNode;
	quickFunc->setOverload(false);
    }

    if (doc.metaCommandsUsed().contains(COMMAND_QUICKIFY)) {
	QString source = doc.source();
	int pos = source.indexOf(quickifyCommand);
	if (pos != -1) {
	    QString quickifiedSource = quickNode->doc().source();
	    if (!qtParams.isEmpty() && qtParams != quickParams)
		renameParameters(quickifiedSource, doc, qtParams,
				  quickParams);
	    applyReplacementList(quickifiedSource, doc);

	    do {
		QString extract = quickifiedSource;
		QString arg = quickifyCommand.cap(1).simplified();
		if (!arg.isEmpty()) {
		    if (arg.startsWith("/") && arg.endsWith("/") &&
			 arg.length() > 2) {
			QString pattern = arg.mid(1, arg.length() - 2);
			extractRegExp(QRegExp(pattern), extract, doc);
		    }
                    else {
			extractTarget(arg, extract, doc);
		    }
		}
		source.replace(pos, quickifyCommand.matchedLength(), extract);
		pos += extract.length();
	    } while ((pos = source.indexOf(quickifyCommand, pos)) != -1);

	    QRegExp quickcodeRegExp(
		    "\\\\" + COMMAND_QUICKCODE + "(.*)\\\\" +
		    COMMAND_ENDQUICKCODE);
	    quickcodeRegExp.setMinimal(true);
	    source.replace(quickcodeRegExp, "");
	}

	Doc quickDoc(doc.location(),
                     doc.location(),
                     source,
                     (CppCodeParser::topicCommands() + topicCommands() +
                      CppCodeParser::otherMetaCommands()) << COMMAND_REPLACE);
	quickNode->setDoc(quickDoc, true);
	processOtherMetaCommands(quickDoc, quickNode);
    }
    else {
	quickNode->setDoc(doc, true);
	processOtherMetaCommands(doc, quickNode);
    }
}
开发者ID:,项目名称:,代码行数:59,代码来源:

示例5: displayOpenTag

void
XmlRenderer::renderNode(const FunctionNode& node)
{
  displayOpenTag("function");
  displayNodeList("params", node.params());
  displayType("rettype", node.retType());
  displayNode("body", node.body().get());
  displayCloseTag("function");
}
开发者ID:hvellyr,项目名称:herschel,代码行数:9,代码来源:xmlout.cpp

示例6: findFunctionByName

DetectRecursion::ErrorCode DetectRecursion::detectRecursion()
{
    FunctionNode* main = findFunctionByName("main(");
    if (main == NULL)
        return kErrorMissingMain;
    if (main->detectRecursion())
        return kErrorRecursion;
    return kErrorNone;
}
开发者ID:hideakihata,项目名称:mozilla-central.fgv,代码行数:9,代码来源:DetectRecursion.cpp

示例7: funcRegExp

bool QsCodeParser::makeFunctionNode(const QString& synopsis,
				     QStringList *parentPathPtr,
				     FunctionNode **funcPtr)
{
    QRegExp funcRegExp(
	    "\\s*([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+)\\s*\\((" +
            balancedParens +
	    ")\\)(?:\\s*:\\s*([A-Za-z0-9_]+))?\\s*");
    QRegExp paramRegExp(
	    "\\s*(\\[)?\\s*(?:([A-Za-z0-9_]+)\\s*:\\s*)?"
	    "([A-Za-z0-9_]+|\\.\\.\\.)\\s*(\\[)?[\\s\\]]*");

    if (!funcRegExp.exactMatch(synopsis))
	return false;

    ClassNode *classe = (ClassNode*)
        qsTre->findNode(QStringList(funcRegExp.cap(1)),Node::Class);
    if (classe == 0)
	return false;

    FunctionNode *clone = new FunctionNode(0, funcRegExp.cap(2));
    bool optional = false;

    QString paramStr = funcRegExp.cap(3);
    QStringList params = paramStr.split(",");
    QStringList::ConstIterator p = params.begin();
    while (p != params.end()) {
	if (paramRegExp.exactMatch(*p)) {
	    if (!paramRegExp.cap(1).isEmpty())
		optional = true;
	    clone->addParameter(Parameter(paramRegExp.cap(3),
                                          "",
                                          paramRegExp.cap(2),
                                          optional ? "undefined" : ""));
	    if (!paramRegExp.cap(4).isEmpty())
		optional = true;
	}
        else {
	    delete clone;
	    return false;
	}
	++p;
    }
    QString returnType = funcRegExp.cap(4);
    if (!returnType.isEmpty())
	clone->setReturnType(returnType);
    if (parentPathPtr != 0)
	*parentPathPtr = QStringList() << classe->name();
    if (funcPtr != 0) {
	*funcPtr = clone;
    }
    else {
	delete clone;
    }
    return true;
}
开发者ID:,项目名称:,代码行数:56,代码来源:

示例8: visitMethodDecl

  void visitMethodDecl(MethodDecl *node) override {
    JsonObject *obj = new (pool_) JsonObject();
    obj->add(atom_name_, toJson(node->name()));
    startDoc(obj, "method", node->name(), node->loc());

    FunctionNode *fun = node->method();
    obj->add(atom_returnType_, toJson(fun->signature()->returnType()));
    obj->add(atom_parameters_, toJson(fun->signature()->parameters()));
    methods_->add(obj);
  }
开发者ID:alliedmodders,项目名称:sourcepawn,代码行数:10,代码来源:docparse.cpp

示例9: FunctionNode

// Join two commands together
Node* Expression::joinCommands(Node* node1, Node* node2)
{
	FunctionNode* leaf = new FunctionNode(Functions::Joiner);
	nodes_.own(leaf);
	leaf->setParent(this);
	if (node1 != NULL) leaf->addArgument(node1);
	if (node2 != NULL) leaf->addArgument(node2);
	msg.print(Messenger::Verbose, "Joined command nodes %p and %p (joiner node is %p)\n", node1, node2, leaf);
	return leaf;
}
开发者ID:trisyoungs,项目名称:uchroma,代码行数:11,代码来源:expression.cpp

示例10:

void
NameResolver::LeaveMethodDecl(MethodDecl *decl)
{
  FunctionNode *fun = decl->method();
  if (!fun)
    return;

  // Now that we've parsed the function, check if we were able to resolve its
  // signature.
  if (!fun->signature()->isResolved())
    tr_.addPending(decl);
}
开发者ID:LittleKu,项目名称:sourcepawn,代码行数:12,代码来源:name-resolver.cpp

示例11: switch

/*!
    Visits public member declarations, such as signals and properties.
    These only include custom signals and properties.
*/
bool QmlDocVisitor::visit(QDeclarativeJS::AST::UiPublicMember *member)
{
    switch (member->type) {
    case QDeclarativeJS::AST::UiPublicMember::Signal:
    {
        if (current->type() == Node::Fake) {
            QmlClassNode *qmlClass = static_cast<QmlClassNode *>(current);
            if (qmlClass) {

                QString name = member->name->asString();
                FunctionNode *qmlSignal = new FunctionNode(Node::QmlSignal, current, name, false);

                QList<Parameter> parameters;
                for (QDeclarativeJS::AST::UiParameterList *it = member->parameters; it; it = it->next) {
                    if (it->type && it->name)
                        parameters.append(Parameter(it->type->asString(), "", it->name->asString()));
                }

                qmlSignal->setParameters(parameters);
                applyDocumentation(member->firstSourceLocation(), qmlSignal);
            }
        }
        break;
    }
    case QDeclarativeJS::AST::UiPublicMember::Property:
    {
        QString type = member->memberType->asString();
        QString name = member->name->asString();

        if (current->type() == Node::Fake) {
            QmlClassNode *qmlClass = static_cast<QmlClassNode *>(current);
            if (qmlClass) {

                QString name = member->name->asString();
                QmlPropGroupNode *qmlPropGroup = new QmlPropGroupNode(qmlClass, name, false);
                if (member->isDefaultMember)
                    qmlPropGroup->setDefault();
                QmlPropertyNode *qmlPropNode = new QmlPropertyNode(qmlPropGroup, name, type, false);
                qmlPropNode->setWritable(!member->isReadonlyMember);
                applyDocumentation(member->firstSourceLocation(), qmlPropNode);
            }
        }
        break;
    }
    default:
        return false;
    }

    //current->doc = precedingComment(member->firstSourceLocation().begin());
    return true;
}
开发者ID:Blizzard,项目名称:qt4,代码行数:55,代码来源:qmlvisitor.cpp

示例12: if

void CodeMarker::insert(FastSection &fastSection, Node *node, SynopsisStyle style, Status status)
{
    bool inheritedMember = (!node->relates() &&
			    (node->parent() != (const InnerNode *)fastSection.innerNode));
    bool irrelevant = false;

    if (node->access() == Node::Private) {
	irrelevant = true;
    } else if (node->type() == Node::Function) {
	FunctionNode *func = (FunctionNode *) node;
	irrelevant = (inheritedMember
		      && (func->metaness() == FunctionNode::Ctor ||
			  func->metaness() == FunctionNode::Dtor));
    } else if (node->type() == Node::Class || node->type() == Node::Enum
		    || node->type() == Node::Typedef) {
	irrelevant = (inheritedMember && style != SeparateList);
        if (!irrelevant && style == Detailed && node->type() == Node::Typedef) {
            const TypedefNode* typedeffe = static_cast<const TypedefNode*>(node);
            if (typedeffe->associatedEnum())
                irrelevant = true;
        }
    }

    if (!irrelevant) {
        if (status == Compat) {
            irrelevant = (node->status() != Node::Compat);
	} else if (status == Obsolete) {
            irrelevant = (node->status() != Node::Obsolete);
	} else {
            irrelevant = (node->status() == Node::Compat ||
                          node->status() == Node::Obsolete);
	}
    }

    if (!irrelevant) {
	if (!inheritedMember || style == SeparateList) {
	    QString key = sortName(node);
            if (!fastSection.memberMap.contains(key))
		fastSection.memberMap.insert(key, node);
	} else {
	    if (node->parent()->type() == Node::Class) {
		if (fastSection.inherited.isEmpty()
                    || fastSection.inherited.last().first != node->parent()) {
		    QPair<ClassNode *, int> p((ClassNode *)node->parent(), 0);
		    fastSection.inherited.append(p);
		}
		fastSection.inherited.last().second++;
	    }
	}
    }
}
开发者ID:Fale,项目名称:qtmoko,代码行数:51,代码来源:codemarker.cpp

示例13: ParseProgram

void CDisassembler::ParseProgram(Program *prog)
{
	prog->EntryAddr = EntryAddr;

	int functioni;
	for( functioni = 1; functioni < FunctionList.GetNumEntries(); functioni++ )
	{
		int section = FunctionList[functioni].Section;
		uint64_t func_start_offset = FunctionList[functioni].Start;
		uint64_t func_end_offset = FunctionList[functioni].End;
		uint64_t section_addr = Sections[section].SectionAddress;

		if((Sections[section].Type & 0xFF) == 1)
		{
			FunctionNode func;
			func.StartAddress = section_addr + func_start_offset;
			func.EndAddress = section_addr + func_end_offset;

			vector<Instruction> insns;
			uint64_t start_addr, end_addr;
			SetFunctionDescriptor(func.StartAddress);
			while( GetBlockInFunction( &insns, &start_addr, &end_addr ) != -1 )
			{
				if(insns.size() == 0)
					fprintf(stderr, "[error] can't get block assembly\n");

				BlockNode node;
				node.Init( insns, start_addr, end_addr );
				func.Insert( node );
				insns.clear();
			}
			//flow_graph1.PrintAllPath();

			prog->Insert(func);
		}
	}

	uint32_t sym_num = Symbols.GetNumEntries();
	for(int i = 0; i < sym_num; i++)
	{
		if(Symbols[i].Name)
		{
			int section = Symbols[i].Section;
			uint64_t section_addr = Sections[section].SectionAddress;
			uint64_t sym_addr = section_addr + Symbols[i].Offset;
			const char *sym_name = Symbols.GetName(i);
			if(sym_name[0] != '?')
				prog->AddSymbol(sym_addr, sym_name);
		}
	}
}
开发者ID:godthem90,项目名称:Mac_Security_S4,代码行数:51,代码来源:disasm3.cpp

示例14: translate

    Status* translate(const string& program, Code* *code) {
        Parser parser;
        Status* status = parser.parseProgram(program);

        if(status->isError()) {
            return status;
        }

        AstPrinterVisitor visitor(std::cout);
        
        FunctionNode* root = parser.top()->node();
        root->body()->visit(&visitor);

        return Status::Ok();
    }       
开发者ID:kamanov,项目名称:Shared,代码行数:15,代码来源:ast_printer.cpp

示例15: it1

void BytecodeGenerator::visitFunDefs(BlockNode* node) {
    deque<uint16_t> funIds;
    Scope::FunctionIterator it1(node->scope());
    while(it1.hasNext()) {
        uint16_t id = _state.createBcFun(it1.next());
        funIds.push_back(id);
    }
    Scope::FunctionIterator it2(node->scope());
    while(it2.hasNext()) {
        _state.pushFun(funIds.front());
        funIds.pop_front();
        FunctionNode* funNode = it2.next()->node();
        processFunArgs(funNode);
        funNode->visit(this);
        _state.popFun();
    }
}
开发者ID:kamanov,项目名称:Shared,代码行数:17,代码来源:bytecode_generator.cpp


注:本文中的FunctionNode类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。