Skip to content

Commit

Permalink
add pow
Browse files Browse the repository at this point in the history
  • Loading branch information
ShawSumma committed Feb 14, 2022
1 parent ab27946 commit e58bbc7
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
2 changes: 1 addition & 1 deletion minivm
Submodule minivm updated 1 files
+31 −9 minivm.c
15 changes: 13 additions & 2 deletions src/main.paka
Expand Up @@ -306,7 +306,7 @@ macro opcode {
let do_mul 8
let do_div 9
let do_mod 10

let do_pow 11
let do_call 12
let do_return 13
let do_putchar 14
Expand Down Expand Up @@ -337,6 +337,7 @@ macro op {
let do_neq 10
let do_let 11
let do_cat 12
let do_pow 13
}

## find variables
Expand Down Expand Up @@ -806,6 +807,9 @@ def emit_to(form out) {
if eq op op.do_mod {
return emit_binop opcode.do_mod get form 2 get form 3 out
}
if eq op op.do_pow {
return emit_binop opcode.do_pow get form 2 get form 3 out
}
puts "emit: form: unknown op"
exit
}
Expand Down Expand Up @@ -1144,6 +1148,9 @@ def paka_read_single(tokens state) {
if str.eq get first 1 "%" {
return paka_read_scall tokens 2 [vm.ast.op op.do_mod] state
}
if str.eq get first 1 "**" {
return paka_read_scall tokens 2 [vm.ast.op op.do_pow] state
}
if str.eq get first 1 "<" {
return paka_read_scall tokens 2 [vm.ast.op op.do_lt] state
}
Expand Down Expand Up @@ -1177,6 +1184,9 @@ def paka_read_single(tokens state) {
if str.eq get first 1 "mod" {
return paka_read_scall tokens 2 [vm.ast.op op.do_mod] state
}
if str.eq get first 1 "pow" {
return paka_read_scall tokens 2 [vm.ast.op op.do_pow] state
}
if str.eq get first 1 "cat" {
return paka_read_scall tokens 2 [vm.ast.op op.do_cat] state
}
Expand Down Expand Up @@ -1372,7 +1382,8 @@ def main(argv) {
}
let src read srcfile
if eq length src 0 {
puts "cannot read file"
put "cannot read file: "
puts srcfile
exit
}
let ast paka_parse src
Expand Down
10 changes: 3 additions & 7 deletions src/vm.paka
Expand Up @@ -19,7 +19,7 @@ macro opcode {
let do_mul 8
let do_div 9
let do_mod 10
let do_blte 11
let do_pow 11
let do_call 12
let do_ret 13
let do_putchar 14
Expand Down Expand Up @@ -97,12 +97,8 @@ def vm.run(ops index locals head nexthead) {
set locals add head ops.read.num ops.read.num
} else if eq op opcode.do_ret {
return ops.read.reg
} else if eq op opcode.do_blte {
if lte ops.read.reg ops.read.reg {
let index get ops add index 1
} else {
let index get ops index
}
} else if eq op opcode.do_pow {
set locals add head ops.read.num pow ops.read.reg ops.read.reg
} else if eq op opcode.do_beq {
if eq ops.read.reg ops.read.reg {
let index get ops add index 1
Expand Down

0 comments on commit e58bbc7

Please sign in to comment.