// valac TreeBuilder.vala --pkg libvala-0.24 --pkg posix -o /tmp/treebuilder
namespace Palete {
+
public class ValaSourceReport : Vala.Report {
-
+ public JsRender.JsRender file;
-
+ //public Gee.ArrayList<ValaSourceNotice> notices;
+
public Gee.HashMap<int,string> line_errors;
-
- public ValaSourceReport()
+
+ public void compile_notice(string type, string filename, int line, string message) {
+ GLib.Idle.add(() => {
+ this.file.compile_notice(type,filename,line,message);
+ return false;
+ });
+ }
+
+
+ public ValaSourceReport(JsRender.JsRender file)
{
base();
+ this.file = file;
this.line_errors = new Gee.HashMap<int,string> ();
+ //this.notices = new Gee.ArrayList<ValaSourceNotice>();
+ }
+
+ public override void warn (Vala.SourceReference? source, string message) {
+
+ if (source == null) {
+ return;
+ //stderr.printf ("My error: %s\n", message);
+ }
+
+ if (source.file.filename != "~~~~~testfile.vala") {
+ this.compile_notice("WARN", source.file.filename , source.begin.line, message);
+ return;
+ }
+ this.compile_notice("WARN", this.file.path, source.begin.line, message);
+
+ }
+ public override void depr (Vala.SourceReference? source, string message) {
+
+ if (source == null) {
+ return;
+ //stderr.printf ("My error: %s\n", message);
+ }
+
+ if (source.file.filename != "~~~~~testfile.vala") {
+ this.compile_notice("DEPR", source.file.filename, source.begin.line, message);
+ return;
+ }
+ this.compile_notice("DEPR", this.file.path, source.begin.line, message);
+
}
public override void err (Vala.SourceReference? source, string message) {
//stderr.printf ("My error: %s\n", message);
}
if (source.file.filename != "~~~~~testfile.vala") {
+ this.compile_notice("ERR", source.file.filename, source.begin.line, message);
+ print ("Other file: Got error error: %d: %s\n", source.begin.line, message);
return;
}
var pre = "";
}
line_errors.set(source.begin.line, pre + message);
+ this.compile_notice("ERR", this.file.path, source.begin.line, message);
+ print ("Test file: Got error error: %d: %s\n", source.begin.line, message);
}
public void dump()
{
return this.checkString(JsRender.NodeToVala.mungeFile(this.file));
}
- public Gee.HashMap<int,string> checkFileWithNodePropChange(
- JsRender.Node node,
- string prop,
- string ptype,
- string val)
+ public async Gee.HashMap<int,string> checkFileWithNodePropChange(
+ JsRender.Node node,
+ string prop,
+ string ptype,
+ string val)
{
Gee.HashMap<int,string> ret = new Gee.HashMap<int,string> ();
var hash = ptype == "listener" ? node.listeners : node.props;
hash.set(prop, newval);
var tmpstring = JsRender.NodeToVala.mungeFile(this.file);
+ hash.set(prop, old);
+ //print("%s\n", tmpstring);
var bits = tmpstring.split("/*--VALACHECK-START--*/");
var offset =0;
if (bits.length > 0) {
}
//this.dumpCode(tmpstring);
//print("offset %d\n", offset);
- this.checkString(tmpstring);
- hash.set(prop, old);
+ yield this.checkStringThread(tmpstring);
+
// modify report
var iter = this.report.line_errors.map_iterator();
}
+ public async Gee.HashMap<int,string> checkStringThread(string contents)
+ {
+ SourceFunc callback = checkStringThread.callback;
+ var ret = new Gee.HashMap<int,string>();
+ ThreadFunc<void*> run = () => {
+
+ // Pass back result and schedule callback
+ ret = this.checkString(contents);
+ Idle.add((owned) callback);
+ return null;
+ };
+ Thread.create<void*>(run, false);
+
+ // Wait for background thread to schedule our callback
+ yield;
+ return ret;
+ }
+
+
+
public Gee.HashMap<int,string> checkString(string contents)
- {
+ {
// init context:
+ var valac = "valac " ;
context = new Vala.CodeContext ();
Vala.CodeContext.push (context);
context.experimental = false;
context.experimental_non_null = false;
+
+#if VALA_0_28
+ var ver=28;
+#elif VALA_0_26
+ var ver=26;
+#elif VALA_0_24
+ var ver=24;
+#elif VALA_0_22
+ var ver=22;
+#endif
+
+ for (int i = 2; i <= ver; i += 2) {
+ context.add_define ("VALA_0_%d".printf (i));
+ }
+
+
+
+
+
+
+
var vapidirs = ((Project.Gtk)this.file.project).vapidirs();
- vapidirs += "/usr/share/vala-0.24/vapi" ;
-
+ // what's the current version of vala???
+
+
+ vapidirs += Path.get_dirname (context.get_vapi_path("glib-2.0")) ;
+
+ for(var i =0 ; i < vapidirs.length; i++) {
+ valac += " --vapidir=" + vapidirs[i];
+ }
+
+
// or context.get_vapi_path("glib-2.0"); // should return path..
context.vapi_directories = vapidirs;
context.report.enable_warnings = true;
context.metadata_directories = { };
context.gir_directories = {};
- this.report = new ValaSourceReport();;
+ context.thread = true;
+
+
+ this.report = new ValaSourceReport(this.file);
context.report = this.report;
- context.basedir = Posix.realpath (".");
+ context.basedir = "/tmp"; //Posix.realpath (".");
context.directory = context.basedir;
// add default packages:
//if (settings.profile == "gobject-2.0" || settings.profile == "gobject" || settings.profile == null) {
- context.profile = Vala.Profile.GOBJECT;
- // context.add_define ("GOBJECT");
- //}
- //add_depencies (context, settings.packages);
- //if (reporter.errors > 0) {
- // return context;
- //}
+ context.profile = Vala.Profile.GOBJECT;
+
var ns_ref = new Vala.UsingDirective (new Vala.UnresolvedSymbol (null, "GLib", null));
-
+ context.root.add_using_directive (ns_ref);
+
var source_file = new Vala.SourceFile (
context,
Vala.SourceFileType.SOURCE,
"~~~~~testfile.vala",
contents
);
-
+ source_file.add_using_directive (ns_ref);
+ context.add_source_file (source_file);
+
// add all the files (except the current one) - this.file.path
var pr = ((Project.Gtk)this.file.project);
if (this.file.build_module.length > 0) {
var cg = pr.compilegroups.get(this.file.build_module);
for (var i = 0; i < cg.sources.size; i++) {
var path = pr.resolve_path(
- pr.resolve_path_combine_path(pr.firstPath(),cg.sources.get(i)));
- if (path == this.file.path) {
+ pr.resolve_path_combine_path(pr.firstPath(),cg.sources.get(i)));
+
+ if (!FileUtils.test(path, FileTest.EXISTS)) {
+ continue;
+ }
+
+ if (path == this.file.path.replace(".bjs", ".vala")) {
+ valac += " " + path;
+ continue;
+ }
+ if (FileUtils.test(path, FileTest.IS_DIR)) {
continue;
}
+ //print("Add source file %s\n", path);
+
+ valac += " " + path;
+
+ if (Regex.match_simple("\\.c$", path)) {
+ context.add_c_source_file(path);
+ continue;
+ }
+
+
var xsf = new Vala.SourceFile (
context,
Vala.SourceFileType.SOURCE,
path
);
xsf.add_using_directive (ns_ref);
+ context.add_source_file(xsf);
+
}
}
-
+ // default.. packages..
+ context.add_external_package ("glib-2.0");
+ context.add_external_package ("gobject-2.0");
+ // user defined ones..
+
+ var dcg = pr.compilegroups.get("_default_");
+ for (var i = 0; i < dcg.packages.size; i++) {
+ valac += " --pkg " + dcg.packages.get(i);
+ context.add_external_package (dcg.packages.get(i));
+ }
//Vala.Config.PACKAGE_SUFFIX.substring (1)
// add the modules...
- context.add_external_package ("glib-2.0");
- context.add_external_package ("gobject-2.0");
- context.add_external_package ("libvala-0.24");
- source_file.add_using_directive (ns_ref);
- context.root.add_using_directive (ns_ref);
- context.add_source_file (source_file);
+
+ //context.add_external_package ("libvala-0.24");
+
+ this.report.compile_notice("START", "", 0, "");
//add_documented_files (context, settings.source_files);
if (context.report.get_errors () > 0) {
print("parse got errors");
((ValaSourceReport)context.report).dump();
+
Vala.CodeContext.pop ();
+ this.report.compile_notice("END", "", 0, "");
return this.report.line_errors;
}
- /*
+
// check context:
context.check ();
if (context.report.get_errors () > 0) {
print("check got errors");
((ValaSourceReport)context.report).dump();
Vala.CodeContext.pop ();
+ this.report.compile_notice("END", "", 0, "");
return this.report.line_errors;
}
+
+ context.codegen = new Vala.GDBusServerModule ();
+
+
+ context.output = "/tmp/testbuild";
+ valac += " -o " +context.output;
+ context.codegen.emit (context);
+ /*
+ var ccompiler = new Vala.CCodeCompiler ();
+ var cc_command = Environment.get_variable ("CC");
+ var pkg_config_command = Environment.get_variable ("PKG_CONFIG");
+#if VALA_0_28
+ ccompiler.compile (context, cc_command, new string[] { }, pkg_config_command);
+#else
+ ccompiler.compile (context, cc_command, new string[] { });
+#endif
*/
+
Vala.CodeContext.pop ();
-
+ this.report.compile_notice("END", "", 0, "");
+ print("%s\n", valac);
print("ALL OK?\n");
return this.report.line_errors;
}