< < # return the array of input types of a function # 0 -> the function object to analyze # 0 <- the array of input types [[ /rbx :popqReg /rdx :popqReg 16 /rdx /rdx :movqMemDisp8Reg /rdx /rdx :testqRegReg /typed :jnzLbl8 # untyped functions, it does not officially take any arguments /rdi /rdi :xorqRegReg ::internalAllocateArray /rax :movqImmReg /rax :callqReg /rax :pushqReg /rbx :pushqReg :retn @typed 8 /rdx /rdi :movqMemDisp8Reg 3 /rdi :shlqImm8Reg 16 /rdx /rsi :leaqMemDisp8Reg /rsi :pushqReg ::internalAllocateArray /rax :movqImmReg /rax :callqReg /rsi :popqReg /rax :pushqReg 8 /rax /rdi :leaqMemDisp8Reg /rax /ecx :movlMemReg 8 /rcx :subqImm8Reg :reprcx :movsb /rbx :pushqReg :retn ]] /eyinputs defv # return the array of output types of a function # 0 -> the function object to analyze # 0 <- the array of output types [[ /rbx :popqReg /rdx :popqReg 16 /rdx /rdx :movqMemDisp8Reg /rdx /rdx :testqRegReg /typed :jnzLbl8 # untyped functions, it does not officially produce any objects /rdi /rdi :xorqRegReg ::internalAllocateArray /rax :movqImmReg /rax :callqReg /rax :pushqReg /rbx :pushqReg :retn @typed 8 /rdx /rax :movqMemDisp8Reg 16 8 /rax /rdx /rdx :leaqMemIndexScaleDisp8Reg /rdx /rdi :movqMemReg 3 /rdi :shlqImm8Reg 8 /rdx /rsi :leaqMemDisp8Reg /rsi :pushqReg ::internalAllocateArray /rax :movqImmReg /rax :callqReg /rsi :popqReg /rax :pushqReg 8 /rax /rdi :leaqMemDisp8Reg /rax /ecx :movlMemReg 8 /rcx :subqImm8Reg :reprcx :movsb /rbx :pushqReg :retn ]] /eyoutputs defv # return the type of an object # 0 -> the object to analyze # 0 <- an integer from # 0 - 15 for normal heap objects (as per doc/notes object header) # 16 for array begin marker # 17 for quote begin marker # 18 for bottom of stack marker # 19 for error data marker # -1 for unknown object [[ /rbx :popqReg /rdx :popqReg 63 /rdx :btrqImm8Reg /integerType :jcLbl32 /rdx /rax :movqRegReg 44 /rax :shrqImm8Reg 6 /rax :cmpqImm8Reg /markers :jnzLbl8 7 /rdx /rdx :movzxMem8Disp8Reg64 4 /rdx :shrqImm8Reg /done :jmpLbl8 @markers 1 /rdx :cmpqImm8Reg /arrayMarker :jzLbl8 2 /rdx :cmpqImm8Reg /quoteMarker :jzLbl8 %5555555555555555 /rax :movqImmReg /rax /rdx :cmpqRegReg /bottomMarker :jzLbl8 emptyArray /rax :movqImmReg /rax /rdx :cmpqRegReg /emptyArrayConst :jzLbl8 4 /rdx :cmpqImm8Reg /errorMarker :jzLbl8 /unknown :jmpLbl8 @errorMarker 19 /rdx :movqImmReg /done :jmpLbl8 @bottomMarker 18 /rdx :movqImmReg /done :jmpLbl8 @quoteMarker 17 /rdx :movqImmReg /done :jmpLbl8 @arrayMarker 16 /rdx :movqImmReg /done :jmpLbl8 @emptyArrayConst 7 /rdx :movqImmReg /done :jmpLbl8 @integerType /rdx /rdx :xorqRegReg @done 63 /rdx :btsqImm8Reg /rdx :pushqReg /rbx :pushqReg :retn @unknown ::internalAllocateInteger /rax :movqImmReg /rax :callqReg /rdx /rdx :xorqRegReg 1 /rdx :subqImm8Reg /rdx 8 /rax :movqRegMemDisp8 /rax :pushqReg /rbx :pushqReg :retn ]] /eytype defv > _ ==globalFunctions { defv }' ::allocateOffsetStruct "typed" enterSubScope [ globalFunctions keys eydeff { | }' createScopeEntries createScopeExtensionEntries ] :execute leaveSubScope > -- # vim: syn=elymas