Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PHP] sourcemap broken #10585

Open
filt3rek opened this issue Feb 7, 2022 · 5 comments
Open

[PHP] sourcemap broken #10585

filt3rek opened this issue Feb 7, 2022 · 5 comments
Assignees
Milestone

Comments

@filt3rek
Copy link
Contributor

filt3rek commented Feb 7, 2022

Hej,

I've encountered a strange sourcemap break when writing some code. And I even don't know if it occurs on others target or only PHP, but I encountered that on PHP...
I know I use the old (but good) haxe.web.Dispatch...
@Simn will write that stupid code on stupid plateforms will give stupid result, but I try to xpose it anyway 🤣

Here is my build.hx :

-lib hx3compat
-D source-map
--php bin
--main Main

Here is my Main.hx :

class Main{
	static function main(){
		var uri		= haxe.web.Request.getURI();		
		var params	= haxe.web.Request.getParams();
		var apiConfig	= haxe.web.Dispatch.make( new Api() );
		var d		= new haxe.web.Dispatch( uri, params );
		d.runtimeDispatch( apiConfig );
	}
}

And the last Api.hx :

class Api{
	
	public function new(){}

	public static function foo( cb : Void->Void ){
		trace( "ok" );	// <------- removing this trace, sourcemap is ok
	}

	public function doFoo(){  // <--------- If it's something else a doXXX function (related to Dispatch), sourcemap is ok
		foo( function(){} );	// <--------- if arg is function, it breaks the sourcemap
	}
	
	public function doTestJStack(){
		throw "ok";
	}	
}

I've taken the sourcemap generated and gave it here (sorry for the long link...), as you can see, the tracefor example maps right, but the throw doesn't. The strange thing occurs when it's done as written in my comments, without that, sourcemap is good :
https://sokra.github.io/source-map-visualization/#base64,PD9waHAKLyoqCiAqIEdlbmVyYXRlZCBieSBIYXhlIDQuMy4wLXJjLjErZTRlMGJmZWFkCiAqLwoKdXNlIFxwaHBcX0Jvb3RcSHhBbm9uOwp1c2UgXHBocFxCb290Owp1c2UgXGhheGVcTG9nOwp1c2UgXGhheGVcRXhjZXB0aW9uIGFzIEhheGVFeGNlcHRpb247CgpjbGFzcyBBcGkgewoKCS8qKgoJICogQHBhcmFtIFxDbG9zdXJlICRjYgoJICogCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb28gKCRjYikgewoJCSNBcGkuaHg6NjogY2hhcmFjdGVycyAzLTgKCQkoTG9nOjokdHJhY2UpKCJvayIsIG5ldyBfSHhBbm9uX0FwaTAoIkFwaS5oeCIsIDYsICJBcGkiLCAiZm9vIikpOwoJfQoKCS8qKgoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCAoKSB7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRvRm9vICgpIHsKCQkjQXBpLmh4OjEwOiBjaGFyYWN0ZXJzIDMtMjIKCQlBcGk6OmZvbyhmdW5jdGlvbiAoKSB7CgkJfSk7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRvVGVzdEpTdGFjayAoKSB7CgkJI0FwaS5oeDoxNDogY2hhcmFjdGVycyAzLTgKCQl0aHJvdyBIYXhlRXhjZXB0aW9uOjp0aHJvd24oIm9rIik7Cgl9CgoJLyoqCgkgKiBAaW50ZXJuYWwKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglzdGF0aWMgcHVibGljIGZ1bmN0aW9uIF9faHhfX2luaXQgKCkKCXsKCQlzdGF0aWMgJGNhbGxlZCA9IGZhbHNlOwoJCWlmICgkY2FsbGVkKSByZXR1cm47CgkJJGNhbGxlZCA9IHRydWU7CgoKCX0KfQoKY2xhc3MgX0h4QW5vbl9BcGkwIGV4dGVuZHMgSHhBbm9uIHsKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlTmFtZSwgJGxpbmVOdW1iZXIsICRjbGFzc05hbWUsICRtZXRob2ROYW1lKSB7CgkJJHRoaXMtPmZpbGVOYW1lID0gJGZpbGVOYW1lOwoJCSR0aGlzLT5saW5lTnVtYmVyID0gJGxpbmVOdW1iZXI7CgkJJHRoaXMtPmNsYXNzTmFtZSA9ICRjbGFzc05hbWU7CgkJJHRoaXMtPm1ldGhvZE5hbWUgPSAkbWV0aG9kTmFtZTsKCX0KfQoKY2xhc3MgX0h4QW5vbl9BcGkyIGV4dGVuZHMgSHhBbm9uIHsKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRkaXNwYXRjaENvbmZpZykgewoJCSR0aGlzLT5kaXNwYXRjaENvbmZpZyA9ICRkaXNwYXRjaENvbmZpZzsKCX0KfQoKY2xhc3MgX0h4QW5vbl9BcGkxIGV4dGVuZHMgSHhBbm9uIHsKCWZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmopIHsKCQkkdGhpcy0+b2JqID0gJG9iajsKCX0KfQoKQm9vdDo6cmVnaXN0ZXJDbGFzcyhBcGk6OmNsYXNzLCAnQXBpJyk7CkJvb3Q6OnJlZ2lzdGVyTWV0YShBcGk6OmNsYXNzLCBuZXcgX0h4QW5vbl9BcGkxKG5ldyBfSHhBbm9uX0FwaTIoXEFycmF5X2h4Ojp3cmFwKFsib3kxMDp0ZXN0SlN0YWNrankyMTpoYXhlLndlYi5EaXNwYXRjaFJ1bGU6MToxYWh5Mzpmb29qUjE6MToxYWhnIl0pKSkpOwpBcGk6Ol9faHhfX2luaXQoKTsK,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluL2xpYi9BcGkucGhwIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL21lZGlhL2ZpbHQzcmVrL2NvbW1vbi93b3JrL3Rlc3RzL3NvdXJjZW1hcC9BcGkuaHgiLCIvbWVkaWEvZmlsdDNyZWsvY29tbW9uL3dvcmsvdGVzdHMvc291cmNlbWFwLz8iLCIvbWVkaWEvZmlsdDNyZWsvY29tbW9uL3dvcmsvdGVzdHMvc291cmNlbWFwL01haW4uaHgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLRTs7QUFBQSxBQUFBLENBQUEsYUFBTyxNQUFQLGlCQUFBLFVBQUEsR0FBQSxPQUFBOzs7Ozs7Ozs7Ozs7QUFJQTs7QUFBQSxBQUFBLEFBQUEsU0FBSyxZQUFVOzs7O0FDVGxCO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7QURhRzs7QUFBQSxNQUFBLEFBQUEsQUFBQSxBQUFBLHNCQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFiUixpQkFBQSxpQkVJMEMsaUJBQUE7Ozs7O0FESjNDOzs7Ozs7QUFBQTs7OyJ9,Y2xhc3MgQXBpewoJCglwdWJsaWMgZnVuY3Rpb24gbmV3KCl7fQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9vKCBjYiA6IFZvaWQtPlZvaWQgKXsKCQl0cmFjZSggIm9rIiApOwkvLyA8LS0tLS0tLSByZW1vdmluZyB0aGlzIHRyYWNlLCBzb3VyY2VtYXAgaXMgb2sKCX0KCglwdWJsaWMgZnVuY3Rpb24gZG9Gb28oKXsKCQlmb28oIGZ1bmN0aW9uKCl7fSApOwkvLyA8LS0tLS0tLS0tIGlmIGFyZyBpcyBmdW5jdGlvbiwgaXQgYnJlYWtzIHRoZSBzb3VyY2VtYXAKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGRvVGVzdEpTdGFjaygpewoJCXRocm93ICJvayI7Cgl9CQp9,Y2xhc3MgQXBpewoJCglwdWJsaWMgZnVuY3Rpb24gbmV3KCl7fQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9vKCBjYiA6IFZvaWQtPlZvaWQgKXsKCQl0cmFjZSggIm9rIiApOwkvLyA8LS0tLS0tLSByZW1vdmluZyB0aGlzIHRyYWNlLCBzb3VyY2VtYXAgaXMgb2sKCX0KCglwdWJsaWMgZnVuY3Rpb24gZG9Gb28oKXsKCQlmb28oIGZ1bmN0aW9uKCl7fSApOwkvLyA8LS0tLS0tLS0tIGlmIGFyZyBpcyBmdW5jdGlvbiwgaXQgYnJlYWtzIHRoZSBzb3VyY2VtYXAKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGRvVGVzdEpTdGFjaygpewoJCXRocm93ICJvayI7Cgl9CQp9,Y2xhc3MgTWFpbnsKCXN0YXRpYyBmdW5jdGlvbiBtYWluKCl7CgkJdmFyIHVyaQkJCT0gaGF4ZS53ZWIuUmVxdWVzdC5nZXRVUkkoKTsJCQoJCXZhciBwYXJhbXMJCT0gaGF4ZS53ZWIuUmVxdWVzdC5nZXRQYXJhbXMoKTsKCQl2YXIgYXBpQ29uZmlnCT0gaGF4ZS53ZWIuRGlzcGF0Y2gubWFrZSggbmV3IEFwaSgpICk7CgkJdmFyIGQJCQk9IG5ldyBoYXhlLndlYi5EaXNwYXRjaCggdXJpLCBwYXJhbXMgKTsKCQkJZC5ydW50aW1lRGlzcGF0Y2goIGFwaUNvbmZpZyApOwoJfQp9

@RealyUniqueName RealyUniqueName self-assigned this Feb 7, 2022
@filt3rek
Copy link
Contributor Author

Hej !
So at the end do we know if it's a global haxe bug or a PHP one please ?

@RealyUniqueName
Copy link
Member

It's a bug in sourcemap generation for PHP target specifically.

@filt3rek
Copy link
Contributor Author

filt3rek commented Mar 3, 2022

Hej Aleksandr,

I hope you're fine.
I know there is a lot of work everywhere but just asking if there is any chance this could be done soon please ?
Or maybe how can I help maybe do something to speed up this to being solved ? I really want to help if even I can, so please tell me what to do, where to look or something like that ?

Because I really use PHP everyday in my production work and once again I'm really thankful for your work on this target, and It's a pain to look at the php generated file to retrieve the hx pos one.

Please tell me if I can help if any way (just don't tell me to shut up looool)

Have a nice day !

@RealyUniqueName
Copy link
Member

I don't think I can get to this any time soon, sorry.
For now I can only point you to the related code:
Some comments here: https://github.com/HaxeFoundation/haxe/blob/6e79eaea3b2bdf1197cd71fec9272af0b72c0a12/src/context/sourcemaps.ml
and search "sourcemap" in this file: https://github.com/HaxeFoundation/haxe/blob/dd5385900ddd97dab73582d71f3dcf96d574b3c9/src/generators/genphp7.ml
pay attention to positions passed to #insert method of sourcemap_builder class.

@filt3rek
Copy link
Contributor Author

Hej,

I've looked at the .ml sources but I'm lost with all that.
I've written this small function like a nag lol which works fine and help me a lot for debugging :

static var hFiles	: Map<String,String>	= [];
public static function getSourcesStack( nativeStack : Array<StackItem> ) : Array<StackItem> {
#if sys
    var a	= [];
    for( stack in nativeStack ){
        switch stack {
            case FilePos(s, file, line, _)	:
                if( hFiles[ file ] == null ){
                    hFiles[ file ]	= sys.io.File.getContent( file );
                }
                var lines	= hFiles[ file ].split( "\n" );
                var currentLine	= lines[ line ];
                while( line > 0 ){
                    line--;
                    currentLine	= lines[ line ].trim();
                    if( currentLine.startsWith( "#" ) ){
                        break;
                    }
                }
                if( line > 0 ){
                    var cols	= currentLine.substr( 1 ).split( ":" ).map( s->s.trim() );
                    a.push( FilePos( s, cols[ 0 ], Std.parseInt( cols[ 1 ] ) ) );
                }else{
                    a.push( stack );
                }
            case _ :
                a.push( stack );
        }
    }
    return a;
#else
    return nativeStack;
#end
}

The thing that I find weird is when you say that "It's a bug in sourcemap generation for PHP target specifically." but in the generated php files, the reported source (I mean the comment which targets the original source file and line) seems to be good.

@Simn Simn added this to the Later milestone Mar 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants