mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-30 23:23:07 +00:00 
			
		
		
		
	Quasiquoting bracketed tuples.
This commit is contained in:
		| @@ -101,6 +101,7 @@ static const JanetInstructionDef janet_ops[] = { | ||||
|     {"ltim", JOP_LESS_THAN_IMMEDIATE}, | ||||
|     {"ltn", JOP_NUMERIC_LESS_THAN}, | ||||
|     {"mkarr", JOP_MAKE_ARRAY}, | ||||
|     {"mkbtp", JOP_MAKE_BRACKET_TUPLE}, | ||||
|     {"mkbuf", JOP_MAKE_BUFFER}, | ||||
|     {"mkstr", JOP_MAKE_STRING}, | ||||
|     {"mkstu", JOP_MAKE_STRUCT}, | ||||
|   | ||||
| @@ -85,10 +85,11 @@ enum JanetInstructionType janet_instructions[JOP_INSTRUCTION_COUNT] = { | ||||
|     JINT_SS, /* JOP_LENGTH */ | ||||
|     JINT_S, /* JOP_MAKE_ARRAY */ | ||||
|     JINT_S, /* JOP_MAKE_BUFFER */ | ||||
|     JINT_S, /* JOP_MAKE_TUPLE */ | ||||
|     JINT_S, /* JOP_MAKE_STRING */ | ||||
|     JINT_S, /* JOP_MAKE_STRUCT */ | ||||
|     JINT_S, /* JOP_MAKE_TABLE */ | ||||
|     JINT_S, /* JOP_MAKE_STRING */ | ||||
|     JINT_S, /* JOP_MAKE_TUPLE */ | ||||
|     JINT_S, /* JOP_MAKE_BRACKET_TUPLE */ | ||||
|     JINT_SSS, /* JOP_NUMERIC_LESS_THAN */ | ||||
|     JINT_SSS, /* JOP_NUMERIC_LESS_THAN_EQUAL */ | ||||
|     JINT_SSS, /* JOP_NUMERIC_GREATER_THAN */ | ||||
|   | ||||
| @@ -499,7 +499,7 @@ static Janet os_dir(int32_t argc, Janet *argv) { | ||||
|     char pattern[MAX_PATH + 1]; | ||||
|     if (strlen(dir) > (sizeof(pattern) - 3)) | ||||
|         janet_panicf("path too long: %s", dir); | ||||
|     sprintf(pattern, "%s/*", dir);  | ||||
|     sprintf(pattern, "%s/*", dir); | ||||
|     intptr_t res = _findfirst(pattern, &afile); | ||||
|     if (-1 == res) janet_panicv(janet_cstringv(strerror(errno))); | ||||
|     do { | ||||
|   | ||||
| @@ -71,7 +71,9 @@ static JanetSlot quasiquote(JanetFopts opts, Janet x) { | ||||
|             } | ||||
|             for (i = 0; i < len; i++) | ||||
|                 janet_v_push(slots, quasiquote(opts, tup[i])); | ||||
|             return qq_slots(opts, slots, JOP_MAKE_TUPLE); | ||||
|             return qq_slots(opts, slots, (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) | ||||
|                             ? JOP_MAKE_BRACKET_TUPLE | ||||
|                             : JOP_MAKE_TUPLE); | ||||
|         } | ||||
|         case JANET_ARRAY: { | ||||
|             int32_t i; | ||||
|   | ||||
| @@ -126,6 +126,7 @@ static void *op_lookup[255] = { | ||||
|     &&label_JOP_MAKE_STRUCT, | ||||
|     &&label_JOP_MAKE_TABLE, | ||||
|     &&label_JOP_MAKE_TUPLE, | ||||
|     &&label_JOP_MAKE_BRACKET_TUPLE, | ||||
|     &&label_JOP_NUMERIC_LESS_THAN, | ||||
|     &&label_JOP_NUMERIC_LESS_THAN_EQUAL, | ||||
|     &&label_JOP_NUMERIC_GREATER_THAN, | ||||
| @@ -681,10 +682,15 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in, JanetFiberStatus status) | ||||
|         vm_checkgc_pcnext(); | ||||
|     } | ||||
|  | ||||
|     VM_OP(JOP_MAKE_TUPLE) { | ||||
|     VM_OP(JOP_MAKE_TUPLE) | ||||
|     /* fallthrough */ | ||||
|     VM_OP(JOP_MAKE_BRACKET_TUPLE) { | ||||
|         int32_t count = fiber->stacktop - fiber->stackstart; | ||||
|         Janet *mem = fiber->data + fiber->stackstart; | ||||
|         stack[D] = janet_wrap_tuple(janet_tuple_n(mem, count)); | ||||
|         const Janet *tup = janet_tuple_n(mem, count); | ||||
|         if (opcode == JOP_MAKE_BRACKET_TUPLE) | ||||
|             janet_tuple_flag(tup) |= JANET_TUPLE_FLAG_BRACKETCTOR; | ||||
|         stack[D] = janet_wrap_tuple(tup); | ||||
|         fiber->stacktop = fiber->stackstart; | ||||
|         vm_checkgc_pcnext(); | ||||
|     } | ||||
|   | ||||
| @@ -970,6 +970,7 @@ enum JanetOpCode { | ||||
|     JOP_MAKE_STRUCT, | ||||
|     JOP_MAKE_TABLE, | ||||
|     JOP_MAKE_TUPLE, | ||||
|     JOP_MAKE_BRACKET_TUPLE, | ||||
|     JOP_NUMERIC_LESS_THAN, | ||||
|     JOP_NUMERIC_LESS_THAN_EQUAL, | ||||
|     JOP_NUMERIC_GREATER_THAN, | ||||
|   | ||||
| @@ -88,4 +88,7 @@ | ||||
| (assert (deep= (drop-until pos? @[-1 -2 3]) @[3]) "drop-until 4") | ||||
| (assert (deep= (drop-until pos? @[-1 1 -2]) @[1 -2]) "drop-until 5") | ||||
|  | ||||
| # Quasiquote bracketed tuples | ||||
| (assert (= (tuple/type ~[1 2 3]) (tuple/type '[1 2 3])) "quasiquote bracket tuples") | ||||
|  | ||||
| (end-suite) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose