Commit 26ed8fd46e249032d8f5ae2ac522dcc227f5d3fe
1 parent
034c6d49
Exists in
master
arrays
Showing
1 changed file
with
6 additions
and
3 deletions
Show diff stats
fz/semantic.pl
... | ... | @@ -35,6 +35,7 @@ sa_n_traverse(N, NN, ST) :- sa_n(N, NN, ST). % non-list case |
35 | 35 | % |
36 | 36 | % handle all AST cases: |
37 | 37 | % var(N,T,I,A) - Name, Type, Initializer, Attrib -- variable declaration |
38 | +% val(N,T,I,A) - Name, Type, Initializer, Attrib -- (constant) value | |
38 | 39 | % lit(V,T) - Value, Type -- literal with type |
39 | 40 | % id(N) - Name -- identifier |
40 | 41 | % constraint(C,A) - Constraint, Attrib -- constraint |
... | ... | @@ -47,10 +48,11 @@ sa_n(var(N,T,[],A), V, ST) :- !, |
47 | 48 | V=var(N,T,[],AX), % new AST node becomes ST entry value |
48 | 49 | st_insert(ST, N, V). |
49 | 50 | |
50 | -sa_n(var(N,_T,I,_A), NI, ST) :- % non-empty initializer | |
51 | +sa_n(var(N,T,I,A), V, ST) :- % non-empty initializer | |
51 | 52 | sa_n_traverse(I, NI, ST), % parse initializer (& ignore T and A), |
52 | - V=NI, % -- just NI, not var(N,T,NI,AX) -- | |
53 | - st_insert(ST, N, V). % which becomes the ST entry value | |
53 | + sa_attribs(A, AX, ST), | |
54 | + V=val(N,T,I,AX), % -- not var(N,T,NI,AX) -- | |
55 | + st_insert(ST, N, V). % and it becomes the ST entry value | |
54 | 56 | |
55 | 57 | |
56 | 58 | sa_n(lit(E,array(T)), lit(NE, array(T)), ST) :- |
... | ... | @@ -98,6 +100,7 @@ sa_t_traverse(N, ST) :- sa_t(N, ST). % non-list case |
98 | 100 | % -- sa_t(NODE, ST) ----------------------------------------------------------- |
99 | 101 | |
100 | 102 | sa_t(var(_N,T,I,_A), _ST) :- type(I,T). |
103 | +sa_t(val(_N,T,I,_A), _ST) :- type(I,T). | |
101 | 104 | sa_t(lit(E,T), _ST) :- type(lit(E,T), T). |
102 | 105 | sa_t(constraint(CE, _AT), ST) :- |
103 | 106 | CE=..[_|AS], | ... | ... |