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


C++ FunctionScopePtr::addModifier方法代码示例

本文整理汇总了C++中FunctionScopePtr::addModifier方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionScopePtr::addModifier方法的具体用法?C++ FunctionScopePtr::addModifier怎么用?C++ FunctionScopePtr::addModifier使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在FunctionScopePtr的用法示例。


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

示例1: ParseExtClasses

void BuiltinSymbols::ParseExtClasses(AnalysisResultPtr ar, const char **p,
                                     bool sep) {
    while (*p) {
        // Parse name
        const char *cname = *p++;
        // Parse parent
        const char *cparent = *p++;
        if (!cparent) cparent = "";
        // Parse list of interfaces
        vector<string> ifaces;
        while (*p) ifaces.push_back(*p++);
        p++;
        // Parse methods
        FunctionScopePtrVec methods;
        while (*p) {
            FunctionScopePtr fs = ParseExtFunction(ar, p, true);
            if (sep) {
                fs->setSepExtension();
            }
            int flags = (int)(int64)(*p++);
            if (flags & ClassInfo::IsAbstract) {
                fs->addModifier(T_ABSTRACT);
            }
            int vismod = 0;
            if (flags & ClassInfo::IsProtected) {
                vismod = T_PROTECTED;
            } else if (flags & ClassInfo::IsPrivate) {
                vismod = T_PRIVATE;
            }
            fs->addModifier(vismod);
            if (flags & ClassInfo::IsStatic) {
                fs->addModifier(T_STATIC);
            }
            methods.push_back(fs);
        }
        if (cparent && *cparent && (ifaces.empty() || ifaces[0] != cparent)) {
            ifaces.insert(ifaces.begin(), cparent);
        }
        ClassScopePtr cl(new ClassScope(ar, cname, cparent, ifaces, methods));
        for (uint i = 0; i < methods.size(); ++i) {
            methods[i]->setOuterScope(cl);
        }
        p++;
        // Parse properties
        while (*p) {
            int flags = (int)(int64)(*p++);
            ModifierExpressionPtr modifiers(
                new ModifierExpression(BlockScopePtr(), LocationPtr()));
            if (flags & ClassInfo::IsProtected) {
                modifiers->add(T_PROTECTED);
            } else if (flags & ClassInfo::IsPrivate) {
                modifiers->add(T_PRIVATE);
            }
            if (flags & ClassInfo::IsStatic) {
                modifiers->add(T_STATIC);
            }
            const char *name = *p++;
            TypePtr type = ParseType(p);
            cl->getVariables()->add(name, type, false, ar, ExpressionPtr(), modifiers);
        }
        p++;
        // Parse consts
        while (*p) {
            const char *name = *p++;
            TypePtr type = ParseType(p);
            cl->getConstants()->add(name, type, ExpressionPtr(), ar, ConstructPtr());
        }
        p++;

        int flags = (int)(int64)(*p++);
        cl->setClassInfoAttribute(flags);
        if (flags & ClassInfo::HasDocComment) {
            cl->setDocComment(*p++);
        }

        cl->setSystem();
        if (sep) {
            cl->setSepExtension();
        }
        s_classes[cl->getName()] = cl;
    }
}
开发者ID:serphen,项目名称:hiphop-php,代码行数:82,代码来源:builtin_symbols.cpp

示例2: ParseExtClasses

void BuiltinSymbols::ParseExtClasses(AnalysisResultPtr ar, const char **p,
                                     bool sep) {
  while (*p) {
    // Parse name
    const char *cname = *p++;
    // Parse parent
    const char *cparent = *p++;
    // Parse list of interfaces
    vector<string> ifaces;
    while (*p) ifaces.push_back(*p++);
    p++;
    // Parse methods
    vector<FunctionScopePtr> methods;
    while (*p) {
      FunctionScopePtr fs = ParseExtFunction(ar, p);
      if (sep) {
        fs->setSepExtension();
      }
      bool abstract = (bool)*p++;
      if (abstract) {
        fs->addModifier(T_ABSTRACT);
      }
      int visibility = (long)*p++;
      int vismod = 0;
      if (visibility == 1) {
        vismod = T_PROTECTED;
      } else if (visibility == 2) {
        vismod = T_PRIVATE;
      }
      fs->addModifier(vismod);
      bool stat = (bool)*p++;
      if (stat) {
        fs->addModifier(T_STATIC);
      }
      methods.push_back(fs);
    }
    if (cparent && *cparent && (ifaces.empty() || ifaces[0] != cparent)) {
      ifaces.insert(ifaces.begin(), cparent);
    }
    ClassScopePtr cl(new ClassScope(ar, string(cname), string(cparent),
                                    ifaces, methods));
    p++;
    // Parse properties
    while (*p) {
      *p++; // TODO, support visibility
      const char *name = *p++;
      TypePtr type = ParseType(p);
      cl->getVariables()->add(name, type, false, ar, ExpressionPtr(),
                              ModifierExpressionPtr());
    }
    p++;
    // Parse consts
    while (*p) {
      const char *name = *p++;
      TypePtr type = ParseType(p);
      cl->getConstants()->add(name, type, ExpressionPtr(), ar, ConstructPtr());
    }
    p++;
    cl->setSystem();
    if (sep) {
      cl->setSepExtension();
    }
    s_classes[cl->getName()] = cl;
  }
}
开发者ID:phpfalcon,项目名称:hiphop-php,代码行数:65,代码来源:builtin_symbols.cpp


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