C++ Version of "Hello World"
The code below was automatically generated from the XMLVM shown on the
XMLVM homepage using an appropriate XSLT
stylesheet. As can be seen, we simply mimic the stack machine
of the Java virtual machine in C++.
#include "xmlvm.h"
#include "default.h"
class HelloWorld;
typedef HelloWorld* HelloWorld_ref;
class HelloWorld
: public java::lang::Object
{
public:
void __init()
{
XMLVM::Locals locals(1);
XMLVM::Stack stack(1);
XMLVM::Object_Ptr< java::lang::Object > op1;
XMLVM::Object_Ptr< java::lang::Object > op2;
locals[0] = (java::lang::Object_ref) this;
label0:
stack.push(locals[0]);
((java::lang::Object_ref) stack.top(0))->__init();
stack.remove(1);
label1:
return;
label998:
cout << "jsr/ret. Terminating." << endl;
exit(1);
}
static void main(XMLVM::Object_Ptr< XMLVM::Array< java::lang::String > > arg1)
{
XMLVM::Locals locals(1);
XMLVM::Stack stack(2);
XMLVM::Object_Ptr< java::lang::Object > op1;
XMLVM::Object_Ptr< java::lang::Object > op2;
locals[0] = arg1;
label0:
stack.push(java::lang::System::out);
stack.push( new java::lang::String("Hello World"));
((java::io::PrintStream_ref) stack.top(1))->println((java::lang::String_ref) stack.top(0));
stack.remove(2);
label1:
return;
label998:
cout << "jsr/ret. Terminating." << endl;
exit(1);
}
};
class HelloWorld_Loader {
public:
HelloWorld_Loader() {
HelloWorld::__clinit();
}
};
static HelloWorld_Loader HelloWorld_loader;
int main(int argc, char* argv[])
{
XMLVM::Object_Ptr< XMLVM::Array< java::lang::String > > args = new XMLVM::Array< java::lang::String >(argc-1);
for(int i=0; i<argc-1; i++){
(*args)[i] = new java::lang::String(argv[i+1]);
}
HelloWorld::main(args);
return 0;
}