From: cassowarii Date: Tue, 7 Jul 2026 19:02:42 +0000 (-0700) Subject: %% operator X-Git-Url: https://git.cassowary.me/gitweb.cgi?a=commitdiff_plain;h=f8ac77cca7d846640df31a2395429893070cf47d;p=sarabande.git %% operator --- diff --git a/sample/project_euler/pe01.sa b/sample/project_euler/pe01.sa index fd39667..a202def 100644 --- a/sample/project_euler/pe01.sa +++ b/sample/project_euler/pe01.sa @@ -17,5 +17,5 @@ def iota N { } sum iota(1000).filter => num { - [3, 5].any? => factor { num % factor == 0 } + [3, 5].any? => factor { num %% factor } } diff --git a/src/compile/emit.c b/src/compile/emit.c index 0ef10e8..99741a0 100644 --- a/src/compile/emit.c +++ b/src/compile/emit.c @@ -424,6 +424,7 @@ void compile_op(sbVmCompiler *cm, sbAstOp op) { case AST_OP_LE: EMIT(BC_OP_LE); break; case AST_OP_GE: EMIT(BC_OP_LT, BC_OP_NOT); break; case AST_OP_INDEX: EMIT(BC_OP_INDEX); break; + case AST_OP_DIVBY: EMIT(BC_OP_MOD, BC_LD_IMM); EARG(0); EMIT(BC_OP_EQ); break; default: PANIC("unknown operation!\n"); } diff --git a/src/parse/scanner.c b/src/parse/scanner.c index 21fd009..bf799b3 100644 --- a/src/parse/scanner.c +++ b/src/parse/scanner.c @@ -357,6 +357,9 @@ static sbLexToken compute_next_token(hScanner sc) { if (ch == '=') { new_token.type = T_PERCENTEQUALS; NEXT; + } else if (ch == '%') { + new_token.type = T_DOUBLEPERCENT; + NEXT; } else { new_token.type = T_PERCENT; }