Automatically call entry point #39
Loading…
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
Actually all our test scripts contain "new Main();" in order to call for an entry point. This should be invoked automatically by the Interpreter from the PH7_VmByteCodeExec() function.
It should look for a main class, instantiate it, call its constructor if exists. Also it should pass argv as a parameter to the entry point. Some mechanism needs to be implemented to do that. There are two ways:
Additionally in scope of this ticket, I would like to discuss:
to:
or
Answering to your questions.
I would say, that it is a good idea to check number of parameters. However, on the other hand, first solution is used in other compilers. For example C/C++ compiler does not verify that. It might depend on implementation, but for sure GCC treats main() as a normal function and allows it to take any amount and any kind of arguments. The mentioned by @belliash check should be done later. The Interpreter should fail if supplied value will not match the variable type. But even this is not verified by other compilers I used to know. If developer make a mistake, the resulting program will cause a segmentation failure. What is more, I think the first solution will be easier to implement. I am not sure if we should do it exactly as described, but I am pretty sure this is the way to follow.
I see no difference. We can even try to use both of them with some precedence.
In my opinion, class constructor should not be used as a program entry. Having some method like main() is more than appreciated. This is also how it works in C#. If we decide to use main() method instead of constructor, I think we could also change the class name from Main to something else, i.e. mentioned Program. This could improve the readability a bit. I am just not sure if it is a good idea to still call constructor then.
Will be done in compiler_rework branch.
Implemented with
029dd9bfb4
in compiler_rework branch.