Skip to content

Instantly share code, notes, and snippets.

@rlkelly
Last active August 26, 2022 20:26
Show Gist options
  • Save rlkelly/706e6a85a6b00f4d3c5c1a9eddd76a13 to your computer and use it in GitHub Desktop.
Save rlkelly/706e6a85a6b00f4d3c5c1a9eddd76a13 to your computer and use it in GitHub Desktop.
%builtins output
from starkware.cairo.common.serialize import serialize_word
from starkware.cairo.common.registers import get_ap
from starkware.cairo.common.alloc import alloc
from starkware.cairo.common.invoke import invoke
from starkware.cairo.common.registers import get_label_location
func add_vals{output_ptr: felt*}(x, y) -> (output_len, sum : felt*):
let (z: felt*) = alloc()
assert z[0] = x + y
return (1, z)
end
func bunch_of_vals{output_ptr: felt*}(x, y) -> (output_len, output_arr : felt*):
let (z: felt*) = alloc()
assert z[0] = x
assert z[1] = y
assert z[2] = x + y
return (3, z)
end
func invoke_func{output_ptr: felt*}(func_ptr : codeoffset, foo_args_len : felt, foo_args : felt*) -> (arr_len, arr: felt*):
let (func_pc) = get_label_location(func_ptr)
invoke(func_pc, foo_args_len, foo_args)
let (ap_val) = get_ap()
let result_arr : felt* = cast([ap_val - 1], felt*)
let result_arr_len = [ap_val - 2]
return (result_arr_len, result_arr)
end
func main{output_ptr : felt*}():
alloc_locals
let (local array : felt*) = alloc()
assert array[0] = 10
assert array[1] = 99
let (arr_len, res_arr) = invoke_func(bunch_of_vals, 2, array)
serialize_word(res_arr[0])
serialize_word(res_arr[1])
serialize_word(res_arr[2])
return ()
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment