Skip to content

Instantly share code, notes, and snippets.

@evolutionleo
Created June 25, 2022 14:40
Show Gist options
  • Save evolutionleo/1756eaff52fbb5856a9ec67f325331e3 to your computer and use it in GitHub Desktop.
Save evolutionleo/1756eaff52fbb5856a9ec67f325331e3 to your computer and use it in GitHub Desktop.
a script in GameMaker Language that allows you to treat function arguments as an array
#macro arguments argument_count == 0 ? [] : (argument_count == 1 ? [argument[0]] : (argument_count == 2 ? [argument[0], argument[1]] : (argument_count == 3 ? [argument[0], argument[1], argument[2]] : (argument_count == 4 ? [argument[0], argument[1], argument[2], argument[3]] : (argument_count == 5 ? [argument[0], argument[1], argument[2], argument[3], argument[4]] : (argument_count == 6 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5]] : (argument_count == 7 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6]] : (argument_count == 8 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7]] : (argument_count == 9 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8]] : (argument_count == 10 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9]] : (argument_count == 11 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10]] : (argument_count == 12 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11]] : (argument_count == 13 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12]] : (argument_count == 14 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12], argument[13]] : (argument_count == 15 ? [argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12], argument[13], argument[14]] : undefined)))))))))))))))
///@function method_execute_ext(f, [args])
///@param {method} f
///@param {any[]} [args]
function method_execute_ext(f, args = []) {
var l = array_length(args)
switch l {
case 0:
f()
break
case 1:
return f(args[0])
break
case 2:
return f(args[0], args[1])
break
case 3:
return f(args[0], args[1], args[2])
break
case 4:
return f(args[0], args[1], args[2], args[3])
break
case 5:
return f(args[0], args[1], args[2], args[3], args[4])
break
case 6:
return f(args[0], args[1], args[2], args[3], args[4], args[5])
break
case 7:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6])
break
case 8:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7])
break
case 9:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8])
break
case 10:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9])
break
case 11:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10])
break
case 12:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11])
break
case 13:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12])
break
case 14:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13])
break
case 15:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14])
break
case 16:
return f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15])
break
}
}
///@function method_execute(f, arg1*, arg2*, ...)
///@param {method} f
///@param {any} arg1*
///@param {any} arg2*
function method_execute(f) {
var l = argument_count
switch l {
case 0:
f()
break
case 1:
return f(argument[0])
break
case 2:
return f(argument[0], argument[1])
break
case 3:
return f(argument[0], argument[1], argument[2])
break
case 4:
return f(argument[0], argument[1], argument[2], argument[3])
break
case 5:
return f(argument[0], argument[1], argument[2], argument[3], argument[4])
break
case 6:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5])
break
case 7:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6])
break
case 8:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7])
break
case 9:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8])
break
case 10:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9])
break
case 11:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10])
break
case 12:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11])
break
case 13:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12])
break
case 14:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12], argument[13])
break
case 15:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12], argument[13], argument[14])
break
case 16:
return f(argument[0], argument[1], argument[2], argument[3], argument[4], argument[5], argument[6], argument[7], argument[8], argument[9], argument[10], argument[11], argument[12], argument[13], argument[14], argument[15])
break
}
}
// i used this function to create the unholy macro you see at the top of this script
function make_arg_array_macro() {
var str = ""
for(var i = 0; i < 16; i++) {
str += "argument_count == " + string(i) + " ? "
var _str = "["
for(var j = 0; j < i; j++) {
_str += "argument[" + string(j) + "]"
if j != i-1
_str += ", "
}
_str += "]"
str += _str + " : ("
}
str += "undefined"
for(var i = 0; i < 16; i++) {
str += ")"
}
show_debug_message(str)
show_message(str)
}
//make_arg_array_macro()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment