aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/baremetal/run.sh4
-rw-r--r--src/compiler/decl.zc2
-rw-r--r--src/lsp/server.zc16
-rwxr-xr-xsrc/tools/parity.sh2
-rwxr-xr-xsrc/tools/zcc2
5 files changed, 19 insertions, 7 deletions
diff --git a/src/baremetal/run.sh b/src/baremetal/run.sh
index 43f8a4c..5f812fa 100755
--- a/src/baremetal/run.sh
+++ b/src/baremetal/run.sh
@@ -69,7 +69,7 @@ if [ "$mode" = run ] || [ "$mode" = io ]; then
# the map is sized to the program, so a bigger runtime or program just gets a bigger board
${CC:-$(sh src/tools/findcc.sh)} -O2 -w src/tools/genmap.c -o "$D/genmap"
GENMAP="$D/genmap" bash src/tools/automap.sh run "$D/img" src/runtime/run.zc "$src" >"$D/genmap.log" 2>&1 || { cat "$D/genmap.log" >&2; exit 1; }
- cp src/micro/micro.c src/micro/micro_port.h src/core/fops.h src/core/bops.h src/core/stack.h src/core/genome.h "$D/img/"
+ cp src/micro/micro.c src/micro/micro_port.h src/core/fops.h src/core/bops.h src/core/stack.h src/core/hold.h src/core/genome.h "$D/img/"
"$cc" $common $def -I"$D/img" -c "$D/img/micro.c" -o "$D/micro.o"
if [ "$mode" = io ]; then
"$cc" $common $def -DBARE_INPUT=1 -I"$D/img" -c src/baremetal/port.c -o "$D/port.o"
@@ -80,7 +80,7 @@ if [ "$mode" = run ] || [ "$mode" = io ]; then
fi
elif [ "$mode" = compile ]; then
[ -f build/core/genome.bin ] || { echo "baremetal: no build/core/genome.bin; run make genome first" >&2; exit 1; }
- cp src/micro/micro.c src/micro/micro_port.h build/core/map/memmap.h build/core/genome.bin src/core/genome.h src/core/fops.h src/core/bops.h src/core/stack.h "$D/"
+ cp src/micro/micro.c src/micro/micro_port.h build/core/map/memmap.h build/core/genome.bin src/core/genome.h src/core/fops.h src/core/bops.h src/core/stack.h src/core/hold.h "$D/"
"$cc" $common $def -I"$D" -c "$D/micro.c" -o "$D/micro.o"
"$cc" $common $def -DBARE_INPUT=1 -I"$D" -c src/baremetal/port.c -o "$D/port.o"
timeout=90
diff --git a/src/compiler/decl.zc b/src/compiler/decl.zc
index fed7b8d..55e23a7 100644
--- a/src/compiler/decl.zc
+++ b/src/compiler/decl.zc
@@ -264,7 +264,7 @@ int kw_hold() {
if (skind[s] == K_GVAR || skind[s] == K_GARR) {
t = stype[s]; w = 1;
if (skind[s] == K_GARR) { w = tsz(t); if (t[0] == TY_ARR) t = t[1]; }
- if (t && (isptr(t) || isagg(t) || t == tbstr || t[0] == TY_DYN || t[0] == TY_FN)) serrn(sname[s], "is shared, so it holds numbers: no pointers, strings or structs (each actor has its own heap)");
+ if (t && (isptr(t) || isagg(t) || t == tbstr || t[0] == TY_DYN || t[0] == TY_FN)) serrn(sname[s], "is shared, so it holds numbers: no pointers, strings or structs (each worker has its own heap)");
sflag[s] = sflag[s] | F_SHARED | rank * F_SHARED_RANK;
if (hold_nshared >= 64) serr("too many shared variables in one hold block (64)");
else { hold_tab[hold_nshared * 2] = sval[s]; hold_tab[hold_nshared * 2 + 1] = w; hold_nshared++; }
diff --git a/src/lsp/server.zc b/src/lsp/server.zc
index d776b1d..85f3ea5 100644
--- a/src/lsp/server.zc
+++ b/src/lsp/server.zc
@@ -3100,6 +3100,18 @@ int cp_score(char* name) {
if (exact) { if (n == i) return 0; return 10 + n - i; }
return 100 + score + n - i;
}
+// a label already offered (a symbol named like a keyword wins over the keyword)
+int cp_has(char* name) {
+ int k = 0, i;
+ while (k < cp_n) {
+ i = 0;
+ while (name[i] && cp_name[k][i] == name[i]) i++;
+ if (!name[i] && !cp_name[k][i]) return 1;
+ k++;
+ }
+ return 0;
+}
+
int cp_add(char* name, int kind, int dead, int relevance) {
int score = cp_score(name);
if (score < 0) return 0;
@@ -3270,8 +3282,8 @@ int do_completion(int i) {
if (run.skind[s] != run.K_DOC && run.lookup(run.sname[s]) == s && (run.skind[s] != run.K_FN || (run.sflag[s] & (run.F_DEF | run.F_DECL)))) cp_symbol(s, run.sname[s]);
s++;
}
- if (cp_score("hold") >= 0) { hn = 0; hov_text("hold { shared let c; fn f() { } }"); if (cp_add("hold", 14, 0, 1)) cp_docs[cp_n - 1] = cp_copy("a monitor: shared variables for every actor, used under the block's lock by the functions written in it"); }
- if (cp_score("shared") >= 0) { hn = 0; hov_text("shared let name;"); if (cp_add("shared", 14, 0, 1)) cp_docs[cp_n - 1] = cp_copy("inside a hold block: a variable every actor sees, used only by the block's functions"); }
+ if (cp_score("hold") >= 0 && !cp_has("hold")) { hn = 0; hov_text("hold { shared let c; fn f() { } }"); if (cp_add("hold", 14, 0, 1)) cp_docs[cp_n - 1] = cp_copy("a monitor: shared variables for every actor, used under the block's lock by the functions written in it"); }
+ if (cp_score("shared") >= 0 && !cp_has("shared")) { hn = 0; hov_text("shared let name;"); if (cp_add("shared", 14, 0, 1)) cp_docs[cp_n - 1] = cp_copy("inside a hold block: a variable every actor sees, used only by the block's functions"); }
run.probe_off = cp_cursor; old = chk_stream; chk_stream = 0; check_doc(i); chk_stream = old; run.probe_off = -1;
member = 0;
if (run.probe_has == 2 && run.probe_mem && run.probe_mem[0] == run.TY_STRUCT) member = run.probe_mem[2];
diff --git a/src/tools/parity.sh b/src/tools/parity.sh
index 2d2086d..1b90885 100755
--- a/src/tools/parity.sh
+++ b/src/tools/parity.sh
@@ -71,7 +71,7 @@ SRCS="src/runtime/rt.zc src/core/core.zc src/runtime/run.zc"
if cmp -s "$W/prefix.new" "$W/prefix.zc"; then rm "$W/prefix.new"; else mv "$W/prefix.new" "$W/prefix.zc"; fi
nprefix=$(wc -l < "$W/prefix.zc")
# what the compiled image depends on besides the program
-DEPS="$ZC0 $MKG $W/prefix.zc src/micro/micro.c src/micro/port_linux.c src/micro/micro_port.h src/core/fops.h src/core/bops.h src/core/stack.h src/core/genome.h build/core/map/memmap.h"
+DEPS="$ZC0 $MKG $W/prefix.zc src/micro/micro.c src/micro/port_linux.c src/micro/micro_port.h src/core/fops.h src/core/bops.h src/core/stack.h src/core/hold.h src/core/genome.h build/core/map/memmap.h"
# one line of a program's output: newlines as /, control bytes as ?, cut to 60 columns
short() {
diff --git a/src/tools/zcc b/src/tools/zcc
index ba38e97..a53fe01 100755
--- a/src/tools/zcc
+++ b/src/tools/zcc
@@ -41,7 +41,7 @@ trap cleanup EXIT
# the map and the genome for this program only
( cd "$here" && bash src/tools/automap.sh run "$work/run" src/runtime/run.zc "$abs" ) >/dev/null
cp "$here/src/micro/micro.c" "$here/src/micro/micro_port.h" "$here/src/micro/port_linux.c" \
- "$here/src/core/fops.h" "$here/src/core/bops.h" "$here/src/core/stack.h" "$here/src/core/genome.h" "$work/run/"
+ "$here/src/core/fops.h" "$here/src/core/bops.h" "$here/src/core/stack.h" "$here/src/core/hold.h" "$here/src/core/genome.h" "$work/run/"
# static where the toolchain allows it; a plain link otherwise, with a note
static=-static