Skip to content

Commit aab5e68

Browse files
committed
fields work, indexes not yet
1 parent e496439 commit aab5e68

5 files changed

Lines changed: 52 additions & 10 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LSTSFLAGS = MALLOC_CHECK_=3
88
# recommendation: ulimit -s unlimited
99

1010
dev: install-production
11-
lm tests/promises/syntax/lhs-while-let.lsts
11+
lm tests/promises/syntax/lhs-nested-field.lsts > out.txt
1212
gcc tmp.c
1313
./a.out
1414

lib/core/common-macros.lsts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ typed macro macro::let(lhs: macro::set-binding, rhs: lazy): lazy = (
3838
);
3939

4040
typed macro macro::lhs-index(base: lazy, index: lazy): lazy = (base; index);
41-
typed macro macro::lhs-field(base: lazy, field: lazy): lazy = (base; field);
42-
typed macro macro::lhs-field(base field1: macro::lhs-field, field2: lazy): lazy = (macro::concat($".", field1)(base); field2);
4341

4442
typed macro macro::assign(tag-guard fields-guard: macro::lhs-tagged, rhs: lazy): Nil = (
4543
let uuid(term) = rhs;
@@ -60,10 +58,10 @@ typed macro macro::fallible-bind(lhs-base lhs-index: macro::lhs-index, rhs: lazy
6058
);
6159

6260
typed macro macro::assign(lhs-base lhs-field-name: macro::lhs-field, rhs: lazy): Nil = (
63-
macro::concat($"set.", lhs-field-name)(lhs-base, rhs)
61+
macro::concat($"set.", lhs-field-name)(macro::lhs-as-rhs(lhs-base), rhs)
6462
);
6563
typed macro macro::fallible-bind(lhs-base lhs-field-name: macro::lhs-field, rhs: lazy): Bool = (
66-
macro::concat($"set.", lhs-field-name)(lhs-base, rhs); true
64+
macro::concat($"set.", lhs-field-name)(macro::lhs-as-rhs(lhs-base), rhs); true
6765
);
6866

6967
typed macro macro::assign(lhs: macro::variable, rhs: lazy): Nil = (
@@ -103,17 +101,25 @@ typed macro macro::set(base index: macro::lhs-index, rhs: lazy): lazy = (
103101
);
104102

105103
typed macro macro::set(base field: macro::lhs-field, rhs: lazy): lazy = (
106-
macro::concat($"set.", field) (base, rhs)
104+
macro::concat($"set.", field) (macro::lhs-as-rhs(base), rhs)
107105
);
108106

109107
typed macro macro::lhs-as-rhs(v: macro::variable): lazy = (
110108
v
111109
);
112110

111+
typed macro macro::lhs-as-rhs(base idx: macro::lhs-index): lazy = (
112+
macro::lhs-as-rhs(base)[idx]
113+
);
114+
113115
typed macro macro::lhs-as-rhs(base: macro::lhs-address-of): lazy = (
114116
&v
115117
);
116118

119+
typed macro macro::lhs-as-rhs(base field: macro::lhs-field): lazy = (
120+
macro::concat($".", field)(macro::lhs-as-rhs(base))
121+
);
122+
117123
typed macro macro::lhs-address-of(base: lazy): lazy = (
118124
base
119125
);
@@ -122,10 +128,6 @@ typed macro macro::lhs-field(base: lazy, field: lazy): lazy = (
122128
base; field
123129
);
124130

125-
typed macro macro::lhs-as-rhs(base field: macro::lhs-index): lazy = (
126-
macro::concat(l".", field)(base)
127-
);
128-
129131
typed macro macro::lhs-index(base: lazy, index: lazy): lazy = (
130132
base; index
131133
);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
import lib/core/bedrock.lsts;
3+
4+
type A = { x: U8 };
5+
type B = { a: A };
6+
7+
let b = B(A(1));
8+
assert( b.a.x == 1 );
9+
10+
b.a.x = 2;
11+
assert( b.a.x == 2 );
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
import lib/core/bedrock.lsts;
3+
4+
let xs = safe-alloc(2, type((U8,U8)));
5+
xs[0] = (1,2);
6+
xs[1] = (2,3);
7+
8+
assert( xs[0].first == 1 );
9+
assert( xs[0].second == 2 );
10+
11+
assert( xs[1].first == 2 );
12+
assert( xs[1].second == 3 );
13+
14+
xs[0] = (3,4);
15+
16+
assert( xs[0].first == 3 );
17+
assert( xs[0].second == 4 );
18+
19+
assert( xs[1].first == 2 );
20+
assert( xs[1].second == 3 );
21+
22+
xs[0].first = 5;
23+
24+
assert( xs[0].first == 5 );
25+
assert( xs[0].second == 4 );
26+
27+
assert( xs[1].first == 2 );
28+
assert( xs[1].second == 3 );
29+

tests/promises/syntax/lhs-nested-index.lsts.skip

Whitespace-only changes.

0 commit comments

Comments
 (0)