0
0
mirror of https://github.com/phpv8/v8js.git synced 2024-12-22 08:11:52 +00:00

Add StartColumn/EndColumn properties to script exception, closes #126

This commit is contained in:
Stefan Siegl 2014-11-22 12:56:00 +01:00
parent 687459ba7c
commit 65148db31f
6 changed files with 62 additions and 6 deletions

View File

@ -136,12 +136,16 @@ PHP API
/* Properties */
protected string JsFileName = NULL;
protected int JsLineNumber = NULL;
protected int JsStartColumn = NULL;
protected int JsEndColumn = NULL;
protected string JsSourceLine = NULL;
protected string JsTrace = NULL;
/* Methods */
final public string getJsFileName( )
final public int getJsLineNumber( )
final public int getJsStartColumn( )
final public int getJsEndColumn( )
final public string getJsSourceLine( )
final public string getJsTrace( )
}

View File

@ -19,7 +19,7 @@ try {
?>
===EOF===
--EXPECTF--
object(V8JsScriptException)#%d (11) {
object(V8JsScriptException)#%d (13) {
["message":protected]=>
string(75) "exception.js:1: ReferenceError: this_function_does_not_exist is not defined"
["string":"Exception":private]=>
@ -59,6 +59,10 @@ object(V8JsScriptException)#%d (11) {
string(12) "exception.js"
["JsLineNumber":protected]=>
int(1)
["JsStartColumn":protected]=>
int(0)
["JsEndColumn":protected]=>
int(1)
["JsSourceLine":protected]=>
string(31) "this_function_does_not_exist();"
["JsTrace":protected]=>

View File

@ -33,7 +33,7 @@ try {
?>
===EOF===
--EXPECTF--
object(V8JsScriptException)#%d (11) {
object(V8JsScriptException)#%d (13) {
["message":protected]=>
string(49) "throw_0:1: ReferenceError: fooobar is not defined"
["string":"Exception":private]=>
@ -89,6 +89,10 @@ object(V8JsScriptException)#%d (11) {
string(7) "throw_0"
["JsLineNumber":protected]=>
int(1)
["JsStartColumn":protected]=>
int(0)
["JsEndColumn":protected]=>
int(1)
["JsSourceLine":protected]=>
string(7) "fooobar"
["JsTrace":protected]=>

View File

@ -0,0 +1,20 @@
--TEST--
Test V8::executeString() : Test getJsStartColumn on script exception
--SKIPIF--
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
--FILE--
<?php
$v8 = new V8Js();
try {
$v8->executeString("print(blar());");
}
catch(V8JsScriptException $e) {
var_dump($e->getJsStartColumn());
}
?>
===EOF===
--EXPECT--
int(6)
===EOF===

View File

@ -42,7 +42,7 @@ try {
ctor called (php)
Hello John
caught js exception
object(V8JsScriptException)#%d (11) {
object(V8JsScriptException)#%d (13) {
["message":protected]=>
string(56) "ctor-test:4: Call to protected __construct() not allowed"
["string":"Exception":private]=>
@ -87,6 +87,10 @@ object(V8JsScriptException)#%d (11) {
string(9) "ctor-test"
["JsLineNumber":protected]=>
int(4)
["JsStartColumn":protected]=>
int(18)
["JsEndColumn":protected]=>
int(19)
["JsSourceLine":protected]=>
string(55) " var ngGreeter = new PHP.greeter.constructor("Ringo");"
["JsTrace":protected]=>

22
v8js.cc
View File

@ -1791,7 +1791,7 @@ static void php_v8js_create_script_exception(zval *return_value, v8::TryCatch *t
v8::Handle<v8::Message> tc_message = try_catch->Message();
const char *filename_string, *sourceline_string;
char *message_string;
int linenum, message_len;
int linenum, start_col, end_col, message_len;
object_init_ex(return_value, php_ce_v8js_script_exception);
@ -1814,6 +1814,12 @@ static void php_v8js_create_script_exception(zval *return_value, v8::TryCatch *t
linenum = tc_message->GetLineNumber();
PHPV8_EXPROP(_long, JsLineNumber, linenum);
start_col = tc_message->GetStartColumn();
PHPV8_EXPROP(_long, JsStartColumn, start_col);
end_col = tc_message->GetEndColumn();
PHPV8_EXPROP(_long, JsEndColumn, end_col);
message_len = spprintf(&message_string, 0, "%s:%d: %s", filename_string, linenum, exception_string);
v8::String::Utf8Value stacktrace(try_catch->StackTrace());
@ -1869,6 +1875,16 @@ V8JS_EXCEPTION_METHOD(JsFileName);
V8JS_EXCEPTION_METHOD(JsLineNumber);
/* }}} */
/* {{{ proto string V8JsScriptException::getJsStartColumn()
*/
V8JS_EXCEPTION_METHOD(JsStartColumn);
/* }}} */
/* {{{ proto string V8JsScriptException::getJsEndColumn()
*/
V8JS_EXCEPTION_METHOD(JsEndColumn);
/* }}} */
/* {{{ proto string V8JsScriptException::getJsSourceLine()
*/
V8JS_EXCEPTION_METHOD(JsSourceLine);
@ -1882,6 +1898,8 @@ V8JS_EXCEPTION_METHOD(JsTrace);
static const zend_function_entry v8js_script_exception_methods[] = { /* {{{ */
PHP_ME(V8JsScriptException, getJsFileName, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
PHP_ME(V8JsScriptException, getJsLineNumber, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
PHP_ME(V8JsScriptException, getJsStartColumn, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
PHP_ME(V8JsScriptException, getJsEndColumn, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
PHP_ME(V8JsScriptException, getJsSourceLine, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
PHP_ME(V8JsScriptException, getJsTrace, arginfo_v8jsscriptexception_no_args, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
{NULL, NULL, NULL}
@ -1974,6 +1992,8 @@ static PHP_MINIT_FUNCTION(v8js)
/* Add custom JS specific properties */
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsFileName"), ZEND_ACC_PROTECTED TSRMLS_CC);
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsLineNumber"), ZEND_ACC_PROTECTED TSRMLS_CC);
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsStartColumn"), ZEND_ACC_PROTECTED TSRMLS_CC);
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsEndColumn"), ZEND_ACC_PROTECTED TSRMLS_CC);
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsSourceLine"), ZEND_ACC_PROTECTED TSRMLS_CC);
zend_declare_property_null(php_ce_v8js_script_exception, ZEND_STRL("JsTrace"), ZEND_ACC_PROTECTED TSRMLS_CC);