X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgeneric%2FDev%2FMod%2FCPR.cp;h=10692154546406bda5ced94d1646285c4b8f265e;hb=50e6c50492b986a1b99b26d158a0e2462662b817;hp=aaf4c8afb54ce95487c4b72639b82485e631594f;hpb=d1c9d1e488c6e14e82570f2833779086aa0f44f9;p=cpc.git diff --git a/src/generic/Dev/Mod/CPR.cp b/src/generic/Dev/Mod/CPR.cp index aaf4c8a..1069215 100644 --- a/src/generic/Dev/Mod/CPR.cp +++ b/src/generic/Dev/Mod/CPR.cp @@ -84,14 +84,15 @@ MODULE DevCPR; END END Get; - PROCEDURE New (IN name: DevCPT.Name; val: BOOLEAN); + PROCEDURE New (IN name: DevCPT.Name): Selector; VAR s: Selector; BEGIN s := scope; WHILE (s.next # NIL) & (s.next.name$ # name$) DO s := s.next END; - IF s.next = NIL THEN NEW(s.next); s.next.name := name$; s.next.val := val + IF s.next = NIL THEN NEW(s.next); s.next.name := name$; s.next.val := FALSE ELSE err(1) - END + END; + RETURN s.next END New; PROCEDURE Old (IN name: DevCPT.Name): Selector; @@ -204,22 +205,26 @@ MODULE DevCPR; END Printable; PROCEDURE Parse*; - VAR val: BOOLEAN; + VAR val: BOOLEAN; s: Selector; BEGIN Get(sym); IF sym = new THEN Get(sym); - IF sym = ident THEN New(name, FALSE); Get(sym) + IF sym = ident THEN + s := New(name); Get(sym); + IF (sym = plus) OR (sym = minus) THEN + s.val := sym = plus; Get(sym) + END ELSE err(48) END - ELSIF sym = error THEN - IF Printable() THEN err(501) END; Get(sym) ELSIF sym = ident THEN - Get(sym); - IF sym = plus THEN Old(name).val := TRUE; Get(sym) - ELSIF sym = minus THEN Old(name).val := FALSE; Get(sym) + s := Old(name); Get(sym); + IF (sym = plus) OR (sym = minus) THEN + s.val := sym = plus; Get(sym) ELSE err(41) END + ELSIF sym = error THEN + IF Printable() THEN err(501) END; Get(sym) ELSIF sym = if THEN Get(sym); Expression(val); If(val); IF sym = then THEN Get(sym) @@ -260,8 +265,8 @@ MODULE DevCPR; Close; If(TRUE); NEW(scope); - New("TRUE", TRUE); - New("FALSE", FALSE) + Set("TRUE", TRUE); + Set("FALSE", FALSE) END Init; END DevCPR.