void AstPrinterVisitor::visitBlockNode(BlockNode* node) { if (!isMainScope(node->scope())) { _output << "{" << endl; } Scope::VarIterator varIt(node->scope()); while(varIt.hasNext()) { AstVar* var = varIt.next(); printVarType(var->type()); _output << " " << var->name(); printSemicolon(); } Scope::FunctionIterator funcIt(node->scope()); while(funcIt.hasNext()) { FunctionNode* func = funcIt.next()->node(); func->visit(this); } for (uint32_t i = 0; i < node->nodes(); ++i) { node->nodeAt(i)->visit(this); if (!(node->nodeAt(i)->isIfNode() || node->nodeAt(i)->isWhileNode() || node->nodeAt(i)->isForNode() || node->nodeAt(i)->isReturnNode() || node->nodeAt(i)->isBlockNode())) { printSemicolon(); } } if (!isMainScope(node->scope())) { _output << "}" << endl; } }
void Printer::printBlockContents(BlockNode* node) { // functions delcarations Scope::FunctionIterator funIt(node->scope()); while (funIt.hasNext()) { funIt.next()->node()->visit(this); out << '\n'; } // variables declarations Scope::VarIterator varIt(node->scope()); while (varIt.hasNext()) { AstVar* var = varIt.next(); out << typeToName(var->type()) << " " << var->name() << ";\n"; } // nodes for (size_t i = 0; i < node->nodes(); ++i) { AstNode* subNode = node->nodeAt(i); subNode->visit(this); if (!subNode->isIfNode() && !subNode->isWhileNode() && !subNode->isForNode()) { out << ';'; } out << '\n'; } }
void ASTtoByteCodeTranslator::createVarMap(Scope *scope){ Scope::VarIterator varIt(scope); uint16_t varId = 0; while(varIt.hasNext()) { AstVar* var = varIt.next(); varMap[var] = varId++; } }
// private: // visitBlockNodeImpl void BytecodeGenerator::visitVarDecls(BlockNode* node) { Bytecode* bc = _state.currentBcToFill(); Scope::VarIterator varIt(node->scope()); while(varIt.hasNext()) { AstVar* var = varIt.next(); uint16_t varId = _state.currentCtxAddVar(var->name(), node->position()); Instruction bcLoad0 = typedInsn(var->type(), BC_ILOAD0, BC_DLOAD0, BC_SLOAD0); bc->addInsn(bcLoad0); Instruction bcStore = typedInsn(var->type(), BC_STOREIVAR, BC_STOREDVAR, BC_STORESVAR); genBcInsnWithId(bc, bcStore, varId); } }
void Config::DumpVariables(void) { FILE* file = fopen("config_dump.txt", "w"); if(file) { fprintf(file, "known variables:\n"); VarInfo* varIt(_vars); while(varIt) { fprintf(file, "%s\n", varIt->Name().c_str()); varIt = varIt->next; } } fclose(file); }
void Ast2SrcVisitor::initScope(Scope* scope) { std::string indent(_indent, ' '); Scope::VarIterator varIt(scope); while (varIt.hasNext()) { AstVar* var = varIt.next(); _out << indent << mathvm::typeToName(var->type()) << " "<< var->name() << ";" << std::endl; } Scope::FunctionIterator funcIt(scope); while (funcIt.hasNext()) { funcIt.next()->node()->visit(this); _out << std::endl; } }
void printScope(Scope * scope) { Scope::VarIterator varIt(scope); while(varIt.hasNext()) { AstVar* var = varIt.next(); os << indent(); os << typeToName(var->type()) << " " << var->name() << ";" << endl; } Scope::FunctionIterator funcIt(scope); while(funcIt.hasNext()) { AstFunction* func = funcIt.next(); os << indent(); func->node()->visit(this); } }