Refactored all OP_ functions to vm/CATEGORY/ and renamed the files.
This commit is contained in:
parent
108be8c41e
commit
50a91d0b6f
67 changed files with 91 additions and 92 deletions
9
src/vm/maps/has_key.c
Normal file
9
src/vm/maps/has_key.c
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
case OP_HAS_KEY: {
|
||||
Value key = pop_value(vm);
|
||||
Value m = pop_value(vm);
|
||||
if (m.type != VAL_MAP || key.type != VAL_STRING) { fprintf(stderr, "HAS_KEY expects (map, string)\n"); exit(1); }
|
||||
int ok = map_has(&m, key.s ? key.s : "");
|
||||
free_value(m); free_value(key);
|
||||
push_value(vm, make_int(ok ? 1 : 0));
|
||||
break;
|
||||
}
|
||||
8
src/vm/maps/keys.c
Normal file
8
src/vm/maps/keys.c
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
case OP_KEYS: {
|
||||
Value m = pop_value(vm);
|
||||
if (m.type != VAL_MAP) { fprintf(stderr, "KEYS expects map\n"); exit(1); }
|
||||
Value arr = map_keys_array(&m);
|
||||
free_value(m);
|
||||
push_value(vm, arr);
|
||||
break;
|
||||
}
|
||||
16
src/vm/maps/make_map.c
Normal file
16
src/vm/maps/make_map.c
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
case OP_MAKE_MAP: {
|
||||
int pairs = inst.operand;
|
||||
if (pairs < 0) { fprintf(stderr, "MAKE_MAP invalid pair count\n"); exit(1); }
|
||||
Value m = make_map_empty();
|
||||
for (int i = 0; i < pairs; ++i) {
|
||||
Value val = pop_value(vm);
|
||||
Value key = pop_value(vm);
|
||||
if (key.type != VAL_STRING) { fprintf(stderr, "Map literal keys must be strings\n"); exit(1); }
|
||||
if (!map_set(&m, key.s ? key.s : "", val)) {
|
||||
fprintf(stderr, "Map literal set failed\n"); exit(1);
|
||||
}
|
||||
free_value(key);
|
||||
}
|
||||
push_value(vm, m);
|
||||
break;
|
||||
}
|
||||
8
src/vm/maps/values.c
Normal file
8
src/vm/maps/values.c
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
case OP_VALUES: {
|
||||
Value m = pop_value(vm);
|
||||
if (m.type != VAL_MAP) { fprintf(stderr, "VALUES expects map\n"); exit(1); }
|
||||
Value arr = map_values_array(&m);
|
||||
free_value(m);
|
||||
push_value(vm, arr);
|
||||
break;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue