aboutsummaryrefslogtreecommitdiffstats
path: root/src/resp.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-12-02 19:36:27 +0000
committerDavid Robillard <d@drobilla.net>2010-12-02 19:36:27 +0000
commit58daa5a8568ee0cc780bad8575e61447be64c77d (patch)
treec01db2cc46346282926a73c820eed113805529ac /src/resp.cpp
parent1b61928f542f1c54ac67791f382b20b39927eac5 (diff)
downloadresp-58daa5a8568ee0cc780bad8575e61447be64c77d.tar.gz
resp-58daa5a8568ee0cc780bad8575e61447be64c77d.tar.bz2
resp-58daa5a8568ee0cc780bad8575e61447be64c77d.zip
Remove ACall subclasses.
git-svn-id: http://svn.drobilla.net/resp/resp@282 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'src/resp.cpp')
-rw-r--r--src/resp.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/resp.cpp b/src/resp.cpp
index 96df3b7..c1684e2 100644
--- a/src/resp.cpp
+++ b/src/resp.cpp
@@ -28,6 +28,38 @@ using namespace std;
GC Object::pool(8 * 1024 * 1024);
+bool
+is_form(const AST* ast, const std::string& form)
+{
+ const AFn* fn = ast->to<const AFn*>();
+ if (fn)
+ return form == "fn";
+
+ const ACall* call = ast->to<const ACall*>();
+ if (!call)
+ return false;
+
+ const ASymbol* const sym = call->head()->to<const ASymbol*>();
+ if (!sym)
+ return false;
+
+ return sym->cppstr == form;
+}
+
+bool
+is_primitive(const PEnv& penv, const AST* ast)
+{
+ const ACall* call = ast->to<const ACall*>();
+ if (!call)
+ return false;
+
+ const ASymbol* const sym = call->head()->to<const ASymbol*>();
+ if (!sym)
+ return false;
+
+ return penv.primitives.find(sym->cppstr) != penv.primitives.end();
+}
+
int
print_usage(char* name, bool error)
{