Index: llvm/lib/MC/MCParser/AsmParser.cpp =================================================================== --- llvm/lib/MC/MCParser/AsmParser.cpp +++ llvm/lib/MC/MCParser/AsmParser.cpp @@ -183,6 +183,9 @@ // Is alt macro mode enabled. bool AltMacroMode = false; +protected: + virtual bool parseStatement(ParseStatementInfo &Info, MCAsmParserSemaCallback *SI); + public: AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, const MCAsmInfo &MAI, unsigned CB); @@ -266,8 +269,6 @@ /// } private: - bool parseStatement(ParseStatementInfo &Info, - MCAsmParserSemaCallback *SI); bool parseCurlyBlockScope(SmallVectorImpl& AsmStrRewrites); bool parseCppHashLineFilenameComment(SMLoc L, bool SaveLocInfo = true); @@ -690,6 +691,44 @@ void initializeCVDefRangeTypeMap(); }; +class HLASMAsmParser : public AsmParser { +private: + MCAsmLexer &Lexer; + const MCAsmInfo &MAI; + MCStreamer &Out; + + enum HLASM_INSN_KIND { + DC, + COPY, + //... + }; + + // Initialize the hlasm assembler instruction map + void initializeHLASMInstructionKindMap() { + return; + } + + bool parseAsHLASMLabel(); + bool parseAsMachineInstruction(); + bool parseAsHLASMInstruction(); + +public: + HLASMAsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, + const MCAsmInfo &MAI, unsigned CB = 0) : AsmParser(SM, Ctx, Out, MAI, 0 /*CB*/), Lexer(getLexer()), MAI(MAI), + Out(Out) { + Lexer.setSkipSpace(false); + initializeHLASMInstructionKindMap(); + } + + ~HLASMAsmParser() { + Lexer.setSkipSpace(true); + } + + bool parseStatement(ParseStatementInfo &Info, MCAsmParserSemaCallback *SI) override { + return false; + } +}; + } // end anonymous namespace namespace llvm { @@ -6228,5 +6267,8 @@ MCAsmParser *llvm::createMCAsmParser(SourceMgr &SM, MCContext &C, MCStreamer &Out, const MCAsmInfo &MAI, unsigned CB) { + if (C.getObjectFileInfo()->getTargetTriple().isOSzOS() && MAI.getAssemblerDialect()) + return new HLASMAsmParser(SM, C, Out, MAI, CB); + return new AsmParser(SM, C, Out, MAI, CB); }