aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/design/001-language-v0.md2
-rw-r--r--src/compile.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/docs/design/001-language-v0.md b/docs/design/001-language-v0.md
index e9d5b2d..0b7b8dc 100644
--- a/docs/design/001-language-v0.md
+++ b/docs/design/001-language-v0.md
@@ -63,7 +63,7 @@ on frame { # 1/60초 진행. 핸들러 안에서 dt를 쓸
- 비교와 논리 연산은 0 또는 1을 낸다. `&& ||`는 양쪽을 모두 계산한다. 0이 아니면 참이다.
- `if`의 조건은 한 번 계산한다. 문장은 순서대로 실행한다.
- `frame`의 `dt`는 1/60이고 키 이벤트의 `dt`는 0이다.
-- 한도: 상태 32, 입력 32, 보기 24, 핸들러 64, 명령 512, 스택 64, 소스 32 KiB.
+- 한도: 상태 32, 입력 32, 보기 64, 핸들러 64, 명령 512, 스택 64, 소스 32 KiB.
- 모듈을 교체하면 같은 이름의 상태 값은 유지하고, 새 상태는 초기값을 쓰고, 없어진 상태는 버린다.
교체에 실패하면 이전 모듈과 상태가 그대로다.
diff --git a/src/compile.c b/src/compile.c
index 7305937..f990399 100644
--- a/src/compile.c
+++ b/src/compile.c
@@ -7,8 +7,8 @@
#include <stdlib.h>
#include <string.h>
-/* Limits and opcodes of Pure module format v4. */
-enum { STATES = 32, INPUTS = 32, VIEWS = 24, HANDLERS = 64, CODE = 512, STACK = 64, NAME = 32,
+/* Limits and opcodes of Pure module format v5. */
+enum { STATES = 32, INPUTS = 32, VIEWS = 64, HANDLERS = 64, CODE = 512, STACK = 64, NAME = 32,
DEPTH = 64, FIELDS = 32, COLLECTIONS = 1, CONSTANTS = 64, CONSTANT_BYTES = 8192,
RECORDS = 8, RECORD_FIELDS = 64, FIELDS_PER_RECORD = 16 };
enum { CONST, LOAD, DT, ADD, SUB, MUL, DIV, NEG, LT, LE, GT, GE, EQ, NE, AND, OR, NOT,
@@ -944,7 +944,7 @@ static void declaration(Compiler *c) {
} else if (!strcmp(kind.text, "view")) {
Token name = expect_name(c, "view name");
declare(c, &name);
- if (c->views == VIEWS) fail_at(c, name.line, name.column, "at most 24 views are allowed");
+ if (c->views == VIEWS) fail_at(c, name.line, name.column, "at most 64 views are allowed");
expect(c, "=", "'='");
memcpy(c->view_names[c->views], name.text, NAME);
c->view_value[c->views++] = expression(c, 0, false);
@@ -1468,7 +1468,7 @@ static void generate(Compiler *c, unsigned char **module, size_t *size) {
*size = 40 + 16u * c->states + 12u * c->collections + 16u * c->input_count + 8u * fields + 8u * c->constants +
8u * c->record_count + 16u * c->record_fields + 16u * c->views + 12u * c->handler_count + 16u * c->code_count + used + c->constant_used;
unsigned char *p = *module = allocate(c, *size);
- memcpy(p, "PUREMOD4", 8);
+ memcpy(p, "PUREMOD5", 8);
put16(p + 8, c->states);
put16(p + 10, c->input_count);
put16(p + 12, c->views);