diff --git a/openscad.pro b/openscad.pro index 8c72b3f6..f08ceccf 100644 --- a/openscad.pro +++ b/openscad.pro @@ -218,6 +218,7 @@ SOURCES += src/openscad.cc \ src/func.cc \ src/module.cc \ src/node.cc \ + src/builtin.cc \ src/context.cc \ src/csgterm.cc \ src/polyset.cc \ diff --git a/src/builtin.cc b/src/builtin.cc new file mode 100644 index 00000000..6eb32b64 --- /dev/null +++ b/src/builtin.cc @@ -0,0 +1,86 @@ +#include "builtin.h" +#include "function.h" +#include "module.h" +#include + +Builtins *Builtins::instance(bool erase) +{ + static Builtins *s_builtins = new Builtins; + if (erase) { + delete s_builtins; + s_builtins = NULL; + } + return s_builtins; +} + +void Builtins::init(const char *name, class AbstractModule *module) +{ + Builtins::instance()->builtinmodules[name] = module; +} + +void Builtins::init(const char *name, class AbstractFunction *function) +{ + Builtins::instance()->builtinfunctions[name] = function; +} + +extern void register_builtin_functions(); +extern void register_builtin_csgops(); +extern void register_builtin_transform(); +extern void register_builtin_color(); +extern void register_builtin_primitives(); +extern void register_builtin_surface(); +extern void register_builtin_control(); +extern void register_builtin_render(); +extern void register_builtin_import(); +extern void register_builtin_projection(); +extern void register_builtin_cgaladv(); +extern void register_builtin_dxf_linear_extrude(); +extern void register_builtin_dxf_rotate_extrude(); +extern void initialize_builtin_dxf_dim(); + +/*! + Registers all builtin functions. + Call once for the whole app. +*/ +void Builtins::initialize() +{ + register_builtin_functions(); + initialize_builtin_dxf_dim(); + + init("group", new AbstractModule()); + + register_builtin_csgops(); + register_builtin_transform(); + register_builtin_color(); + register_builtin_primitives(); + register_builtin_surface(); + register_builtin_control(); + register_builtin_render(); + register_builtin_import(); + register_builtin_projection(); + register_builtin_cgaladv(); + register_builtin_dxf_linear_extrude(); + register_builtin_dxf_rotate_extrude(); + + this->deprecations["dxf_linear_extrude"] = "linear_extrude"; + this->deprecations["dxf_rotate_extrude"] = "rotate_extrude"; + this->deprecations["import_stl"] = "import"; + this->deprecations["import_dxf"] = "import"; + this->deprecations["import_off"] = "import"; +} + +std::string Builtins::isDeprecated(const std::string &name) +{ + if (this->deprecations.find(name) != this->deprecations.end()) { + return this->deprecations[name]; + } + return std::string(); +} + +Builtins::~Builtins() +{ + BOOST_FOREACH(FunctionContainer::value_type &f, this->builtinfunctions) delete f.second; + this->builtinfunctions.clear(); + BOOST_FOREACH(ModuleContainer::value_type &m, this->builtinmodules) delete m.second; + this->builtinmodules.clear(); +} diff --git a/src/builtin.h b/src/builtin.h index 643966b0..bc096e53 100644 --- a/src/builtin.h +++ b/src/builtin.h @@ -4,27 +4,30 @@ #include #include -extern boost::unordered_map builtin_functions; -extern void initialize_builtin_functions(); -extern void destroy_builtin_functions(); +class Builtins +{ +public: + typedef boost::unordered_map FunctionContainer; + typedef boost::unordered_map ModuleContainer; -extern boost::unordered_map builtin_modules; -extern void initialize_builtin_modules(); -extern void destroy_builtin_modules(); + static Builtins *instance(bool erase = false); + static void init(const char *name, class AbstractModule *module); + static void init(const char *name, class AbstractFunction *function); + void initialize(); + std::string isDeprecated(const std::string &name); -extern void register_builtin_csgops(); -extern void register_builtin_transform(); -extern void register_builtin_color(); -extern void register_builtin_primitives(); -extern void register_builtin_surface(); -extern void register_builtin_control(); -extern void register_builtin_render(); -extern void register_builtin_import(); -extern void register_builtin_projection(); -extern void register_builtin_cgaladv(); -extern void register_builtin_dxf_linear_extrude(); -extern void register_builtin_dxf_rotate_extrude(); -extern void initialize_builtin_dxf_dim(); + const FunctionContainer &functions() { return this->builtinfunctions; } + const ModuleContainer &modules() { return this->builtinmodules; } + +private: + Builtins() { } + ~Builtins(); + + FunctionContainer builtinfunctions; + ModuleContainer builtinmodules; + + boost::unordered_map deprecations; +}; extern void register_builtin(class Context &ctx); diff --git a/src/cgaladv.cc b/src/cgaladv.cc index c83e18b8..9abf87c9 100644 --- a/src/cgaladv.cc +++ b/src/cgaladv.cc @@ -97,14 +97,6 @@ PolySet *CgaladvNode::evaluate_polyset(PolySetEvaluator *ps) const return ps->evaluatePolySet(*this); } -void register_builtin_cgaladv() -{ - builtin_modules["minkowski"] = new CgaladvModule(MINKOWSKI); - builtin_modules["glide"] = new CgaladvModule(GLIDE); - builtin_modules["subdiv"] = new CgaladvModule(SUBDIV); - builtin_modules["hull"] = new CgaladvModule(HULL); -} - std::string CgaladvNode::name() const { switch (this->type) { @@ -149,3 +141,11 @@ std::string CgaladvNode::toString() const return stream.str(); } + +void register_builtin_cgaladv() +{ + Builtins::init("minkowski", new CgaladvModule(MINKOWSKI)); + Builtins::init("glide", new CgaladvModule(GLIDE)); + Builtins::init("subdiv", new CgaladvModule(SUBDIV)); + Builtins::init("hull", new CgaladvModule(HULL)); +} diff --git a/src/color.cc b/src/color.cc index 3c6942c3..304ccc18 100644 --- a/src/color.cc +++ b/src/color.cc @@ -101,5 +101,5 @@ std::string ColorNode::name() const void register_builtin_color() { - builtin_modules["color"] = new ColorModule(); + Builtins::init("color", new ColorModule()); } diff --git a/src/context.cc b/src/context.cc index 47b8a78d..bd97f8f0 100644 --- a/src/context.cc +++ b/src/context.cc @@ -150,20 +150,9 @@ AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const { if (this->modules_p && this->modules_p->find(inst.modname) != this->modules_p->end()) { AbstractModule *m = this->modules_p->find(inst.modname)->second; - if (m == builtin_modules["dxf_linear_extrude"]) { - PRINTF("DEPRECATED: The dxf_linear_extrude() module will be removed in future releases. Use a linear_extrude() instead."); - } - else if (m == builtin_modules["dxf_rotate_extrude"]) { - PRINTF("DEPRECATED: The dxf_rotate_extrude() module will be removed in future releases. Use a rotate_extrude() instead."); - } - else if (m == builtin_modules["import_stl"]) { - PRINTF("DEPRECATED: The import_stl() module will be removed in future releases. Use import() instead."); - } - else if (m == builtin_modules["import_dxf"]) { - PRINTF("DEPRECATED: The import_dxf() module will be removed in future releases. Use import() instead."); - } - else if (m == builtin_modules["import_off"]) { - PRINTF("DEPRECATED: The import_off() module will be removed in future releases. Use import() instead."); + std::string replacement = Builtins::instance()->isDeprecated(inst.modname); + if (!replacement.empty()) { + PRINTF("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", inst.modname.c_str(), replacement.c_str()); } return m->evaluate(this, &inst); } @@ -196,8 +185,8 @@ std::string Context::getAbsolutePath(const std::string &filename) const void register_builtin(Context &ctx) { - ctx.functions_p = &builtin_functions; - ctx.modules_p = &builtin_modules; + ctx.functions_p = &Builtins::instance()->functions(); + ctx.modules_p = &Builtins::instance()->modules(); ctx.set_variable("$fn", Value(0.0)); ctx.set_variable("$fs", Value(1.0)); ctx.set_variable("$fa", Value(12.0)); diff --git a/src/control.cc b/src/control.cc index 1f792547..2275c79a 100644 --- a/src/control.cc +++ b/src/control.cc @@ -169,11 +169,10 @@ AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation void register_builtin_control() { - builtin_modules["child"] = new ControlModule(CHILD); - builtin_modules["echo"] = new ControlModule(ECHO); - builtin_modules["assign"] = new ControlModule(ASSIGN); - builtin_modules["for"] = new ControlModule(FOR); - builtin_modules["intersection_for"] = new ControlModule(INT_FOR); - builtin_modules["if"] = new ControlModule(IF); + Builtins::init("child", new ControlModule(CHILD)); + Builtins::init("echo", new ControlModule(ECHO)); + Builtins::init("assign", new ControlModule(ASSIGN)); + Builtins::init("for", new ControlModule(FOR)); + Builtins::init("intersection_for", new ControlModule(INT_FOR)); + Builtins::init("if", new ControlModule(IF)); } - diff --git a/src/csgops.cc b/src/csgops.cc index 7b363f09..7524559b 100644 --- a/src/csgops.cc +++ b/src/csgops.cc @@ -72,8 +72,8 @@ std::string CsgNode::name() const void register_builtin_csgops() { - builtin_modules["union"] = new CsgModule(CSG_TYPE_UNION); - builtin_modules["difference"] = new CsgModule(CSG_TYPE_DIFFERENCE); - builtin_modules["intersection"] = new CsgModule(CSG_TYPE_INTERSECTION); + Builtins::init("union", new CsgModule(CSG_TYPE_UNION)); + Builtins::init("difference", new CsgModule(CSG_TYPE_DIFFERENCE)); + Builtins::init("intersection", new CsgModule(CSG_TYPE_INTERSECTION)); } diff --git a/src/dxfdim.cc b/src/dxfdim.cc index 7b016f15..c6962261 100644 --- a/src/dxfdim.cc +++ b/src/dxfdim.cc @@ -194,7 +194,6 @@ Value builtin_dxf_cross(const Context *ctx, const std::vector &argn void initialize_builtin_dxf_dim() { - builtin_functions["dxf_dim"] = new BuiltinFunction(&builtin_dxf_dim); - builtin_functions["dxf_cross"] = new BuiltinFunction(&builtin_dxf_cross); + Builtins::init("dxf_dim", new BuiltinFunction(&builtin_dxf_dim)); + Builtins::init("dxf_cross", new BuiltinFunction(&builtin_dxf_cross)); } - diff --git a/src/func.cc b/src/func.cc index b011a27f..a9d5948d 100644 --- a/src/func.cc +++ b/src/func.cc @@ -33,7 +33,6 @@ #include "mathc99.h" #include #include "stl-utils.h" -#include AbstractFunction::~AbstractFunction() { @@ -81,9 +80,6 @@ std::string Function::dump(const std::string &indent, const std::string &name) c return dump.str(); } -typedef boost::unordered_map BuiltinContainer; -BuiltinContainer builtin_functions; - BuiltinFunction::~BuiltinFunction() { } @@ -375,38 +371,30 @@ Value builtin_version_num(const Context *ctx, const std::vector& ca return Value(y * 10000 + m * 100 + d); } -void initialize_builtin_functions() +void register_builtin_functions() { - builtin_functions["abs"] = new BuiltinFunction(&builtin_abs); - builtin_functions["sign"] = new BuiltinFunction(&builtin_sign); - builtin_functions["rands"] = new BuiltinFunction(&builtin_rands); - builtin_functions["min"] = new BuiltinFunction(&builtin_min); - builtin_functions["max"] = new BuiltinFunction(&builtin_max); - builtin_functions["sin"] = new BuiltinFunction(&builtin_sin); - builtin_functions["cos"] = new BuiltinFunction(&builtin_cos); - builtin_functions["asin"] = new BuiltinFunction(&builtin_asin); - builtin_functions["acos"] = new BuiltinFunction(&builtin_acos); - builtin_functions["tan"] = new BuiltinFunction(&builtin_tan); - builtin_functions["atan"] = new BuiltinFunction(&builtin_atan); - builtin_functions["atan2"] = new BuiltinFunction(&builtin_atan2); - builtin_functions["round"] = new BuiltinFunction(&builtin_round); - builtin_functions["ceil"] = new BuiltinFunction(&builtin_ceil); - builtin_functions["floor"] = new BuiltinFunction(&builtin_floor); - builtin_functions["pow"] = new BuiltinFunction(&builtin_pow); - builtin_functions["sqrt"] = new BuiltinFunction(&builtin_sqrt); - builtin_functions["exp"] = new BuiltinFunction(&builtin_exp); - builtin_functions["log"] = new BuiltinFunction(&builtin_log); - builtin_functions["ln"] = new BuiltinFunction(&builtin_ln); - builtin_functions["str"] = new BuiltinFunction(&builtin_str); - builtin_functions["lookup"] = new BuiltinFunction(&builtin_lookup); - builtin_functions["version"] = new BuiltinFunction(&builtin_version); - builtin_functions["version_num"] = new BuiltinFunction(&builtin_version_num); - initialize_builtin_dxf_dim(); -} - -void destroy_builtin_functions() -{ - BOOST_FOREACH(BuiltinContainer::value_type &f, builtin_functions) delete f.second; -//std::for_each(builtin_functions.begin(), builtin_functions.end(), del_fun()); - builtin_functions.clear(); + Builtins::init("abs", new BuiltinFunction(&builtin_abs)); + Builtins::init("sign", new BuiltinFunction(&builtin_sign)); + Builtins::init("rands", new BuiltinFunction(&builtin_rands)); + Builtins::init("min", new BuiltinFunction(&builtin_min)); + Builtins::init("max", new BuiltinFunction(&builtin_max)); + Builtins::init("sin", new BuiltinFunction(&builtin_sin)); + Builtins::init("cos", new BuiltinFunction(&builtin_cos)); + Builtins::init("asin", new BuiltinFunction(&builtin_asin)); + Builtins::init("acos", new BuiltinFunction(&builtin_acos)); + Builtins::init("tan", new BuiltinFunction(&builtin_tan)); + Builtins::init("atan", new BuiltinFunction(&builtin_atan)); + Builtins::init("atan2", new BuiltinFunction(&builtin_atan2)); + Builtins::init("round", new BuiltinFunction(&builtin_round)); + Builtins::init("ceil", new BuiltinFunction(&builtin_ceil)); + Builtins::init("floor", new BuiltinFunction(&builtin_floor)); + Builtins::init("pow", new BuiltinFunction(&builtin_pow)); + Builtins::init("sqrt", new BuiltinFunction(&builtin_sqrt)); + Builtins::init("exp", new BuiltinFunction(&builtin_exp)); + Builtins::init("log", new BuiltinFunction(&builtin_log)); + Builtins::init("ln", new BuiltinFunction(&builtin_ln)); + Builtins::init("str", new BuiltinFunction(&builtin_str)); + Builtins::init("lookup", new BuiltinFunction(&builtin_lookup)); + Builtins::init("version", new BuiltinFunction(&builtin_version)); + Builtins::init("version_num", new BuiltinFunction(&builtin_version_num)); } diff --git a/src/import.cc b/src/import.cc index 8a3b0a47..880823db 100644 --- a/src/import.cc +++ b/src/import.cc @@ -251,9 +251,8 @@ std::string ImportNode::name() const void register_builtin_import() { - builtin_modules["import_stl"] = new ImportModule(TYPE_STL); - builtin_modules["import_off"] = new ImportModule(TYPE_OFF); - builtin_modules["import_dxf"] = new ImportModule(TYPE_DXF); - builtin_modules["import"] = new ImportModule(); + Builtins::init("import_stl", new ImportModule(TYPE_STL)); + Builtins::init("import_off", new ImportModule(TYPE_OFF)); + Builtins::init("import_dxf", new ImportModule(TYPE_DXF)); + Builtins::init("import", new ImportModule()); } - diff --git a/src/linearextrude.cc b/src/linearextrude.cc index 019f606d..d1d28419 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -114,12 +114,6 @@ AbstractNode *LinearExtrudeModule::evaluate(const Context *ctx, const ModuleInst return node; } -void register_builtin_dxf_linear_extrude() -{ - builtin_modules["dxf_linear_extrude"] = new LinearExtrudeModule(); - builtin_modules["linear_extrude"] = new LinearExtrudeModule(); -} - class PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { @@ -161,3 +155,9 @@ std::string LinearExtrudeNode::toString() const return stream.str(); } + +void register_builtin_dxf_linear_extrude() +{ + Builtins::init("dxf_linear_extrude", new LinearExtrudeModule()); + Builtins::init("linear_extrude", new LinearExtrudeModule()); +} diff --git a/src/module.cc b/src/module.cc index 0b17ff70..269e1281 100644 --- a/src/module.cc +++ b/src/module.cc @@ -29,7 +29,6 @@ #include "context.h" #include "expression.h" #include "function.h" -#include "builtin.h" #include "printutils.h" #include #include @@ -201,31 +200,3 @@ std::string Module::dump(const std::string &indent, const std::string &name) con } return dump.str(); } - -Module::AbstractModuleContainer builtin_modules; - -void initialize_builtin_modules() -{ - builtin_modules["group"] = new AbstractModule(); - - register_builtin_csgops(); - register_builtin_transform(); - register_builtin_color(); - register_builtin_primitives(); - register_builtin_surface(); - register_builtin_control(); - register_builtin_render(); - register_builtin_import(); - register_builtin_projection(); - register_builtin_cgaladv(); - register_builtin_dxf_linear_extrude(); - register_builtin_dxf_rotate_extrude(); -} - -void destroy_builtin_modules() -{ - BOOST_FOREACH(Module::AbstractModuleContainer::value_type &m, builtin_modules) { - delete m.second; - } - builtin_modules.clear(); -} diff --git a/src/openscad.cc b/src/openscad.cc index e80f02cf..678d87ac 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -101,8 +101,7 @@ int main(int argc, char **argv) // (which we don't catch). This gives us stack traces without rerunning in gdb. CGAL::set_error_behaviour(CGAL::ABORT); #endif - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); #ifdef Q_WS_X11 // see : @@ -409,8 +408,7 @@ int main(int argc, char **argv) exit(1); } - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/src/primitives.cc b/src/primitives.cc index a651ff8d..b18a8166 100644 --- a/src/primitives.cc +++ b/src/primitives.cc @@ -236,17 +236,6 @@ AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const ModuleInstanti return node; } -void register_builtin_primitives() -{ - builtin_modules["cube"] = new PrimitiveModule(CUBE); - builtin_modules["sphere"] = new PrimitiveModule(SPHERE); - builtin_modules["cylinder"] = new PrimitiveModule(CYLINDER); - builtin_modules["polyhedron"] = new PrimitiveModule(POLYHEDRON); - builtin_modules["square"] = new PrimitiveModule(SQUARE); - builtin_modules["circle"] = new PrimitiveModule(CIRCLE); - builtin_modules["polygon"] = new PrimitiveModule(POLYGON); -} - /*! Returns the number of subdivision of a whole circle, given radius and the three special variables $fn, $fs and $fa @@ -606,3 +595,14 @@ std::string PrimitiveNode::toString() const return stream.str(); } + +void register_builtin_primitives() +{ + Builtins::init("cube", new PrimitiveModule(CUBE)); + Builtins::init("sphere", new PrimitiveModule(SPHERE)); + Builtins::init("cylinder", new PrimitiveModule(CYLINDER)); + Builtins::init("polyhedron", new PrimitiveModule(POLYHEDRON)); + Builtins::init("square", new PrimitiveModule(SQUARE)); + Builtins::init("circle", new PrimitiveModule(CIRCLE)); + Builtins::init("polygon", new PrimitiveModule(POLYGON)); +} diff --git a/src/projection.cc b/src/projection.cc index 1333d19b..a7128008 100644 --- a/src/projection.cc +++ b/src/projection.cc @@ -97,5 +97,5 @@ std::string ProjectionNode::toString() const void register_builtin_projection() { - builtin_modules["projection"] = new ProjectionModule(); + Builtins::init("projection", new ProjectionModule()); } diff --git a/src/render.cc b/src/render.cc index b79fa56f..7b0ced55 100644 --- a/src/render.cc +++ b/src/render.cc @@ -67,11 +67,6 @@ class PolySet *RenderNode::evaluate_polyset(PolySetEvaluator *ps) const return ps->evaluatePolySet(*this); } -void register_builtin_render() -{ - builtin_modules["render"] = new RenderModule(); -} - std::string RenderNode::toString() const { std::stringstream stream; @@ -80,3 +75,8 @@ std::string RenderNode::toString() const return stream.str(); } + +void register_builtin_render() +{ + Builtins::init("render", new RenderModule()); +} diff --git a/src/rotateextrude.cc b/src/rotateextrude.cc index 13e5db0a..ae8793d9 100644 --- a/src/rotateextrude.cc +++ b/src/rotateextrude.cc @@ -92,12 +92,6 @@ AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInst return node; } -void register_builtin_dxf_rotate_extrude() -{ - builtin_modules["dxf_rotate_extrude"] = new RotateExtrudeModule(); - builtin_modules["rotate_extrude"] = new RotateExtrudeModule(); -} - PolySet *RotateExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { @@ -133,3 +127,9 @@ std::string RotateExtrudeNode::toString() const return stream.str(); } + +void register_builtin_dxf_rotate_extrude() +{ + Builtins::init("dxf_rotate_extrude", new RotateExtrudeModule()); + Builtins::init("rotate_extrude", new RotateExtrudeModule()); +} diff --git a/src/surface.cc b/src/surface.cc index 8349afd0..cdac4ecd 100644 --- a/src/surface.cc +++ b/src/surface.cc @@ -92,11 +92,6 @@ AbstractNode *SurfaceModule::evaluate(const Context *ctx, const ModuleInstantiat return node; } -void register_builtin_surface() -{ - builtin_modules["surface"] = new SurfaceModule(); -} - PolySet *SurfaceNode::evaluate_polyset(class PolySetEvaluator *) const { handle_dep(filename); @@ -219,3 +214,8 @@ std::string SurfaceNode::toString() const return stream.str(); } + +void register_builtin_surface() +{ + Builtins::init("surface", new SurfaceModule()); +} diff --git a/src/transform.cc b/src/transform.cc index eda69c20..f5038b1f 100644 --- a/src/transform.cc +++ b/src/transform.cc @@ -206,9 +206,9 @@ std::string TransformNode::name() const void register_builtin_transform() { - builtin_modules["scale"] = new TransformModule(SCALE); - builtin_modules["rotate"] = new TransformModule(ROTATE); - builtin_modules["mirror"] = new TransformModule(MIRROR); - builtin_modules["translate"] = new TransformModule(TRANSLATE); - builtin_modules["multmatrix"] = new TransformModule(MULTMATRIX); + Builtins::init("scale", new TransformModule(SCALE)); + Builtins::init("rotate", new TransformModule(ROTATE)); + Builtins::init("mirror", new TransformModule(MIRROR)); + Builtins::init("translate", new TransformModule(TRANSLATE)); + Builtins::init("multmatrix", new TransformModule(MULTMATRIX)); } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7959ef5c..fb007cc1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -167,6 +167,7 @@ set(CORE_SOURCES ../src/func.cc ../src/module.cc ../src/node.cc + ../src/builtin.cc ../src/context.cc ../src/csgterm.cc ../src/polyset.cc diff --git a/tests/cgalpngtest.cc b/tests/cgalpngtest.cc index 02ee35e3..e9e1f7b0 100644 --- a/tests/cgalpngtest.cc +++ b/tests/cgalpngtest.cc @@ -100,8 +100,7 @@ int main(int argc, char **argv) const char *filename = argv[1]; const char *outfile = argv[2]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -212,8 +211,7 @@ int main(int argc, char **argv) csgInfo.glview->paintGL(); csgInfo.glview->save(outfile); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return 0; } diff --git a/tests/cgaltest.cc b/tests/cgaltest.cc index 0cbd89a7..0b433bfb 100644 --- a/tests/cgaltest.cc +++ b/tests/cgaltest.cc @@ -84,8 +84,7 @@ int main(int argc, char **argv) const char *filename = argv[1]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -142,8 +141,8 @@ int main(int argc, char **argv) if (!N.empty()) { export_stl(&N, std::cout, NULL); } - destroy_builtin_functions(); - destroy_builtin_modules(); + + Builtins::instance(true); return 0; } diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc index 5268b28a..c8fcc6bf 100644 --- a/tests/csgtermtest.cc +++ b/tests/csgtermtest.cc @@ -69,8 +69,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -145,8 +144,7 @@ int main(int argc, char **argv) } outfile.close(); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc index 57e397e6..034084c7 100644 --- a/tests/csgtestcore.cc +++ b/tests/csgtestcore.cc @@ -77,8 +77,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) const char *filename = argv[1]; const char *outfilename = argv[2]; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); @@ -217,8 +216,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) csgInfo.glview->save(outfilename); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return 0; } diff --git a/tests/csgtexttest.cc b/tests/csgtexttest.cc index ca28e37f..76f6eb1b 100644 --- a/tests/csgtexttest.cc +++ b/tests/csgtexttest.cc @@ -72,8 +72,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -130,8 +129,7 @@ int main(int argc, char **argv) outfile << csgcache[*root_node] << "\n"; outfile.close(); - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/dumptest.cc b/tests/dumptest.cc index d2fd9b12..8a83131b 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -75,8 +75,7 @@ int main(int argc, char **argv) int rc = 0; - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -159,9 +158,7 @@ int main(int argc, char **argv) exit(1); } - - destroy_builtin_functions(); - destroy_builtin_modules(); + Builtins::instance(true); return rc; } diff --git a/tests/echotest.cc b/tests/echotest.cc index d1d1f9b4..5ab9efa9 100644 --- a/tests/echotest.cc +++ b/tests/echotest.cc @@ -76,8 +76,7 @@ int main(int argc, char **argv) } set_output_handler(&outfile_handler, &ofile); - initialize_builtin_functions(); - initialize_builtin_modules(); + Builtins::instance()->initialize(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); @@ -121,9 +120,7 @@ int main(int argc, char **argv) AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); - destroy_builtin_functions(); - destroy_builtin_modules(); - + Builtins::instance(true); ofile.close(); return rc; }