Browse Source

Support #! comments

gingerBill 6 years ago
parent
commit
1f2fdddc6d
2 changed files with 13 additions and 46 deletions
  1. 1 1
      build.bat
  2. 12 45
      src/tokenizer.cpp

+ 1 - 1
build.bat

@@ -42,7 +42,7 @@ del *.ilk > NUL 2> NUL
 
 cl %compiler_settings% "src\main.cpp" ^
 	/link %linker_settings% -OUT:%exe_name% ^
-	&& odin run examples/demo/demo.odin -keep-temp-files
+	&& odin run examples/demo/demo.odin -debug -keep-temp-files
 
 del *.obj > NUL 2> NUL
 

+ 12 - 45
src/tokenizer.cpp

@@ -776,50 +776,6 @@ gb_inline TokenKind token_kind_dub_eq(Tokenizer *t, Rune sing_rune, TokenKind si
 	return sing;
 }
 
-void tokenizer__fle_update(Tokenizer *t) {
-	t->curr_rune = '/';
-	t->curr      = t->curr-1;
-	t->read_curr = t->curr+1;
-	advance_to_next_rune(t);
-}
-
-// NOTE(bill): needed if comment is straight after a "semicolon"
-bool tokenizer_find_line_end(Tokenizer *t) {
-	while (t->curr_rune == '/' || t->curr_rune == '*') {
-		if (t->curr_rune == '/') {
-			tokenizer__fle_update(t);
-			return true;
-		}
-
-		advance_to_next_rune(t);
-		while (t->curr_rune >= 0) {
-			Rune r = t->curr_rune;
-			if (r == '\n') {
-				tokenizer__fle_update(t);
-				return true;
-			}
-			advance_to_next_rune(t);
-			if (r == '*' && t->curr_rune == '/') {
-				advance_to_next_rune(t);
-				break;
-			}
-		}
-
-		tokenizer_skip_whitespace(t);
-		if (t->curr_rune < 0 || t->curr_rune == '\n') {
-			tokenizer__fle_update(t);
-			return true;
-		}
-		if (t->curr_rune != '/') {
-			tokenizer__fle_update(t);
-			return false;
-		}
-		advance_to_next_rune(t);
-	}
-
-	tokenizer__fle_update(t);
-	return false;
-}
 
 Token tokenizer_get_token(Tokenizer *t) {
 	tokenizer_skip_whitespace(t);
@@ -956,7 +912,6 @@ Token tokenizer_get_token(Tokenizer *t) {
 			}
 			break;
 
-		case '#':  token.kind = Token_Hash;         break;
 		case '@':  token.kind = Token_At;           break;
 		case '$':  token.kind = Token_Dollar;       break;
 		case '?':  token.kind = Token_Question;     break;
@@ -1011,6 +966,18 @@ Token tokenizer_get_token(Tokenizer *t) {
 			}
 			break;
 
+		case '#':
+			if (t->curr_rune == '!') {
+				while (t->curr_rune != '\n' && t->curr_rune != GB_RUNE_EOF) {
+					advance_to_next_rune(t);
+				}
+				token.kind = Token_Comment;
+			} else {
+				token.kind = Token_Hash;
+			}
+			break;
+
+
 		case '/': {
 			if (t->curr_rune == '/') {
 				while (t->curr_rune != '\n' && t->curr_rune != GB_RUNE_EOF) {