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


C++ AssignmentExpressionPtr::onParseRecur方法代码示例

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


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

示例1: onParseRecur

void ClassConstant::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
  ConstantTablePtr constants = scope->getConstants();

  if (scope->isTrait()) {
    parseTimeFatal(Compiler::InvalidTraitStatement,
                   "Traits cannot have constants");
  }

  for (int i = 0; i < m_exp->getCount(); i++) {
    AssignmentExpressionPtr assignment =
      dynamic_pointer_cast<AssignmentExpression>((*m_exp)[i]);

    ExpressionPtr var = assignment->getVariable();
    const std::string &name =
      dynamic_pointer_cast<ConstantExpression>(var)->getName();
    if (constants->isPresent(name)) {
      assignment->parseTimeFatal(Compiler::DeclaredConstantTwice,
                                 "Cannot redeclare %s::%s",
                                 scope->getOriginalName().c_str(),
                                 name.c_str());
    } else {
      assignment->onParseRecur(ar, scope);
    }
  }
}
开发者ID:BauerBox,项目名称:hiphop-php,代码行数:26,代码来源:class_constant.cpp

示例2: onParseRecur

void ClassVariable::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
  ModifierExpressionPtr modifiers =
    scope->setModifiers(m_modifiers);

  for (int i = 0; i < m_declaration->getCount(); i++) {
    VariableTablePtr variables = scope->getVariables();
    ExpressionPtr exp = (*m_declaration)[i];
    if (exp->is(Expression::KindOfAssignmentExpression)) {
      AssignmentExpressionPtr assignment =
        dynamic_pointer_cast<AssignmentExpression>(exp);
      ExpressionPtr var = assignment->getVariable();
      const std::string &name =
        dynamic_pointer_cast<SimpleVariable>(var)->getName();
      if (variables->isPresent(name)) {
        Compiler::Error(Compiler::DeclaredVariableTwice, exp);
        m_declaration->removeElement(i--);
      } else {
        assignment->onParseRecur(ar, scope);
      }
    } else {
      const std::string &name =
        dynamic_pointer_cast<SimpleVariable>(exp)->getName();
      if (variables->isPresent(name)) {
        Compiler::Error(Compiler::DeclaredVariableTwice, exp);
        m_declaration->removeElement(i--);
      } else {
        variables->add(name, Type::Variant, false, ar, exp, m_modifiers);
      }
    }
  }

  scope->setModifiers(modifiers);
}
开发者ID:ArPharazon,项目名称:hiphop-php,代码行数:34,代码来源:class_variable.cpp

示例3: onParseRecur

void ClassConstant::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
  ConstantTablePtr constants = scope->getConstants();

  if (scope->isTrait()) {
    parseTimeFatal(Compiler::InvalidTraitStatement,
                   "Traits cannot have constants");
  }

  if (isAbstract()) {
    for (int i = 0; i < m_exp->getCount(); i++) {
      ConstantExpressionPtr exp =
        dynamic_pointer_cast<ConstantExpression>((*m_exp)[i]);
      const std::string &name = exp->getName();
      if (constants->isPresent(name)) {
        exp->parseTimeFatal(Compiler::DeclaredConstantTwice,
                                   "Cannot redeclare %s::%s",
                                   scope->getOriginalName().c_str(),
                                   name.c_str());
      }

      // HACK: break attempts to write global constants here;
      // see ConstantExpression::preOptimize
      exp->setContext(Expression::LValue);

      // Unlike with assignment expression below, nothing needs to be added
      // to the scope's constant table
    }
  } else {
    for (int i = 0; i < m_exp->getCount(); i++) {
      AssignmentExpressionPtr assignment =
        dynamic_pointer_cast<AssignmentExpression>((*m_exp)[i]);

      ExpressionPtr var = assignment->getVariable();
      const std::string &name =
        dynamic_pointer_cast<ConstantExpression>(var)->getName();
      if (constants->isPresent(name)) {
        assignment->parseTimeFatal(Compiler::DeclaredConstantTwice,
                                   "Cannot redeclare %s::%s",
                                   scope->getOriginalName().c_str(),
                                   name.c_str());
      } else {
        if (isTypeconst()) {
          // We do not want type constants to be available at run time.
          // To ensure this we do not want them to be added to the constants
          // table. The constants table is used to inline values for expressions
          // See ClassConstantExpression::preOptimize.
          // AssignmentExpression::onParseRecur essentially adds constants to
          // the constant table so we skip it.
          continue;
        }
        assignment->onParseRecur(ar, scope);
      }
    }
  }
}
开发者ID:191919,项目名称:hhvm,代码行数:56,代码来源:class_constant.cpp

示例4: onParseRecur

void ClassVariable::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
  ModifierExpressionPtr modifiers =
    scope->setModifiers(m_modifiers);

  if (m_modifiers->isAbstract()) {
    parseTimeFatal(Compiler::InvalidAttribute,
                   "Properties cannot be declared abstract");
  }

  if (m_modifiers->isFinal()) {
    parseTimeFatal(Compiler::InvalidAttribute,
                   "Properties cannot be declared final");
  }

  for (int i = 0; i < m_declaration->getCount(); i++) {
    VariableTablePtr variables = scope->getVariables();
    ExpressionPtr exp = (*m_declaration)[i];
    if (exp->is(Expression::KindOfAssignmentExpression)) {
      AssignmentExpressionPtr assignment =
        dynamic_pointer_cast<AssignmentExpression>(exp);
      ExpressionPtr var = assignment->getVariable();
      const std::string &name =
        dynamic_pointer_cast<SimpleVariable>(var)->getName();
      if (variables->isPresent(name)) {
        exp->parseTimeFatal(Compiler::DeclaredVariableTwice,
                            "Cannot redeclare %s::$%s",
                            scope->getOriginalName().c_str(), name.c_str());
      } else {
        assignment->onParseRecur(ar, scope);
      }
    } else {
      const std::string &name =
        dynamic_pointer_cast<SimpleVariable>(exp)->getName();
      if (variables->isPresent(name)) {
        exp->parseTimeFatal(Compiler::DeclaredVariableTwice,
                            "Cannot redeclare %s::$%s",
                            scope->getOriginalName().c_str(), name.c_str());
      } else {
        variables->add(name, Type::Null, false, ar, exp, m_modifiers);
      }
    }
  }

  scope->setModifiers(modifiers);
}
开发者ID:BauerBox,项目名称:hiphop-php,代码行数:46,代码来源:class_variable.cpp

示例5: onParseRecur

void ClassConstant::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
  ConstantTablePtr constants = scope->getConstants();

  for (int i = 0; i < m_exp->getCount(); i++) {
    AssignmentExpressionPtr assignment =
      dynamic_pointer_cast<AssignmentExpression>((*m_exp)[i]);

    ExpressionPtr var = assignment->getVariable();
    const std::string &name =
      dynamic_pointer_cast<ConstantExpression>(var)->getName();
    if (constants->isPresent(name)) {
      Compiler::Error(Compiler::DeclaredConstantTwice, assignment);
      m_exp->removeElement(i--);
    } else {
      assignment->onParseRecur(ar, scope);
    }
  }
}
开发者ID:HyeongKyu,项目名称:hiphop-php,代码行数:19,代码来源:class_constant.cpp

示例6: onParseRecur

void ClassVariable::onParseRecur(AnalysisResultConstPtr ar,
                                 ClassScopePtr scope) {
    ModifierExpressionPtr modifiers =
        scope->setModifiers(m_modifiers);

    if (m_modifiers->isAbstract()) {
        m_modifiers->parseTimeFatal(Compiler::InvalidAttribute,
                                    "Properties cannot be declared abstract");
    }

    if (m_modifiers->isFinal()) {
        m_modifiers->parseTimeFatal(Compiler::InvalidAttribute,
                                    "Properties cannot be declared final");
    }

    if (!m_modifiers->isStatic() && scope->isStaticUtil()) {
        m_modifiers->parseTimeFatal(
            Compiler::InvalidAttribute,
            "Class %s contains non-static property declaration and "
            "therefore cannot be declared 'abstract final'",
            scope->getOriginalName().c_str()
        );
    }

    if ((m_modifiers->isExplicitlyPublic() +
            m_modifiers->isProtected() +
            m_modifiers->isPrivate()) > 1) {
        m_modifiers->parseTimeFatal(
            Compiler::InvalidAttribute,
            "%s: properties of %s",
            Strings::PICK_ACCESS_MODIFIER,
            scope->getOriginalName().c_str()
        );
    }

    for (int i = 0; i < m_declaration->getCount(); i++) {
        VariableTablePtr variables = scope->getVariables();
        ExpressionPtr exp = (*m_declaration)[i];
        if (exp->is(Expression::KindOfAssignmentExpression)) {
            AssignmentExpressionPtr assignment =
                dynamic_pointer_cast<AssignmentExpression>(exp);
            ExpressionPtr var = assignment->getVariable();
            const std::string &name =
                dynamic_pointer_cast<SimpleVariable>(var)->getName();
            if (variables->isPresent(name)) {
                exp->parseTimeFatal(Compiler::DeclaredVariableTwice,
                                    "Cannot redeclare %s::$%s",
                                    scope->getOriginalName().c_str(), name.c_str());
            } else {
                assignment->onParseRecur(ar, scope);
            }
        } else {
            const std::string &name =
                dynamic_pointer_cast<SimpleVariable>(exp)->getName();
            if (variables->isPresent(name)) {
                exp->parseTimeFatal(Compiler::DeclaredVariableTwice,
                                    "Cannot redeclare %s::$%s",
                                    scope->getOriginalName().c_str(), name.c_str());
            } else {
                variables->add(name, Type::Null, false, ar, exp, m_modifiers);
            }
        }
    }

    scope->setModifiers(modifiers);
}
开发者ID:jeremyadoux,项目名称:hhvm,代码行数:66,代码来源:class_variable.cpp


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