void CConversionOptions::parseOption(char *o) { int rv=0; switch(o[0]){ case 'b': //beam-mode switch(o[1]){ case 'a': beamMode=co_beams_AutoBeam;break; case 'm': beamMode=co_beams_MultiTag;break; case 'n': beamMode=co_beams_NoBeams;break; case 's': beamMode=co_beams_SingleTag;break; default: OPERROR(o); } break; case 'o': //output-file destinationFile=o+1;break; case 'p': //printing-options switch(o[1]){ case 'm': rv=parseSwitch(&printLineFeedAfterBarline,o+2);break; case 't': rv=parseSwitch(&printTrackInfo,o+2);break; } break; case 's': //smart keys, meters and clefs rv=parseSwitch(&smartClefsKeysMeters,o+1);break; case 'w': //waiting on end rv=parseSwitch(&waitOnEnd,o+1);break; default: OPERROR(o); } if(rv){ OPERROR(o); }; }
void UnwrappedLineParser::parseStructuralElement() { assert(!FormatTok->Tok.is(tok::l_brace)); switch (FormatTok->Tok.getKind()) { case tok::at: nextToken(); if (FormatTok->Tok.is(tok::l_brace)) { parseBracedList(); break; } switch (FormatTok->Tok.getObjCKeywordID()) { case tok::objc_public: case tok::objc_protected: case tok::objc_package: case tok::objc_private: return parseAccessSpecifier(); case tok::objc_interface: case tok::objc_implementation: return parseObjCInterfaceOrImplementation(); case tok::objc_protocol: return parseObjCProtocol(); case tok::objc_end: return; // Handled by the caller. case tok::objc_optional: case tok::objc_required: nextToken(); addUnwrappedLine(); return; default: break; } break; case tok::kw_namespace: parseNamespace(); return; case tok::kw_inline: nextToken(); if (FormatTok->Tok.is(tok::kw_namespace)) { parseNamespace(); return; } break; case tok::kw_public: case tok::kw_protected: case tok::kw_private: parseAccessSpecifier(); return; case tok::kw_if: parseIfThenElse(); return; case tok::kw_for: case tok::kw_while: parseForOrWhileLoop(); return; case tok::kw_do: parseDoWhile(); return; case tok::kw_switch: parseSwitch(); return; case tok::kw_default: nextToken(); parseLabel(); return; case tok::kw_case: parseCaseLabel(); return; case tok::kw_try: parseTryCatch(); return; case tok::kw_extern: nextToken(); if (FormatTok->Tok.is(tok::string_literal)) { nextToken(); if (FormatTok->Tok.is(tok::l_brace)) { parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false); addUnwrappedLine(); return; } } break; case tok::identifier: if (FormatTok->IsForEachMacro) { parseForOrWhileLoop(); return; } // In all other cases, parse the declaration. break; default: break; } do { switch (FormatTok->Tok.getKind()) { case tok::at: nextToken(); if (FormatTok->Tok.is(tok::l_brace)) parseBracedList(); break; case tok::kw_enum: parseEnum(); break; case tok::kw_typedef: nextToken(); // FIXME: Use the IdentifierTable instead. if (FormatTok->TokenText == "NS_ENUM") parseEnum(); break; case tok::kw_struct: case tok::kw_union: case tok::kw_class: parseRecord(); // A record declaration or definition is always the start of a structural // element. break; case tok::semi: nextToken(); addUnwrappedLine(); return; case tok::r_brace: addUnwrappedLine(); return; case tok::l_paren: parseParens(); break; case tok::caret: nextToken(); if (FormatTok->Tok.isAnyIdentifier() || FormatTok->isSimpleTypeSpecifier()) nextToken(); if (FormatTok->is(tok::l_paren)) parseParens(); if (FormatTok->is(tok::l_brace)) parseChildBlock(); break; case tok::l_brace: if (!tryToParseBracedList()) { // A block outside of parentheses must be the last part of a // structural element. // FIXME: Figure out cases where this is not true, and add projections // for them (the one we know is missing are lambdas). if (Style.BreakBeforeBraces != FormatStyle::BS_Attach) addUnwrappedLine(); FormatTok->Type = TT_FunctionLBrace; parseBlock(/*MustBeDeclaration=*/false); addUnwrappedLine(); return; } // Otherwise this was a braced init list, and the structural // element continues. break; case tok::kw_try: // We arrive here when parsing function-try blocks. parseTryCatch(); return; case tok::identifier: { StringRef Text = FormatTok->TokenText; if (Style.Language == FormatStyle::LK_JavaScript && Text == "function") { tryToParseJSFunction(); break; } nextToken(); if (Line->Tokens.size() == 1) { if (FormatTok->Tok.is(tok::colon)) { parseLabel(); return; } // Recognize function-like macro usages without trailing semicolon. if (FormatTok->Tok.is(tok::l_paren)) { parseParens(); if (FormatTok->NewlinesBefore > 0 && tokenCanStartNewLine(FormatTok->Tok) && Text == Text.upper()) { addUnwrappedLine(); return; } } else if (FormatTok->HasUnescapedNewline && Text.size() >= 5 && Text == Text.upper()) { // Recognize free-standing macros like Q_OBJECT. addUnwrappedLine(); return; } } break; } case tok::equal: nextToken(); if (FormatTok->Tok.is(tok::l_brace)) { parseBracedList(); } break; case tok::l_square: parseSquare(); break; default: nextToken(); break; } } while (!eof()); }
void *NclPresentationControlParser::parseSwitch( DOMElement *parentElement, void *objGrandParent) { void *parentObject; DOMNodeList *elementNodeList; int i, size; DOMNode *node; DOMElement *element; string elementTagName; void *elementObject; parentObject = createSwitch(parentElement, objGrandParent); if (parentObject == NULL) { return NULL; } elementNodeList = parentElement->getChildNodes(); size = elementNodeList->getLength(); for (i = 0; i < size; i++) { node = elementNodeList->item(i); if (node->getNodeType()==DOMNode::ELEMENT_NODE) { element = (DOMElement*)node; elementTagName = XMLString::transcode(element->getTagName()); if (XMLString::compareIString(elementTagName.c_str(), "media") == 0) { elementObject = ((NclComponentsParser*) getComponentsParser())->parseMedia( element, parentObject); if (elementObject != NULL) { addMediaToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "context") == 0) { elementObject = ((NclComponentsParser*) getComponentsParser())->parseContext( element, parentObject); if (elementObject != NULL) { addContextToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "switch") == 0) { elementObject = parseSwitch(element, parentObject); if (elementObject != NULL) { addSwitchToSwitch(parentObject, elementObject); } } } } for (i = 0; i < size; i++) { node = elementNodeList->item(i); if (node->getNodeType() == DOMNode::ELEMENT_NODE) { element = (DOMElement*)node; elementTagName = XMLString::transcode(element->getTagName()); if (XMLString::compareIString(elementTagName.c_str(), "bindRule") == 0) { elementObject = parseBindRule((DOMElement*)node, parentObject); if (elementObject != NULL) { addBindRuleToSwitch(parentObject, elementObject); } } else if (XMLString::compareIString(elementTagName.c_str(), "defaultComponent") == 0) { elementObject = parseDefaultComponent((DOMElement*)node, parentObject); if (elementObject != NULL) { addDefaultComponentToSwitch( parentObject, elementObject); } } } } return parentObject; }
void UnwrappedLineParser::parseStatement() { parseComments(); switch (FormatTok.Tok.getKind()) { case tok::kw_namespace: parseNamespace(); return; case tok::kw_public: case tok::kw_protected: case tok::kw_private: parseAccessSpecifier(); return; case tok::kw_if: parseIfThenElse(); return; case tok::kw_for: case tok::kw_while: parseForOrWhileLoop(); return; case tok::kw_do: parseDoWhile(); return; case tok::kw_switch: parseSwitch(); return; case tok::kw_default: nextToken(); parseLabel(); return; case tok::kw_case: parseCaseLabel(); return; default: break; } int TokenNumber = 0; do { ++TokenNumber; switch (FormatTok.Tok.getKind()) { case tok::kw_enum: parseEnum(); return; case tok::semi: nextToken(); addUnwrappedLine(); return; case tok::l_paren: parseParens(); break; case tok::l_brace: parseBlock(); addUnwrappedLine(); return; case tok::identifier: nextToken(); if (TokenNumber == 1 && FormatTok.Tok.is(tok::colon)) { parseLabel(); return; } break; case tok::equal: nextToken(); // Skip initializers as they will be formatted by a later step. if (FormatTok.Tok.is(tok::l_brace)) nextToken(); break; default: nextToken(); break; } } while (!eof()); }