mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 19:00:11 +01:00
Make str copyable. (#6083)
This commit is contained in:
@@ -12,6 +12,10 @@ import library "prelude/types/uint";
|
||||
class String {
|
||||
fn Size[self: Self]() -> u64 { return self.size; }
|
||||
|
||||
impl as Copy {
|
||||
fn Op[self: Self]() -> Self { return {.ptr = self.ptr, .size = self.size}; }
|
||||
}
|
||||
|
||||
// TODO: This should be an array iterator.
|
||||
private var ptr: Char*;
|
||||
// TODO: This should be a word-sized integer.
|
||||
|
||||
@@ -31,6 +31,10 @@ fn I() {
|
||||
F(v);
|
||||
}
|
||||
|
||||
fn Copy(s: str) -> str {
|
||||
return s;
|
||||
}
|
||||
|
||||
// CHECK:STDOUT: ; ModuleID = 'string.carbon'
|
||||
// CHECK:STDOUT: source_filename = "string.carbon"
|
||||
// CHECK:STDOUT:
|
||||
@@ -59,6 +63,14 @@ fn I() {
|
||||
// CHECK:STDOUT: ret void, !dbg !14
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: define void @_CCopy.Main(ptr sret({ ptr, i64 }) %return, ptr %s) !dbg !15 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @"_COp.String.Core:Copy.Core"(ptr %return, ptr %s), !dbg !16
|
||||
// CHECK:STDOUT: ret void, !dbg !17
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: declare void @"_COp.String.Core:Copy.Core"(ptr sret({ ptr, i64 }), ptr)
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !llvm.module.flags = !{!0, !1}
|
||||
// CHECK:STDOUT: !llvm.dbg.cu = !{!2}
|
||||
// CHECK:STDOUT:
|
||||
@@ -77,3 +89,6 @@ fn I() {
|
||||
// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "I", linkageName: "_CI.Main", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !13 = !DILocation(line: 31, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !14 = !DILocation(line: 28, column: 1, scope: !12)
|
||||
// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "Copy", linkageName: "_CCopy.Main", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !16 = !DILocation(line: 35, column: 10, scope: !15)
|
||||
// CHECK:STDOUT: !17 = !DILocation(line: 35, column: 3, scope: !15)
|
||||
|
||||
Reference in New Issue
Block a user