97a23e5ea7
Updates continuations to allow yielding of a key-value pair from a generator. Adds bytecode instructions (PackContK, ContKey) for using the new feature, and adds IR instructions (ContUpdateIdx, ContIncKey) to help get it down to the metal (in particular, ContIncKey attempts to keep the current use-cases as fast as possible).
49 linhas
1.9 KiB
C++
49 linhas
1.9 KiB
C++
/*
|
|
+----------------------------------------------------------------------+
|
|
| HipHop for PHP |
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef incl_HPHP_YIELD_EXPRESSION_H_
|
|
#define incl_HPHP_YIELD_EXPRESSION_H_
|
|
|
|
#include "hphp/compiler/expression/expression.h"
|
|
|
|
namespace HPHP {
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
DECLARE_BOOST_TYPES(YieldExpression);
|
|
|
|
class YieldExpression : public Expression {
|
|
public:
|
|
YieldExpression(EXPRESSION_CONSTRUCTOR_PARAMETERS,
|
|
ExpressionPtr keyExp, ExpressionPtr valExp);
|
|
|
|
DECLARE_EXPRESSION_VIRTUAL_FUNCTIONS;
|
|
|
|
ExpressionPtr getKeyExpression() { return m_keyExp; }
|
|
ExpressionPtr getValueExpression() { return m_valExp; }
|
|
int getLabel() { assert(m_label >= 1); return m_label; }
|
|
void setLabel(int label) { assert(m_label == -1); m_label = label; }
|
|
|
|
private:
|
|
ExpressionPtr m_keyExp;
|
|
ExpressionPtr m_valExp;
|
|
int m_label;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
}
|
|
|
|
#endif // incl_HPHP_YIELD_EXPRESSION_H_
|