Skip to content

Commit

Permalink
Modified parse to allow overloading of variables in local blocks. Als…
Browse files Browse the repository at this point in the history
…o did some minor cleanups while at it. Test cases missing
  • Loading branch information
kintel committed Apr 26, 2013
1 parent 81266c3 commit ba20c0e
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 178 deletions.
2 changes: 1 addition & 1 deletion bison.pri
@@ -1,4 +1,4 @@
win32 {
{
bison.name = Bison ${QMAKE_FILE_IN}
bison.input = BISONSOURCES
bison.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp
Expand Down
2 changes: 1 addition & 1 deletion flex.pri
@@ -1,4 +1,4 @@
win32 {
{
flex.name = Flex ${QMAKE_FILE_IN}
flex.input = FLEXSOURCES
flex.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp
Expand Down
9 changes: 2 additions & 7 deletions openscad.pro
Expand Up @@ -171,13 +171,8 @@ CONFIG(mingw-cross-env) {
include(mingw-cross-env.pri)
}

win32 {
FLEXSOURCES = src/lexer.l
BISONSOURCES = src/parser.y
} else {
LEXSOURCES += src/lexer.l
YACCSOURCES += src/parser.y
}
FLEXSOURCES = src/lexer.l
BISONSOURCES = src/parser.y

RESOURCES = openscad.qrc

Expand Down
14 changes: 14 additions & 0 deletions src/expr.cc
Expand Up @@ -38,6 +38,20 @@ Expression::Expression()
{
}

Expression::Expression(const std::string &type,
Expression *left, Expression *right)
: type(type)
{
this->children.push_back(left);
this->children.push_back(right);
}

Expression::Expression(const std::string &type, Expression *expr)
: type(type)
{
this->children.push_back(expr);
}

Expression::Expression(const Value &val) : const_value(val), type("C")
{
}
Expand Down
2 changes: 2 additions & 0 deletions src/expression.h
Expand Up @@ -34,6 +34,8 @@ class Expression

Expression();
Expression(const Value &val);
Expression(const std::string &type, Expression *left, Expression *right);
Expression(const std::string &type, Expression *expr);
~Expression();

Value evaluate(const class Context *context) const;
Expand Down
6 changes: 6 additions & 0 deletions src/localscope.cc
Expand Up @@ -19,6 +19,12 @@ LocalScope::~LocalScope()
BOOST_FOREACH (AbstractModuleContainer::value_type &m, modules) delete m.second;
}

void LocalScope::addChild(ModuleInstantiation *ch)
{
assert(ch != NULL);
this->children.push_back(ch);
}

std::string LocalScope::dump(const std::string &indent) const
{
std::stringstream dump;
Expand Down
1 change: 1 addition & 0 deletions src/localscope.h
Expand Up @@ -13,6 +13,7 @@ class LocalScope
size_t numElements() const { return assignments.size() + children.size(); }
std::string dump(const std::string &indent) const;
std::vector<class AbstractNode*> instantiateChildren(const class Context *evalctx, class FileContext *filectx = NULL) const;
void addChild(ModuleInstantiation *ch);

AssignmentList assignments;
ModuleInstantiationList children;
Expand Down
5 changes: 0 additions & 5 deletions src/module.cc
Expand Up @@ -132,11 +132,6 @@ Module::~Module()
{
}

void Module::addChild(ModuleInstantiation *ch)
{
this->scope.children.push_back(ch);
}

AbstractNode *Module::instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const
{
ModuleContext c(ctx, evalctx);
Expand Down
2 changes: 0 additions & 2 deletions src/module.h
Expand Up @@ -68,8 +68,6 @@ class Module : public AbstractModule
virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx = NULL) const;
virtual std::string dump(const std::string &indent, const std::string &name) const;

void addChild(ModuleInstantiation *ch);

AssignmentList definition_arguments;

LocalScope scope;
Expand Down

0 comments on commit ba20c0e

Please sign in to comment.