Skip to content

Commit 7e75974

Browse files
committed
support inline records in external definitions
1 parent 55a50a9 commit 7e75974

32 files changed

+858
-306
lines changed

compiler/syntax/src/res_core.ml

Lines changed: 455 additions & 239 deletions
Large diffs are not rendered by default.

compiler/syntax/src/res_printer.ml

Lines changed: 218 additions & 67 deletions
Large diffs are not rendered by default.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
type f1.a = {
2+
x: int }[@@res.inlineRecordDefinition ]
3+
external f1 : a:f1.a -> unit (a:1) = "f1"
4+
type f2.return.type = {
5+
id: string }[@@res.inlineRecordDefinition ]
6+
external f2 : int -> f2.return.type (a:1) = "f2"
7+
type f3.return.type = {
8+
b: int }[@@res.inlineRecordDefinition ]
9+
and f3.returnType = {
10+
a: int }[@@res.inlineRecordDefinition ]
11+
external f3 : returnType:f3.returnType -> f3.return.type (a:1) = "f3"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
type f1.arg0 = {
2+
x: int }[@@res.inlineRecordDefinition ]
3+
external f1 : f1.arg0 -> unit (a:1) = "f1"
4+
type f2.arg0 = {
5+
x: int }[@@res.inlineRecordDefinition ]
6+
external f2 : f2.arg0 -> string -> unit (a:2) = "f2"
7+
type f3.return.type = {
8+
done: bool }[@@res.inlineRecordDefinition ]
9+
and f3.arg1 = {
10+
y: string }[@@res.inlineRecordDefinition ]
11+
and f3.arg0 = {
12+
x: int }[@@res.inlineRecordDefinition ]
13+
external f3 : f3.arg0 option -> f3.arg1 -> f3.return.type option (a:2) = "f3"
14+
type f4.arg1 = {
15+
y: string }[@@res.inlineRecordDefinition ]
16+
and f4.named = {
17+
x: int }[@@res.inlineRecordDefinition ]
18+
external f4 : named:f4.named -> f4.arg1 -> unit (a:2) = "f4"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
type nonrec f = string
2+
type f.arg0 = {
3+
z: int }[@@res.inlineRecordDefinition ]
4+
external f : f.arg0 -> unit (a:1) = "f"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type nonrec foo = string
2+
type t.foo = {
3+
x: int }[@@res.inlineRecordDefinition ]
4+
and t = {
5+
foo: t.foo }
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
external f1: (~a: {x: int}) => unit = "f1"
2+
external f2: int => {id: string} = "f2"
3+
4+
external f3: (~returnType: {a:int}) => {b:int} = "f3"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
external f1: {x: int} => unit = "f1"
2+
external f2: ({x: int}, string) => unit = "f2"
3+
external f3: (option<{x: int}>, {y: string}) => option<{done: bool}> = "f3"
4+
external f4: (~named: {x: int}, {y: string}) => unit = "f4"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
type f = string
2+
external f: {z: int} => unit = "f"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
type foo = string
2+
type t = {foo: {x: int}}

0 commit comments

Comments
 (0)