AnotherTest 5 лет назад
Родитель
Сommit
1d0d0e9d00
3 измененных файлов с 20 добавлено и 0 удалено
  1. 13 0
      Shell/Parser.cpp
  2. 1 0
      Shell/Parser.h
  3. 6 0
      Shell/main.cpp

+ 13 - 0
Shell/Parser.cpp

@@ -86,6 +86,19 @@ Vector<Command> Parser::parse()
         char ch = m_input.characters()[i];
         switch (state()) {
         case State::Free:
+            if (ch == '#') {
+                commit_token(Token::Bare);
+
+                while (i < m_input.length()) {
+                    ch = m_input.characters()[++i];
+                    ++m_position;
+                    if (ch == '\n')
+                        break;
+                    m_token.append(ch);
+                }
+                commit_token(Token::Comment);
+                break;
+            }
             if (ch == ' ') {
                 commit_token(Token::Bare);
                 break;

+ 1 - 0
Shell/Parser.h

@@ -36,6 +36,7 @@ struct Token {
         DoubleQuoted,
         UnterminatedSingleQuoted,
         UnterminatedDoubleQuoted,
+        Comment,
         Special,
     };
     String text;

+ 6 - 0
Shell/main.cpp

@@ -782,6 +782,9 @@ static Vector<String> process_arguments(const Vector<Token>& args)
 {
     Vector<String> argv_string;
     for (auto& arg : args) {
+        if (arg.type == Token::Comment)
+            continue;
+
         // This will return the text passed in if it wasn't a variable
         // This lets us just loop over its values
         auto expanded_parameters = expand_parameters(arg.text);
@@ -863,6 +866,9 @@ static ExitCodeOrContinuationRequest run_command(const StringView& cmd)
                 case Token::Special:
                     dbgprintf("<%s> ", arg.text.characters());
                     break;
+                case Token::Comment:
+                    dbgprintf("<%s> ", arg.text.characters());
+                    break;
                 }
             }
             dbgprintf("\n");