+extern JSCore.Value jscore_object_call_as_function(
+ JSCore.Context ctx,
+ JSCore.Object object,
+ JSCore.Object thisObject,
+ string val,
+ out JSCore.Value exception
+ );
+
+
namespace Palete {
* then a method is called, with a string argument (json encoded)
*
*/
- void executeFile(string fname, string method, string json)
+ public string executeFile(string fname, string call_method, string js_data)
+ throws JavascriptError
{
string file_data;
if (!FileUtils.test (fname, FileTest.EXISTS)) {
- throw new JavascriptError.MISSING_FILE(fname + " not found");
+ throw new JavascriptError.MISSING_FILE("Plugin: file not found %s", fname);
}
FileUtils.get_contents(fname, out file_data);
var jfile_data = new JSCore.String.with_utf8_c_string(file_data);
- var jmethod = new JSCore.String.with_utf8_c_string(method);
- var json_args = new JSCore.String.with_utf8_c_string(json);
+ var jmethod = new JSCore.String.with_utf8_c_string(call_method);
+ //var json_args = new JSCore.String.with_utf8_c_string(js_data);
- JSCore.Value ex;
+ JSCore.Value exa;
+ JSCore.Value exb;
+ unowned JSCore.Value exc;
+ JSCore.Value exd;
+ unowned JSCore.Value exe;
var goc = new JSCore.Class( class_definition );
var ctx = new JSCore.GlobalContext(goc);
var othis = ctx.get_global_object();
- var val = ctx.evaluate_script (
+ var eval = ctx.evaluate_script (
jfile_data,
othis,
null,
0,
- ex
+ out exa
);
if (!othis.has_property(ctx,jmethod)) {
- throw new JavascriptError.MISSING_METHOD ("Plugin: missing method %s", method);
- return;
+ throw new JavascriptError.MISSING_METHOD ("Plugin: missing method %s", call_method);
+
}
- var val = othis.get_property (ctx, jmethod, out ex);
- if (!val.is_function(ctx)) {
- throw new JavascriptError.MISSING_METHOD ("Plugin: not a method %s", method);
+ var val = othis.get_property (ctx, jmethod, out exb);
+
+ if (!val.is_object(ctx)) {
+ throw new JavascriptError.MISSING_METHOD ("Plugin: not a property not found %s", call_method);
}
- JSCore.Value[] args = {};
- args += json_args;
-
- var res = val.call_as_function(ctx, othis, args, ex);
+ var oval = val.to_object(ctx, out exc);
+ if (!oval.is_function(ctx)) {
+ throw new JavascriptError.MISSING_METHOD ("Plugin: not a method %s", call_method);
+ }
+
+ var res = jscore_object_call_as_function(
+ ctx, oval, othis, js_data, out exd
+ );
+ // this will never work, as we can not create arrays of Values - due to no
+ // free function being available..
+ //var args = new JSCore.Value[1] ;
+ //args[0] = new JSCore.Value.string(ctx,json_args) ;
+
+ //unowned JSCore.Value res = oval.call_as_function(ctx, othis, null, out exd);
+ // extract the text value from res...
+ JSCore.String sv = res.to_string_copy ( ctx, out exe);
+ var length = sv.get_maximum_utf8_c_string_size();
+ var buf = new char[length];
+ sv.get_utf8_c_string( buf, length);
+
+
+ print("ret:%s\n",(string) buf);
+ return (string) buf;
}