I need to look into flash at the base level more some time. So primitives are all that the bytecode handles?
Sort of... the AVM2 bytecode can be pretty abstract when compared with typical "assembly-like languages". The bytecode standard (or whatever this document on AVM2 opcodes is) explains what values certain opcodes expect--generally a primitive or an index into one of several tables (which in turn could contain references). That may not be relevant, though.
I've always thought that the phrase "pass by reference" was a big misnomer when used alongside "pass by value". Nothing is ever passed by reference. You can pass *a* reference, but the reference itself will be passed by value (copied). The canonical example is a swap method of the form swap(a:type, b:type):void, where the values are swapped in a side-effecting manner.
In C#, you can pass a reference to a reference by using the "ref" keyword before your parameters. In C/C++, you can pass pointers to pointers and other things like that. AS3, in standard fashion, has no explicitly defined mechanism for doing this sort of thing.