diff --git a/.gitignore b/.gitignore index 5eb15125b4..b34e8fc555 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,4 @@ untracked_files/ # Just in case /dmd +.DS_Store diff --git a/compiler/src/dmd/cparse.d b/compiler/src/dmd/cparse.d index 6899468c5e..6a81fdf315 100644 --- a/compiler/src/dmd/cparse.d +++ b/compiler/src/dmd/cparse.d @@ -832,8 +832,8 @@ final class CParser(AST) : Parser!AST const len2 = token.len; len = len1 + len2; auto s2 = cast(char*)mem.xmalloc_noscan(len * char.sizeof); - memcpy(s2, s, len1 * char.sizeof); - memcpy(s2 + len1, token.ustring, len2 * char.sizeof); + s2[0 .. len1] = s[0 .. len1]; + s2[len1 .. len1 + len2] = token.ustring[0 .. len2]; s = s2; } else @@ -3511,12 +3511,12 @@ final class CParser(AST) : Parser!AST case TOK.colonColon: // treat as two separate : tokens for iasmgcc *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; (*ptoklist).value = TOK.colon; ptoklist = &(*ptoklist).next; *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; (*ptoklist).value = TOK.colon; ptoklist = &(*ptoklist).next; @@ -3526,7 +3526,7 @@ final class CParser(AST) : Parser!AST default: *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; ptoklist = &(*ptoklist).next; *ptoklist = null; nextToken(); diff --git a/compiler/src/dmd/parse.d b/compiler/src/dmd/parse.d index f031777238..2ba970c12e 100644 --- a/compiler/src/dmd/parse.d +++ b/compiler/src/dmd/parse.d @@ -2772,7 +2772,7 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer if (len > 0) { docline = cast(char*)mem.xmalloc_noscan(len + 2); - memcpy(docline, begPtr, len); + docline[0 .. len] = begPtr[0 .. len]; docline[len] = '\n'; // Terminate all lines by LF docline[len + 1] = '\0'; } @@ -7105,12 +7105,12 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer case TOK.colonColon: // treat as two separate : tokens for iasmgcc *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; (*ptoklist).value = TOK.colon; ptoklist = &(*ptoklist).next; *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; (*ptoklist).value = TOK.colon; ptoklist = &(*ptoklist).next; @@ -7120,7 +7120,7 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer default: *ptoklist = allocateToken(); - memcpy(*ptoklist, &token, Token.sizeof); + **ptoklist = this.token; ptoklist = &(*ptoklist).next; *ptoklist = null; nextToken(); @@ -8264,9 +8264,8 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer const len2 = token.len; len = len1 + len2; auto s2 = cast(char*)mem.xmalloc_noscan(len * char.sizeof); - memcpy(s2, s, len1 * char.sizeof); - memcpy(s2 + len1, token.ustring, len2 * char.sizeof); - s = s2; + s2[0 .. len1] = s[0 .. len1]; + s2[len1 .. len1 + len2] = token.ustring[0 .. len2]; } else break; @@ -8473,7 +8472,7 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer errorSupplemental("try enclosing the contents of `is` with a `typeof` expression"); nextToken(); Token* tempTok = peekPastParen(&token); - memcpy(&token, tempTok, Token.sizeof); + token = *tempTok; goto Lerr; } targ = parseType(&ident);