mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 21:31:24 +01:00
Polish out support for reals and strings. (#2593)
Reals were mostly handled, but this PR adds storage of them. It also switches a little towards the FloatingPointType semantic from TokenizedBuffer. While real literals like `1.0` were handled, the type literals were not. This just adds `f64`, similar to how I also only support `i32`. The String type literal wasn't used, so I've added support in lexer and parser. Per discussion with @zygoloid String might be renamed based on the newer type literal plan, but it's still String in explorer and the design, so this is just consistent. The builtin_types.carbon tests the three basic types that are there right now. The test is added to both parser and semantics so that it's clear what the state is in both stages.
This commit is contained in:
+6
-3
@@ -10,6 +10,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: Foo,
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -18,17 +20,18 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+10
-7
@@ -12,6 +12,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: Foo,
|
||||
// CHECK:STDOUT: Bar,
|
||||
@@ -22,21 +24,21 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node7,
|
||||
@@ -45,6 +47,7 @@
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+10
-7
@@ -10,6 +10,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: a,
|
||||
// CHECK:STDOUT: Foo,
|
||||
@@ -19,26 +21,27 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: a,
|
||||
// CHECK:STDOUT: Foo,
|
||||
@@ -19,26 +21,27 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+14
-11
@@ -10,6 +10,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: a,
|
||||
// CHECK:STDOUT: b,
|
||||
@@ -20,31 +22,32 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+14
-11
@@ -10,6 +10,8 @@
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: real_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: strings: [
|
||||
// CHECK:STDOUT: a,
|
||||
// CHECK:STDOUT: b,
|
||||
@@ -20,31 +22,32 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node4,
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node5,
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node6,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user