Browse Source

Fix race condition; Change `for in` addressing mode

gingerBill 6 years ago
parent
commit
956dd26aa0
2 changed files with 7 additions and 6 deletions
  1. 6 5
      src/check_stmt.cpp
  2. 1 1
      src/gb/gb.h

+ 6 - 5
src/check_stmt.cpp

@@ -1452,15 +1452,15 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) {
 		}
 
 	skip_expr:; // NOTE(zhiayang): again, declaring a variable immediately after a label... weird.
-		Ast *lhs[2] = {rs->val0, rs->val1};
-		Type *   rhs[2] = {val0, val1};
+		Ast * lhs[2] = {rs->val0, rs->val1};
+		Type *rhs[2] = {val0, val1};
 
 		for (isize i = 0; i < 2; i++) {
 			if (lhs[i] == nullptr) {
 				continue;
 			}
-			Ast *name = lhs[i];
-			Type *   type = rhs[i];
+			Ast * name = lhs[i];
+			Type *type = rhs[i];
 
 			Entity *entity = nullptr;
 			if (name->kind == Ast_Ident) {
@@ -1472,8 +1472,9 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) {
 					found = scope_lookup_current(ctx->scope, str);
 				}
 				if (found == nullptr) {
-					bool is_immutable = true;
+					bool is_immutable = false;
 					entity = alloc_entity_variable(ctx->scope, token, type, is_immutable, EntityState_Resolved);
+					entity->flags |= EntityFlag_Value;
 					add_entity_definition(&ctx->checker->info, name, entity);
 				} else {
 					TokenPos pos = found->token.pos;

+ 1 - 1
src/gb/gb.h

@@ -4702,6 +4702,7 @@ gb_inline void gb_thread_start_with_stack(gbThread *t, gbThreadProc *proc, void
 	t->proc = proc;
 	t->user_data = user_data;
 	t->stack_size = stack_size;
+	t->is_running = true;
 
 #if defined(GB_SYSTEM_WINDOWS)
 	t->win32_handle = CreateThread(NULL, stack_size, gb__thread_proc, t, 0, NULL);
@@ -4719,7 +4720,6 @@ gb_inline void gb_thread_start_with_stack(gbThread *t, gbThreadProc *proc, void
 	}
 #endif
 
-	t->is_running = true;
 	gb_semaphore_wait(&t->semaphore);
 }