summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/context.cc10
-rw-r--r--src/context.h3
-rw-r--r--src/mainwin.cc2
3 files changed, 15 insertions, 0 deletions
diff --git a/src/context.cc b/src/context.cc
index 4bc6ed5..65d5e23 100644
--- a/src/context.cc
+++ b/src/context.cc
@@ -84,6 +84,8 @@ Value Context::lookup_variable(QString name, bool silent) const
}
return Value();
}
+ if (!parent && constants.contains(name))
+ return constants[name];
if (variables.contains(name))
return variables[name];
if (parent)
@@ -93,6 +95,14 @@ Value Context::lookup_variable(QString name, bool silent) const
return Value();
}
+void Context::set_constant(QString name, Value value)
+{
+ if (constants.contains(name))
+ PRINTA("WARNING: Attempt to modify constant '%1'.",name);
+ else
+ constants.insert(name,value);
+}
+
Value Context::evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const
{
if (functions_p && functions_p->contains(name))
diff --git a/src/context.h b/src/context.h
index d5be745..cbb1c4f 100644
--- a/src/context.h
+++ b/src/context.h
@@ -9,6 +9,7 @@ class Context
{
public:
const Context *parent;
+ QHash<QString, Value> constants;
QHash<QString, Value> variables;
QHash<QString, Value> config_variables;
const QHash<QString, class AbstractFunction*> *functions_p;
@@ -27,6 +28,8 @@ public:
void set_variable(QString name, Value value);
Value lookup_variable(QString name, bool silent = false) const;
+ void set_constant(QString name, Value value);
+
QString get_absolute_path(const QString &filename) const;
Value evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const;
diff --git a/src/mainwin.cc b/src/mainwin.cc
index 951c4f5..eeb7923 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -145,6 +145,8 @@ MainWindow::MainWindow(const QString &filename)
root_ctx.set_variable("$fa", Value(12.0));
root_ctx.set_variable("$t", Value(0.0));
+ root_ctx.set_constant("PI",Value(M_PI));
+
Value zero3;
zero3.type = Value::VECTOR;
zero3.append(new Value(0.0));
contact: Jan Huwald // Impressum