Giter Club home page Giter Club logo

php-to-zephir's Introduction

Php to Zephir

Build Status Scrutinizer Code Quality Code Coverage

Convert PHP to Zephir.

This project is builded on top of nikic/PHP-Parser

Install

composer require fezfez/php-to-zephir

How to use

vendor/bin/php-to-zephir phpToZephir:convert myDirToConvert 

It converts all files recursivly to Zephir language.

Issue

If you find a bug, please report it by new issue (with tested php code to see error).

Fatal error :'(

If you find a fatal error during converting, add --debug and identify where the fatal error happen. Then open issue !

php-to-zephir's People

Contributors

dermario avatar fezfez avatar ovr avatar rschiano avatar scil avatar scrutinizer-auto-fixer avatar vahid-sohrabloo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

php-to-zephir's Issues

String Escape Character is not converted

I found this issue, It breaks compilation of zephir.
php code: protected $token_b = "/(\r\n)+|(\n|\r)+/";
Converted code:- protected token_b = "/( )+|( | )+/";
It converts \r\n as a new line non printable character and this breaks compilation.

Composer Install Error

$ composer require fezfez/php-to-zephir

Using version ^0.1.2 for fezfez/php-to-zephir
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested package require fezfez/php-to-zephir could not be found, it looks like its name is invalid, " " is not allowed in package names.
  Problem 2
    - Installation request for fezfez/php-to-zephir ^0.1.2 -> satisfiable by fezfez/php-to-zephir[0.1.2].
    - fezfez/php-to-zephir 0.1.2 requires phalcon/zephir dev-master -> no matching package found.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

Installation failed, reverting ./composer.json to its original content.

Support for Php7.1 and Php7.2

This library supports up to Php 7.0, thank you for this great job.
Do you think of adding support for Php 7.1 and 7.2 to this library soon?

String indexing not converted

php

$name = "John";
if ($name[0] !== "J") {
    echo 'The name does not start with a capital J';
}

generated zep

if name[0] !== "J" {

fix

if substr(name, 0, 1) !== "J" {

Issues with the for loop and the unset statement

Hi there,
it seems that the library doesn't manage with the "for" loop and the "unset" statement.

This is my PHP code:

<?php
namespace Brainusers;
class ZephirTest {
    static public function hello() {
        $obj = array();
        for ($i=0; $i<1000; $i++) {
            $obj[] = new ZephirTest();
        }
        unset($obj);
    }
}

Output is:

namespace Brainusers;

class ZephirTest
{
    public static function hello() -> void
    {
        var obj, i;


        let obj =  [];
        for let i = 0; i < 1000; let i++ {
            let obj[] = new ZephirTest();
        }
        unset(obj);

    }

}

Trying to build:

$ zephir build
Zephir\ParseException: Syntax error in /php2zephir/brainusers/brainusers/zephirtest.zep on line 11

            for let i = 0; i < 1000; let i++ {
    --------------^

After changed to for i in range(0,1000) there is a problem with unset:

$ zephir build
Zephir\CompilerException: Cannot use expression type: variable in "unset" in /php2zephir/brainusers/brainusers/zephirtest.zep on line 14

            unset(obj);
    -----------------^

Printer "pExpr_List" does not exist

You guys did a really cool tool!

But I got some errors when I try to convert Doctrine 1.2.5 on PHP 7
https://github.com/doctrine/doctrine1

Please help!

first error:
Could not convert file "source/Doctrine/Connection/UnitOfWork.php" cause : Printer "pExpr_List" does not exist /root/php-to-zephir/vendor/fezfez/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php 117

fallowing the seconed error:
Fatal error: Uncaught TypeError: Argument 1 passed to PhpParser\Node\Stmt\If_::construct() must be an instance of PhpParser\Node\Expr, null given, called in /root/php-to-zephir/vendor/fezfez/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/SwitchPrinter.php on line 108 and defined in /root/php-to-zephir/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If.php:28
Stack trace:
#0 /root/php-to-zephir/vendor/fezfez/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/SwitchPrinter.php(108): PhpParser\Node\Stmt\If
->construct(NULL, Array)
#1 /root/php-to-zephir/vendor/fezfez/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/SwitchPrinter.php(36): PhpToZephir\Converter\Printer\Stmt\SwitchPrinter->convertSwitchToIfelse(Object(PhpParser\Node\Stmt\Switch
))
#2 [internal function]: PhpToZephir\Converter\Printer\Stmt\SwitchPrinter->convert(Object(PhpParser\Node\Stmt\Switch
))
#3 /root/php-to-zephir/vendor/fezfez/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php(92): call_user_func_array(Array, Array)
#4 /root/php-to-z in /root/php-to-zephir/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php on line 28

docblock hint applied without warning

  /**
   * @return bool
   */
  public function __construct() {

  }

zephir code:

public function __construct() -> bool

A constructor is not allowed to return any value in zephir. And this will crash. Maybe error or warning instead of just converting

Does not declare variable when used in preg_match function call

php

if (! preg_match('some regex here', $subject, $regs)) {

zephir

if !(preg_match("some regex here", subject, regs)) {

this will crash zephir because regs was not declared and initialized before.

fix

var regs;
let regs = null;
if !(preg_match("some regex here", subject, regs)) {

there alots of issues while compiling zephir from converted code

below log, when php to zephir

I have uploaded all code here [](https://github.com/surjit/zephir_ext)

please help me to sort the issues

Convert php to zephir

 81/81 [============================] 100% 4 secs/4 secs

+---------------+-----------------------------+------+-----------------+
| Incompatibility                                                      |
+---------------+-----------------------------+------+-----------------+
| Type          | Message                     | Line | Class           |
+---------------+-----------------------------+------+-----------------+
| ArrayFetchDim | supported funccall in array | 16   | CharCountBased  |
| ArrayFetchDim | supported funccall in array | 16   | CharCountBased  |
| ArrayFetchDim | supported funccall in array | 16   | GroupCountBased |
| ArrayFetchDim | supported funccall in array | 16   | GroupCountBased |
| ArrayFetchDim | supported funccall in array | 630  | Request         |
| ArrayFetchDim | supported funccall in array | 630  | Request         |
| ArrayFetchDim | supported funccall in array | 630  | Request         |
+---------------+-----------------------------+------+-----------------+

this one when I do zephir compile

Zephir\ParseException: Syntax error in /home/php-to-zephir/converted/Zesle/zesle/fastroute/dispatcher/charcountbased.zep on line 7

            var this->staticRouteMap, this->variableRouteData, tmpListThis->staticRouteMapThis->variableRouteData;
    -----------------^

at Library/CompilerFile.php(570)
#0 Library/Compiler.php(318): Zephir\CompilerFile->preCompile(Object(Zephir\Compiler))
#1 Library/Compiler.php(357): Zephir\Compiler->preCompile('zesle/fastroute...')
#2 Library/Compiler.php(904): Zephir\Compiler->recursivePreCompile('zesle')
#3 Library/Compiler.php(1131): Zephir\Compiler->generate(Object(Zephir\Commands\CommandBuild))
#4 Library/Compiler.php(1250): Zephir\Compiler->compile(Object(Zephir\Commands\CommandBuild), false)
#5 Library/Compiler.php(1331): Zephir\Compiler->install(Object(Zephir\Commands\CommandBuild), false)
#6 Library/Commands/CommandAbstract.php(108): Zephir\Compiler->build(Object(Zephir\Commands\CommandBuild))
#7 Library/Bootstrap.php(200): Zephir\Commands\CommandAbstract->execute(Object(Zephir\Config), Object(Zephir\Logger))
#8 compiler.php(21): Zephir\Bootstrap::boot()
#9 {main}

Parsing Issues

This project is a wonderful find. Am working through my PHP source and keep hitting errors, as you are probably aware.

// error: matches not declared
preg_match($regex, $src, $matches);

// error: self not declared
method_exists(self, $foo);

// error: array immutable
return ["foo" => "bar"];

// error: parse exception
$return = ["foo" => "bar"];

Some of these may not be significant but reporting here in any case.

Abandoned project?

Hi, is this project abandoned?

I'm writing a framework and wanted to use this to convert core components to Zephir. But the code here is not compatible with PHP 5.4.16 (RHEL/CentOS default). If it's abandoned, can I fork and make it compatible?

Yeah, I know, 5.4 is old crap, but unfortunatelly, in Brazil, stupidit.. I meant, some idio... errr... Sysadmins only use RHEL official crap.

May I fork it for the Phalcony Rest Framework? I must convert some PHP to Zephir.

Fatal error:: Cannot use 'PhpParser\Node\Expr\Cast\Bool' as class name as it is reserved

When compiling I am getting this error when converting:

Fatal error: Cannot use 'PhpParser\Node\Expr\Cast\Bool' as class name as it is reserved in C:\Users\ganes\Downloads\php\php-to-c\php-to-c-extension\vendor\fezfez\php-to-zephir\src\PhpToZephir\Converter\Printer\Expr\Cast\BoolPrinter.php on line 16

I am working with arrays and using unset function. Its a simple iterator

Closure numbering is not working correctly

php

<?php
namespace MySpace;

class TestClass {
    public function __construct() {
        $foo = function() {};
    }
}

output files:

testclass.zep

namespace MySpace;

class TestClass
{
    public function __construct() -> void
    {
        var foo;

        let foo =  new TestClass__constructClosureOne();
    }

}

testclass__constructclosurezero.zep

namespace MySpace;

class TestClass__constructClosureZero
{

    public function __construct()
    {

    }

    public function __invoke()
    {
    }
}

notice trying to instantiate class TestClass__constructClosureOne but class is TestClass__constructClosureZero --> One or Zero ??

Two bugs with static properties.

Hi.

I tested lastly php-to-zephir.
Cool tool, but I found two bugs with static properties.

  1. static properties are declared as local variables.
  2. name of property is not translated to zephir.

Example in php:

namespace Yii;

class Test {

    public static $x;

    public static function test1(){
    Test::$x = 1;
    }
}

result after conversion;

namespace Yii;

class Test
{
    public static x;
    public static function test1() -> void
    {
        var x;   // x already defined

        let Test::$x = 1;   // should be Test::x
    }

}

Assign dynamic expression to Array as second argument - doesn't work

Sample code with error:

$aggregation = [1,2,3];
$output[$position] = array_sum($aggregation) / count($aggregation);

Code without error

$aggregation = [1,2,3];
$variable = array_sum($aggregation) / count($aggregation);
$output[$position] = $variable;

Error trace with Debug:

[pExpr_Assign]                        line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Assign 297]                    line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
[pName]                               line "13"    class "TweeMath\Algorithm\RunningAverage"
[pArg]                                line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
[pName]                               line "13"    class "TweeMath\Algorithm\RunningAverage"
[pArg]                                line "13"    class "TweeMath\Algorithm\RunningAverage"
[pExpr_Variable]                      line "13"    class "TweeMath\Algorithm\RunningAverage"
 4/7 [================>-----------]  57%  1 sec/1 sec PHP Notice:  Undefined property: PhpParser\Node\Expr\BinaryOp\Div::$var in zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Expr/AssignPrinter.php on line 340
PHP Stack trace:
PHP   1. {main}() zzz/php-to-zephir/bin/php-to-zephir:0
PHP   2. include() zzz/php-to-zephir/bin/php-to-zephir:3
PHP   3. Symfony\Component\Console\Application->run() zzz/php-to-zephir/bin/php-to-zephir.php:22
PHP   4. Symfony\Component\Console\Application->doRun() zzz/php-to-zephir/vendor/symfony/console/Application.php:126
PHP   5. Symfony\Component\Console\Application->doRunCommand() zzz/php-to-zephir/vendor/symfony/console/Application.php:195
PHP   6. Symfony\Component\Console\Command\Command->run() zzz/php-to-zephir/vendor/symfony/console/Application.php:878
PHP   7. PhpToZephir\Command\Convert->execute() zzz/php-to-zephir/vendor/symfony/console/Command/Command.php:259
PHP   8. PhpToZephir\Engine->convert() zzz/php-to-zephir/src/PhpToZephir/Command/Convert.php:88
PHP   9. PhpToZephir\Engine->convertCode() zzz/php-to-zephir/src/PhpToZephir/Engine.php:92
PHP  10. PhpToZephir\Converter\Converter->nodeToZephir() zzz/php-to-zephir/src/PhpToZephir/Engine.php:146
PHP  11. PhpToZephir\Converter\Dispatcher->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Converter.php:50
PHP  12. PhpToZephir\Converter\Dispatcher->pStmts() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:207
PHP  13. PhpToZephir\Converter\Dispatcher->__call() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:207
PHP  14. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  15. PhpToZephir\Converter\Printer\StmtsPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  16. PhpToZephir\Converter\Dispatcher->p() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/StmtsPrinter.php:31
PHP  17. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  18. PhpToZephir\Converter\Printer\Stmt\NamespacePrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  19. PhpToZephir\Converter\Dispatcher->pStmts() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/NamespacePrinter.php:17
PHP  20. PhpToZephir\Converter\Dispatcher->__call() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/NamespacePrinter.php:17
PHP  21. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  22. PhpToZephir\Converter\Printer\StmtsPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  23. PhpToZephir\Converter\Dispatcher->p() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/StmtsPrinter.php:31
PHP  24. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  25. PhpToZephir\Converter\Printer\Stmt\ClassPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  26. PhpToZephir\Converter\Dispatcher->pStmts() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ClassPrinter.php:83
PHP  27. PhpToZephir\Converter\Dispatcher->__call() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ClassPrinter.php:83
PHP  28. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  29. PhpToZephir\Converter\Printer\StmtsPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  30. PhpToZephir\Converter\Dispatcher->p() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/StmtsPrinter.php:31
PHP  31. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  32. PhpToZephir\Converter\Printer\Stmt\ClassMethodPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  33. PhpToZephir\Converter\Dispatcher->pStmts() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ClassMethodPrinter.php:130
PHP  34. PhpToZephir\Converter\Dispatcher->__call() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ClassMethodPrinter.php:130
PHP  35. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  36. PhpToZephir\Converter\Printer\StmtsPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  37. PhpToZephir\Converter\Dispatcher->p() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/StmtsPrinter.php:31
PHP  38. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  39. PhpToZephir\Converter\Printer\Stmt\ForeachPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  40. PhpToZephir\Converter\Dispatcher->pStmts() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ForeachPrinter.php:27
PHP  41. PhpToZephir\Converter\Dispatcher->__call() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Stmt/ForeachPrinter.php:27
PHP  42. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  43. PhpToZephir\Converter\Printer\StmtsPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:103
PHP  44. PhpToZephir\Converter\Dispatcher->p() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/StmtsPrinter.php:31
PHP  45. call_user_func_array:{zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92}() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  46. PhpToZephir\Converter\Printer\Expr\AssignPrinter->convert() zzz/php-to-zephir/src/PhpToZephir/Converter/Dispatcher.php:92
PHP  47. PhpToZephir\Converter\Printer\Expr\AssignPrinter->arrayDimFetchCase() zzz/php-to-zephir/src/PhpToZephir/Converter/Printer/Expr/AssignPrinter.php:108

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.