summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/datamodel/ecmascript
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-08-21 15:14:55 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-08-21 15:14:55 (GMT)
commitf7ad82f972bf46571bb5229205f877f8ab31069d (patch)
treee83110054a551053a68fb93d7061709808a19a0d /src/uscxml/plugins/datamodel/ecmascript
parenta3fb1daf5b4e58471cc714853636025b6cac9aed (diff)
downloaduscxml-f7ad82f972bf46571bb5229205f877f8ab31069d.zip
uscxml-f7ad82f972bf46571bb5229205f877f8ab31069d.tar.gz
uscxml-f7ad82f972bf46571bb5229205f877f8ab31069d.tar.bz2
New Interpreter::validate() to identify issues with a document before running it
Diffstat (limited to 'src/uscxml/plugins/datamodel/ecmascript')
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp11
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h2
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp7
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h1
4 files changed, 16 insertions, 5 deletions
diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
index 3a9cb27..b8ec2cc 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
@@ -485,18 +485,21 @@ void JSCDataModel::setForeach(const std::string& item,
bool JSCDataModel::isLocation(const std::string& expr) {
// location needs to be RHS and ++ is only valid for RHS
- JSStringRef scriptJS = JSStringCreateWithUTF8CString((expr + "++").c_str());
+ return isValidSyntax(expr + "++");
+}
+
+bool JSCDataModel::isValidSyntax(const std::string& expr) {
+ JSStringRef scriptJS = JSStringCreateWithUTF8CString(expr.c_str());
JSValueRef exception = NULL;
bool valid = JSCheckScriptSyntax(_ctx, scriptJS, NULL, 0, &exception);
JSStringRelease(scriptJS);
-
+
if (exception || !valid) {
return false;
}
return true;
}
-
-
+
bool JSCDataModel::isDeclared(const std::string& expr) {
JSStringRef scriptJS = JSStringCreateWithUTF8CString(expr.c_str());
JSValueRef exception = NULL;
diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
index 6792130..10d5999 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
+++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
@@ -50,6 +50,8 @@ public:
virtual bool validate(const std::string& location, const std::string& schema);
virtual bool isLocation(const std::string& expr);
+ virtual bool isValidSyntax(const std::string& expr);
+
virtual void setEvent(const Event& event);
virtual Data getStringAsData(const std::string& content);
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
index 2a27d47..7b0b8e9 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
@@ -458,12 +458,17 @@ bool V8DataModel::validate(const std::string& location, const std::string& schem
}
bool V8DataModel::isLocation(const std::string& expr) {
+ // location needs to be RHS and ++ is only valid for RHS
+ return isValidSyntax(expr + "++");
+}
+
+bool V8DataModel::isValidSyntax(const std::string& expr) {
v8::Locker locker;
v8::HandleScope handleScope;
v8::TryCatch tryCatch;
v8::Context::Scope contextScope(_contexts.back());
- v8::Handle<v8::String> source = v8::String::New((expr + "++").c_str());
+ v8::Handle<v8::String> source = v8::String::New(expr.c_str());
v8::Handle<v8::Script> script = v8::Script::Compile(source);
if (script.IsEmpty() || tryCatch.HasCaught()) {
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
index a9717a2..e67a5ab 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
@@ -54,6 +54,7 @@ public:
virtual bool validate(const std::string& location, const std::string& schema);
virtual bool isLocation(const std::string& expr);
+ virtual bool isValidSyntax(const std::string& expr);
virtual uint32_t getLength(const std::string& expr);
virtual void setForeach(const std::string& item,