%% operator
authorcassowarii <cassowary@cassowary.me>
Tue, 7 Jul 2026 19:02:42 +0000 (12:02 -0700)
committercassowarii <cassowary@cassowary.me>
Tue, 7 Jul 2026 19:02:42 +0000 (12:02 -0700)
sample/project_euler/pe01.sa
src/compile/emit.c
src/parse/scanner.c

index fd39667..a202def 100644 (file)
@@ -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 }
 }
index 0ef10e8..99741a0 100644 (file)
@@ -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");
   }
index 21fd009..bf799b3 100644 (file)
@@ -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;
         }