Well this led me to an interesting long research!
I found this neat SWC file filled with utils for mimicking the AS2 eval():
http://www.riaone.com/products/deval/index.html
And here's a proof of concept that what you're looking for might actually work:
package tests {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.utils.getQualifiedClassName;
import r1.deval.D;
public class RandomTests extends Sprite{
public function RandomTests() {
super();
var test:BitmapData = create(BitmapData, 100, 100, true, 0x00000000);
trace(test);
}
public function create( pClass:Class, ... pArgs ):* {
D.importClass(pClass);
var fullQName:String = getQualifiedClassName(pClass);
var qNameSplit:Array = fullQName.split("::");
var className:String = qNameSplit[1];
fullQName = qNameSplit.join(".");
var statements:String =
"import $0;\n" +
"return new $1($2);";
var args:Array = [];
for (var a:int = 0, aLen:int = pArgs.length; a < aLen; a++) {
switch(pArgs[a].constructor) {
case String:
args[a] = "\"" + pArgs[a] + "\"";
break;
default:
args[a] = pArgs[a];
break;
//throw new Error("Unhandled type, please add it: " + pArgs[a].constructor);
}
}
return D.eval(XString.gsub(statements,[fullQName, className, args.join(",")]));
}
}
}
Sorry for the bits of dependencies (Like my XString class for easy sub-replacements) but it does work in theory. The only issue would be passing object references as argument entries. But then again... the r1.deval.D class might be able to take it... hmm.
Anyways, thought maybe this would be worth sharing.