/[svn]/linuxsampler/trunk/src/scriptvm/tree.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/scriptvm/tree.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2889 by schoenebeck, Mon Apr 25 17:28:23 2016 UTC revision 2942 by schoenebeck, Wed Jul 13 15:51:06 2016 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (c) 2014 Christian Schoenebeck and Andreas Persson   * Copyright (c) 2014 - 2016 Christian Schoenebeck and Andreas Persson
3   *   *
4   * http://www.linuxsampler.org   * http://www.linuxsampler.org
5   *   *
# Line 243  bool Statements::isPolyphonic() const { Line 243  bool Statements::isPolyphonic() const {
243      return false;      return false;
244  }  }
245    
246    DynamicVariableCall::DynamicVariableCall(const String& name, ParserContext* ctx, VMDynVar* v)
247        : Variable(ctx, 0, false), dynVar(v), varName(name)
248    {
249    }
250    
251    int DynamicVariableCall::evalInt() {
252        VMIntExpr* expr = dynamic_cast<VMIntExpr*>(dynVar);
253        if (!expr) return 0;
254        return expr->evalInt();
255    }
256    
257    String DynamicVariableCall::evalStr() {
258        VMStringExpr* expr = dynamic_cast<VMStringExpr*>(dynVar);
259        if (!expr) return "";
260        return expr->evalStr();
261    }
262    
263    String DynamicVariableCall::evalCastToStr() {
264        if (dynVar->exprType() == STRING_EXPR) {
265            return evalStr();
266        } else {
267            VMIntExpr* intExpr = dynamic_cast<VMIntExpr*>(dynVar);
268            return intExpr ? ToString(intExpr->evalInt()) : "";
269        }
270    }
271    
272    void DynamicVariableCall::dump(int level) {
273        printIndents(level);
274        printf("Dynamic Variable '%s'\n", varName.c_str());
275    }
276    
277  void FunctionCall::dump(int level) {  void FunctionCall::dump(int level) {
278      printIndents(level);      printIndents(level);
279      printf("FunctionCall '%s' args={\n", functionName.c_str());      printf("FunctionCall '%s' args={\n", functionName.c_str());
# Line 769  void Or::dump(int level) { Line 800  void Or::dump(int level) {
800      printf(")\n");      printf(")\n");
801  }  }
802    
803    int BitwiseOr::evalInt() {
804        IntExpr* pLHS = dynamic_cast<IntExpr*>(&*lhs);
805        IntExpr* pRHS = dynamic_cast<IntExpr*>(&*rhs);
806        return pLHS->evalInt() | pRHS->evalInt();
807    }
808    
809    void BitwiseOr::dump(int level) {
810        printIndents(level);
811        printf("BitwiseOr(\n");
812        lhs->dump(level+1);
813        printIndents(level);
814        printf(",\n");
815        rhs->dump(level+1);
816        printIndents(level);
817        printf(")\n");
818    }
819    
820  int And::evalInt() {  int And::evalInt() {
821      IntExpr* pLHS = dynamic_cast<IntExpr*>(&*lhs);      IntExpr* pLHS = dynamic_cast<IntExpr*>(&*lhs);
822      if (!pLHS->evalInt()) return 0;      if (!pLHS->evalInt()) return 0;
# Line 787  void And::dump(int level) { Line 835  void And::dump(int level) {
835      printf(")\n");      printf(")\n");
836  }  }
837    
838    int BitwiseAnd::evalInt() {
839        IntExpr* pLHS = dynamic_cast<IntExpr*>(&*lhs);
840        IntExpr* pRHS = dynamic_cast<IntExpr*>(&*rhs);
841        return pLHS->evalInt() & pRHS->evalInt();
842    }
843    
844    void BitwiseAnd::dump(int level) {
845        printIndents(level);
846        printf("BitwiseAnd(\n");
847        lhs->dump(level+1);
848        printIndents(level);
849        printf(",\n");
850        rhs->dump(level+1);
851        printIndents(level);
852        printf(")\n");
853    }
854    
855  void Not::dump(int level) {  void Not::dump(int level) {
856      printIndents(level);      printIndents(level);
857      printf("Not(\n");      printf("Not(\n");
# Line 795  void Not::dump(int level) { Line 860  void Not::dump(int level) {
860      printf(")\n");      printf(")\n");
861  }  }
862    
863    void BitwiseNot::dump(int level) {
864        printIndents(level);
865        printf("BitwiseNot(\n");
866        expr->dump(level+1);
867        printIndents(level);
868        printf(")\n");
869    }
870    
871  VariableRef ParserContext::variableByName(const String& name) {  VariableRef ParserContext::variableByName(const String& name) {
872      if (!vartable.count(name)) {      if (!vartable.count(name)) {
873          return VariableRef();          return VariableRef();
# Line 919  void ParserContext::registerBuiltInIntAr Line 992  void ParserContext::registerBuiltInIntAr
992          vartable[it->first] = ref;          vartable[it->first] = ref;
993      }      }
994  }  }
995    
996    void ParserContext::registerBuiltInDynVariables(const std::map<String,VMDynVar*>& vars) {
997        for (std::map<String,VMDynVar*>::const_iterator it = vars.begin();
998             it != vars.end(); ++it)
999        {
1000            DynamicVariableCallRef ref = new DynamicVariableCall(it->first, this, it->second);
1001            vartable[it->first] = ref;
1002        }
1003    }
1004    
1005  } // namespace LinuxSampler  } // namespace LinuxSampler

Legend:
Removed from v.2889  
changed lines
  Added in v.2942

  ViewVC Help
Powered by ViewVC