As part of some research I am doing a Python Virtual Machine in Java, and the exact semantics of the STORE_NAME bytecode is unclear to be, so I was hoping somebody here could clarify it. The STORE_NAME bytecode is supposed to set a value for a name in the current scope. However, the following piece of code:
def hello(who): print "Hello", who return hello(who) print "Say:" hello("World") Results in this bytecode for the top level: 1, LOAD_CONST, 1 4, MAKE_FUNCTION, 0 7, STORE_NAME, 0 10, LOAD_CONST, 2 13, PRINT_ITEM, None 14, PRINT_NEWLINE, None 15, LOAD_NAME, 0 18, LOAD_CONST, 3 21, CALL_FUNCTION, 1 24, POP_TOP, None 25, LOAD_CONST, 0 28, RETURN_VALUE, None And this bytecode for the hello function: 1, LOAD_CONST, 1 4, PRINT_ITEM, None 5, LOAD_FAST, 0 8, PRINT_ITEM, None 9, PRINT_NEWLINE, None 10, LOAD_GLOBAL, 1 13, LOAD_FAST, 0 16, CALL_FUNCTION, 1 19, RETURN_VALUE, None 20, LOAD_CONST, 0 23, RETURN_VALUE, None The first column are the byte numbers, and the last column contains the arguments to the byte codes if they take any. The function is stored using STORE_NAME with offset 0 in the module scope, but it is loaded from inside the hello method using LOAD_GLOBAL with offset 1. My questions are: Does STORE_NAME add things to the global scope when used top level? And why is the offset different? The documentation contains nothing usable: http://www.python.org/doc/2.5.2/lib/bytecodes.html regards, Mathias -- http://mail.python.org/mailman/listinfo/python-list