Commit graph

146 commits

Author SHA1 Message Date
Richard
3d63f9113b Fixes for v8 3.19.18 (0x031918) 2014-08-28 19:46:50 -05:00
Richard
013fb3d22d Fixes for v8 3.19.2 (0x031902) 2014-08-28 19:46:50 -05:00
Richard
8829230641 Fixes for v8 3.17.10 (0x031710) 2014-08-28 19:46:49 -05:00
Richard
47cbf621be Fixes for v8 3.15.11 (0x031511) 2014-08-28 19:46:49 -05:00
William S Fulton
22be94d207 Fix std::vector<bool> compile problems on OSX for Javascript 2014-05-31 19:58:42 +01:00
Eric Wing
1766e67a1a JavaScriptCore: Improved code that uses JSObjectMakeError instead of JSValueToObject to create the exception object.
JSObjectMakeError automatically populates the "message" field, and possibly other fields I don't know about. This seems to be the most robust way to create an exception object.

Thanks to Brian Barnes again for the tip on JSObjectMakeError.
2014-05-26 22:35:28 +02:00
Eric Wing
e7b20624cc JavaScriptCore: Reverted 2 of the JSValueMakeUndefined replacements because those functions are tied to JSObjectRef instead of JSValueRef. The C compiler will allow this, but C++ will reject the conversion.
It is unclear what the correct handling is for JavaScriptCore. (Nobody bothers to document this in JSCore.) Unlike our other problem where we incorrectly assume JSObjectRef when the functions want JSValueRef, this time Apple is demanding the JSObjectRef. Like our other problem, I assume it is unsafe to try to convert Undefined into a JSObjectRef.

So reverting to NULL seems like the safer bet for this specific case. Perhaps the other alternative is to return an exception object or an error object. But I would like to see JSCore document this before trying.
2014-05-26 22:35:27 +02:00
Eric Wing
f1c331f2c5 JavaScriptCore: Returning NULL for wrapper functions that expect JSValueRef may crash program.
According to this:
http://parmanoir.com/Taming_JavascriptCore_within_and_without_WebView
Returning NULL instead of an actual JSValueRef for a return value of a function could lead to crashes. I think I have seen related weirdness in the past when I failed to return a proper type to JSCore which resulted in very hard to understand behavior.

So this patch changes those return NULLs to return JSValueMakeUndefined().

I thought about JSObjectMakeError, but I don't fully understand the intent of the Error object and can't find any relevant real world examples of it being used. However, everybody seems to be using JSValueMakeUndefined().

This patch should be low impact since this is only triggered on an error condition.
2014-05-26 22:35:27 +02:00
Eric Wing
6f69555225 JavaScriptCore: Fixed exception object so sourceURL (file name), line (number), and message can be recovered.
The current implementation only returns an error string. But this is insufficient for debugging (what file and line number did it fail at?).

As documented here:
http://parmanoir.com/Taming_JavascriptCore_within_and_without_WebView
converting the JSValueRef of string to an JSObjectRef (via JSValueToObject) will trigger JSCore into filling the "sourceURL" and "line" properties into the object so they can be inspected by the caller.

Additionally, JavaScriptCore has a "message" property which contains the message string. JSCore doesn't seem to be filling this in for us automatically, unlike "sourceURL" and "line". So this patch also fills that property in too.

Thanks to Brian Barnes for the detailed information about "sourceURL", "line", and "message".

Below is an example (derived from Brian Barnes's information) on how you typically use/extract these exception details.

void script_exception_to_string(JSContextRef js_context,JSValueRef exception_value_ref,char* return_error_string, int return_error_string_max_length)
{
	JSObjectRef exception_object;
	JSValueRef value_ref;
	JSStringRef jsstring_property_name = NULL;
	JSValueRef temporary_exception = NULL;
	JSStringRef js_return_string = NULL;
	size_t bytes_needed;
	char* c_result_string = NULL;
	exception_object = JSValueToObject(js_context, exception_value_ref, NULL);
	// source and line numbers

	strcpy(return_error_string,"[");

	jsstring_property_name = JSStringCreateWithUTF8CString("sourceURL");
	value_ref = JSObjectGetProperty(js_context, exception_object, jsstring_property_name, &temporary_exception);
	JSStringRelease(jsstring_property_name);
	js_return_string = JSValueToStringCopy(js_context, value_ref, NULL);
	bytes_needed = JSStringGetMaximumUTF8CStringSize(js_return_string);
	c_result_string = (char*)calloc(bytes_needed, sizeof(char));
	JSStringGetUTF8CString(js_return_string, c_result_string, bytes_needed);
	SDL_Log("c_result_string: %s\n", c_result_string);
	JSStringRelease(js_return_string);
	strncat(return_error_string, c_result_string, return_error_string_max_length-1);
	free(c_result_string);

	strncat(return_error_string, ":", return_error_string_max_length-1);

	jsstring_property_name = JSStringCreateWithUTF8CString("line");
	value_ref = JSObjectGetProperty(js_context, exception_object, jsstring_property_name, &temporary_exception);
	JSStringRelease(jsstring_property_name);
	js_return_string = JSValueToStringCopy(js_context, value_ref, NULL);
	bytes_needed = JSStringGetMaximumUTF8CStringSize(js_return_string);
	c_result_string = (char*)calloc(bytes_needed, sizeof(char));
	JSStringGetUTF8CString(js_return_string, c_result_string, bytes_needed);
	SDL_Log("c_result_string: %s\n", c_result_string);
	JSStringRelease(js_return_string);
	strncat(return_error_string, c_result_string, return_error_string_max_length-1);
	//SDL_Log("c_result_string: %s\n", c_result_string);
	free(c_result_string);

	strncat(return_error_string, "]", return_error_string_max_length-1);

	/* get message */
	jsstring_property_name = JSStringCreateWithUTF8CString("message");
	value_ref = JSObjectGetProperty(js_context, exception_object, jsstring_property_name, &temporary_exception);
	JSStringRelease(jsstring_property_name);
	if(NULL == value_ref)
	{
		strncat(return_error_string, "Unknown Error", return_error_string_max_length-1);
	}
	else
	{
		js_return_string = JSValueToStringCopy(js_context, value_ref, NULL);
		bytes_needed = JSStringGetMaximumUTF8CStringSize(js_return_string);
		c_result_string = (char*)calloc(bytes_needed, sizeof(char));
		JSStringGetUTF8CString(js_return_string, c_result_string, bytes_needed);
		SDL_Log("c_result_string: %s\n", c_result_string);
		JSStringRelease(js_return_string);
		strncat(return_error_string, c_result_string, return_error_string_max_length-1);
		//SDL_Log("c_result_string: %s\n", c_result_string);
		free(c_result_string);
	}
}

To use:
if(js_exception)
{
	char return_error_string[256];
	script_exception_to_string(js_context, js_exception, return_error_string, 256);
	SDL_Log("Compile error is %s", return_error_string);
}
2014-05-26 22:35:27 +02:00
William S Fulton
c2368a40b2 Javascript warnings for c++98 - remove vla 2014-05-24 14:13:24 +01:00
William S Fulton
3191473523 Fix compiler warnings in generated code when using -std=c++98 -std=gnu89 -pedantic -Wreturn-type 2014-05-24 14:13:19 +01:00
Oliver Buchtala
61b7da1671 JavascriptCore: Bugfix for null-pointer support.
This solution must be considered as a preliminary workaround.
2014-05-19 16:04:22 +02:00
Oliver Buchtala
3f0f588891 Javascript: support null pointers.
We allow to set pointer types using JS null.
2014-05-19 16:04:22 +02:00
Eric Wing
d5ea32d760 JavaScriptCore: ConvertPtr should allow JavaScript null to be a valid value.
It is common in C to accept NULL to functions for pointer parameters.
extern void DoSomething(struct Foo* foo);
...
DoSomething(NULL);

Thus, JavaScript null should be allowed:
module.DoSomething(null);

But the current ConvertPtr definition accepts only objects. This modifies it to allow null.
2014-05-19 16:04:22 +02:00
Oliver Buchtala
d9bb3a8415 Revert "JavaScriptCore: ConvertPtr should allow JavaScript null to be a valid value."
This reverts commit 05ed0325dc.
2014-05-19 11:46:29 +02:00
Oliver Buchtala
7cc617a19d Revert "Javascript: support null pointers."
This reverts commit 11963788e0.
2014-05-19 11:46:21 +02:00
Oliver Buchtala
11963788e0 Javascript: support null pointers.
We allow to set pointer types using JS null.
2014-05-19 00:21:21 +02:00
Oliver Buchtala
7824322b14 Javascript: fix warnings in li_std_string test.
Old typemaps for std::string were in place instead of delegating to UTL.
2014-05-18 22:40:22 +02:00
Eric Wing
05ed0325dc JavaScriptCore: ConvertPtr should allow JavaScript null to be a valid value.
It is common in C to accept NULL to functions for pointer parameters.
extern void DoSomething(struct Foo* foo);
...
DoSomething(NULL);

Thus, JavaScript null should be allowed:
module.DoSomething(null);

But the current ConvertPtr definition accepts only objects. This modifies it to allow null.
2014-05-18 21:27:54 +02:00
Eric Wing
8498e4878d JavaScriptCore: More missing static modifiers. 2014-05-18 21:27:54 +02:00
Eric Wing
fade0bcbde JavaScriptCore: C89: declare variables at the top for antiquated compilers like Microsoft Visual Studio. 2014-05-18 21:27:54 +02:00
Eric Wing
486e903de1 JavaScriptCore: Bug fix for SWIGJSC_AppendOutput. This function requires a return value. I think it should be arr, but somebody should scrutinize this. 2014-05-18 21:27:54 +02:00
Oliver Buchtala
fcb4833660 JavascriptCore: fix cleanup code. 2014-05-18 21:27:54 +02:00
Eric Wing
b4534a481a JavaScriptCore: Bug fix for finalizer. The finalizer needs to be set on the objectDefinition, not the classDefinition. Otherwise, all the finalize callbacks get NULL back for the PrivateData and can't free the SwigPrivData, causing massive leakage. 2014-05-18 21:27:54 +02:00
Eric Wing
aa55154ccf JavaScript: Added missing static modifiers to avoid duplicate symbol problems with multiple SWIG modules. 2014-05-18 21:27:53 +02:00
Karl Wette
6fc07c5dc9 Fix segmentation fault in some Javascript examples
- memory allocated with malloc() was then being freed with delete[],
  which is overridden by Javascript libraries (jsc), leading to segfault
- replacing malloc with %new_array seems to work though
2014-05-11 21:31:32 +02:00
Karl Wette
7cd9063b52 Remove execute permissions from various non-executable files
- source files and Makefiles need never be executable
- scripts are run directly by their interpreters in the
  test suites, so also do not need to be executable
2014-05-02 20:06:11 +02:00
William S Fulton
5792e97a44 Javascript: ensure banner appears before %begin code 2014-05-01 18:13:35 +01:00
Oliver Buchtala
e8ef490716 Removed obsolete 'node.i'. 2014-04-26 22:25:09 +02:00
Oliver Buchtala
cc16812c4f Added a comment about V8_VERSION macro. 2014-04-26 22:24:51 +02:00
William S Fulton
9587c133c5 Fix typo in Javascript exception 2014-04-19 15:55:12 +01:00
Oliver Buchtala
b5bc87667d Fix regressions.
- Adapted to changes in UTL
- Fixed detection of setters and getters.
2014-03-05 01:10:55 +01:00
Oliver Buchtala
335d926c44 Add stub std_deque.i files. 2013-09-24 03:56:19 +02:00
Oliver Buchtala
0528fd3ac3 Bugfix for Javascript generator. 2013-09-16 11:46:00 +02:00
Oliver Buchtala
eb9523b5ca Add missing macros. 2013-09-16 04:12:55 +02:00
Oliver Buchtala
3e28d1e28f Let v8 generated code include stdlib.h 2013-09-16 04:12:42 +02:00
Oliver Buchtala
b6426bde25 Add cdata.i typemaps. 2013-09-16 04:12:06 +02:00
Oliver Buchtala
1f07195812 Rearrange generation of init block to have custom init code within the initializer body. 2013-09-16 03:53:00 +02:00
Oliver Buchtala
80ce36c445 Make JSC inheritance definition more robust. 2013-09-16 02:27:51 +02:00
Oliver Buchtala
bf416876dd Bugfix for JSC %typemap(out) std::string&. 2013-09-16 01:33:19 +02:00
Oliver Buchtala
b7f827e42c Fix typemap declarations for (unsigned) long long. 2013-09-16 01:23:03 +02:00
Oliver Buchtala
68eff3e81e Merge branch 'devel' of github.com:oliver----/swig-v8 into devel 2013-09-16 00:55:57 +02:00
Oliver Buchtala
bb7bd50eab Add support for IN/OUTPUT typemaps. 2013-09-16 00:55:43 +02:00
Vladimir Menshakov
325b5445d6 removed Clear before Dispose from newer v8 code, consider the following code:
template <class T>
void Persistent<T>::Dispose() {
  if (this->IsEmpty()) return; //Clear will trigger this
  V8::DisposeGlobal(reinterpret_cast<internal::Object**>(this->val_));
  ...
}
2013-09-14 16:19:47 +04:00
Vladimir Menshakov
89fd7ed9c1 fixed newer v8 compilation 2013-09-14 16:17:21 +04:00
Oliver Buchtala
477b2393b1 Add stub 'typemaps.i' files. 2013-09-12 05:26:22 +02:00
Oliver Buchtala
dd84e6f9e0 Some fixes and cleanup in Javascript generator.
- v8 generator uses the correct mangled name for class templates
- removed symbols for template variables in favor of using the string
  literals directly, as it is easier to understand when debugging.
2013-09-10 14:16:36 +03:00
Oliver Buchtala
001f38c6a9 Fix settings for building nodejs tests.
Removed the `-node` command line flag.
Instead one has to use `-v8 -DBUILDING_NODE_EXTENSION=1`.
2013-09-10 13:29:16 +03:00
Oliver Buchtala
be35d94fdb Add support for PackedData to Javascript generator. 2013-09-10 11:53:12 +03:00
Oliver Buchtala
571c516a0b Some fixes for the Javascript generator.
- added missing `exception.i`
- added missing generator block `wrappers` for v8
2013-09-09 22:25:51 +03:00