Alien-SmokeQt
view release on metacpan or search on metacpan
generator/parser/parser.cpp view on Meta::CPAN
case Token_int:
case Token_long:
case Token_signed:
case Token_unsigned:
case Token_float:
case Token_double:
case Token_void:
case Token_extern:
case Token_namespace:
case Token_using:
case Token_typedef:
case Token_asm:
case Token_template:
case Token_export:
case Token_const: // cv
case Token_volatile: // cv
case Token_public:
case Token_protected:
case Token_private:
case Token_signals: // Qt
case Token_slots: // Qt
return true;
case '}':
return false;
default:
advance();
}
}
return false;
}
bool Parser::skipUntilStatement()
{
while (session->token_stream->lookAhead())
{
switch(session->token_stream->lookAhead())
{
case ';':
case '{':
case '}':
case Token_const:
case Token_volatile:
case Token_identifier:
case Token_case:
case Token_default:
case Token_if:
case Token_switch:
case Token_while:
case Token_do:
case Token_for:
case Token_break:
case Token_continue:
case Token_return:
case Token_goto:
case Token_try:
case Token_catch:
case Token_throw:
case Token_char:
case Token_size_t:
case Token_wchar_t:
case Token_bool:
case Token_short:
case Token_int:
case Token_long:
case Token_signed:
case Token_unsigned:
case Token_float:
case Token_double:
case Token_void:
case Token_class:
case Token_struct:
case Token_union:
case Token_enum:
case Token_scope:
case Token_template:
case Token_using:
return true;
default:
advance();
}
}
return false;
}
bool Parser::skip(int l, int r)
{
int count = 0;
while (session->token_stream->lookAhead())
{
int tk = session->token_stream->lookAhead();
if (tk == l)
++count;
else if (tk == r)
--count;
else if (l != '{' && (tk == '{' || tk == '}' || tk == ';'))
return false;
if (count == 0)
return true;
advance();
}
return false;
}
bool Parser::parseName(NameAST*& node, ParseNameAcceptTemplate acceptTemplateId)
{
std::size_t start = session->token_stream->cursor();
WinDeclSpecAST *winDeclSpec = 0;
parseWinDeclSpec(winDeclSpec);
NameAST *ast = CreateNode<NameAST>(session->mempool);
generator/parser/parser.cpp view on Meta::CPAN
}
bool Parser::parseCtorInitializer(CtorInitializerAST *&node)
{
std::size_t start = session->token_stream->cursor();
CHECK(':');
CtorInitializerAST *ast = CreateNode<CtorInitializerAST>(session->mempool);
ast->colon = start;
if (!parseMemInitializerList(ast->member_initializers))
{
reportError(("Member initializers expected"));
}
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
return true;
}
bool Parser::parseElaboratedTypeSpecifier(TypeSpecifierAST *&node)
{
std::size_t start = session->token_stream->cursor();
int tk = session->token_stream->lookAhead();
if (tk == Token_class ||
tk == Token_struct ||
tk == Token_union ||
tk == Token_enum ||
tk == Token_typename)
{
std::size_t type = session->token_stream->cursor();
advance();
NameAST *name = 0;
if (parseName(name, AcceptTemplate))
{
ElaboratedTypeSpecifierAST *ast
= CreateNode<ElaboratedTypeSpecifierAST>(session->mempool);
ast->type = type;
ast->name = name;
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
return true;
}
}
rewind(start);
return false;
}
bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node)
{
std::size_t start = session->token_stream->cursor();
CHECK(Token_throw);
ADVANCE('(', "(");
ExceptionSpecificationAST *ast
= CreateNode<ExceptionSpecificationAST>(session->mempool);
if (session->token_stream->lookAhead() == Token_ellipsis)
{
ast->ellipsis = session->token_stream->cursor();
advance();
}
else
{
parseTypeIdList(ast->type_ids);
}
ADVANCE(')', ")");
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
return true;
}
bool Parser::parseEnumerator(EnumeratorAST *&node)
{
std::size_t start = session->token_stream->cursor();
CHECK(Token_identifier);
std::size_t id = start;
EnumeratorAST *ast = CreateNode<EnumeratorAST>(session->mempool);
ast->id = id;
if (session->token_stream->lookAhead() == '=')
{
advance();
if (!parseConstantExpression(ast->expression))
{
reportError(("Constant expression expected"));
}
}
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
moveComments(node);
preparseLineComments( ast->end_token-1 );
if( m_commentStore.hasComment() )
addComment( node, m_commentStore.takeCommentInRange( lineFromTokenNumber(--ast->end_token) ) );
return true;
}
bool Parser::parseInitDeclarator(InitDeclaratorAST *&node)
{
std::size_t start = session->token_stream->cursor();
generator/parser/parser.cpp view on Meta::CPAN
ExpressionAST *rightExpr = 0;
if (!parseLogicalAndExpression(rightExpr, templArgs))
return false;
BinaryExpressionAST *ast = CreateNode<BinaryExpressionAST>(session->mempool);
ast->op = op;
ast->left_expression = node;
ast->right_expression = rightExpr;
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
}
return true;
}
bool Parser::parseConditionalExpression(ExpressionAST *&node)
{
std::size_t start = session->token_stream->cursor();
if (!parseLogicalOrExpression(node))
return false;
if (session->token_stream->lookAhead() == '?')
{
advance();
ExpressionAST *leftExpr = 0;
if (!parseExpression(leftExpr))
return false;
CHECK(':');
ExpressionAST *rightExpr = 0;
if (!parseAssignmentExpression(rightExpr))
return false;
ConditionalExpressionAST *ast
= CreateNode<ConditionalExpressionAST>(session->mempool);
ast->condition = node;
ast->left_expression = leftExpr;
ast->right_expression = rightExpr;
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
}
return true;
}
bool Parser::parseAssignmentExpression(ExpressionAST *&node)
{
std::size_t start = session->token_stream->cursor();
if(parseSignalSlotExpression(node))
return true;
//Parsed a signal/slot expression, fine
if (session->token_stream->lookAhead() == Token_throw && !parseThrowExpression(node))
return false;
else if (!parseConditionalExpression(node))
return false;
while (session->token_stream->lookAhead() == Token_assign
|| session->token_stream->lookAhead() == '=')
{
std::size_t op = session->token_stream->cursor();
advance();
ExpressionAST *rightExpr = 0;
if (!parseConditionalExpression(rightExpr))
return false;
BinaryExpressionAST *ast = CreateNode<BinaryExpressionAST>(session->mempool);
ast->op = op;
ast->left_expression = node;
ast->right_expression = rightExpr;
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
}
return true;
}
bool Parser::parseConstantExpression(ExpressionAST *&node)
{
return parseConditionalExpression(node);
}
bool Parser::parseExpression(ExpressionAST *&node)
{
return parseCommaExpression(node);
}
bool Parser::parseSignalSlotExpression(ExpressionAST *&node) {
if(session->token_stream->lookAhead() == Token___qt_sig_slot__) {
std::size_t start = session->token_stream->cursor();
CHECK(Token___qt_sig_slot__);
CHECK('(');
SignalSlotExpressionAST *ast = CreateNode<SignalSlotExpressionAST>(session->mempool);
parseUnqualifiedName(ast->name, false);
CHECK('(');
if(ast->name)
parseTemplateArgumentList(ast->name->template_arguments);
CHECK(')');
if(ast->name)
ast->name->end_token = _M_last_valid_token+1;
CHECK(')');
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
return true;
}else{
return false;
}
}
bool Parser::parseCommaExpression(ExpressionAST *&node)
{
std::size_t start = session->token_stream->cursor();
if (!parseAssignmentExpression(node))
return false;
while (session->token_stream->lookAhead() == ',')
{
std::size_t op = session->token_stream->cursor();
advance();
ExpressionAST *rightExpr = 0;
if (!parseAssignmentExpression(rightExpr))
return false;
BinaryExpressionAST *ast = CreateNode<BinaryExpressionAST>(session->mempool);
ast->op = op;
ast->left_expression = node;
ast->right_expression = rightExpr;
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
}
return true;
}
bool Parser::parseThrowExpression(ExpressionAST *&node)
{
std::size_t start = session->token_stream->cursor();
size_t pos = session->token_stream->cursor();
CHECK(Token_throw);
ThrowExpressionAST *ast = CreateNode<ThrowExpressionAST>(session->mempool);
ast->throw_token = pos;
parseAssignmentExpression(ast->expression);
UPDATE_POS(ast, start, _M_last_valid_token+1);
node = ast;
return true;
}
bool Parser::holdErrors(bool hold)
{
bool current = _M_hold_errors;
_M_hold_errors = hold;
return current;
}
( run in 1.421 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )