SymbolPtr Findable::findType_downward( Scope* stable, const std::string& type_name ) { for( std::vector<SymbolPtr>::iterator I = stable->m_childs.begin(), B = stable->m_childs.end() ; I != B ; I ++ ) { if( (*I)->name() == type_name && (*I)->is(Symbol::T_SCOPE) ) { ScopePtr pkg_symbol = DYNA_CAST( Scope, *I ); if( pkg_symbol->getScopeType() == Scope::T_CLASS ) { return *I; } } if( (*I)->name() == type_name && (*I)->is(Symbol::T_PRIMITIVE_TYPE) ) { return *I; } if( (*I)->name() == "" && (*I)->is( Symbol::T_SCOPE) ) { ScopePtr pkg_symbol = DYNA_CAST( Scope, *I ); if( pkg_symbol->getScopeType() == Scope::T_PACKAGE ) { SymbolPtr found = findType_downward( pkg_symbol.get() , type_name ); if( found ) return found; } } } return SymbolPtr(); }
SymbolPtr Findable::findType( Scope* stable, const std::string& type_name ) { SymbolPtr found = findType_downward(stable, type_name ); if( found ) return found; if( stable->m_parent ) return findType( stable->m_parent, type_name ); return SymbolPtr(); }
TTErr OpSetup(OpPtr self) { Atom a[2]; a[0].a_type = A_POINTER; a[1].a_type = A_POINTER; a[0].a_w.w_symbol = SymbolPtr(self->audioGraphObject); a[1].a_w.w_symbol = 0; outlet_anything(self->outlet, gensym("audio.connect"), 2, a); return kTTErrNone; }
SymbolPtr Namespace::lookup(const std::string& name) { Symbols::iterator it = m_symbols.find(name); if (it == m_symbols.end()) { return SymbolPtr(); } else { return it->second; } }
SymbolPtr Environment::lookup_symbol(const std::string& ns, const std::string& symbol) { log_debug(ns << " " << symbol); Namespaces::iterator it = m_namespaces.find(ns); if (it == m_namespaces.end()) { return SymbolPtr(); } else { return it->second->lookup(symbol); } }
SymbolPtr make_symbol(const std::string& symbol) { return SymbolPtr(new Symbol(symbol)); }
SymbolPtr CodeBlock::translate(TokenPtr token) { if (token->get_token() == MP_ID) { string search_lexeme = token->get_lexeme(); unsigned int search_level = this->get_nesting_level(); SymbolListPtr filtered_data = this->get_analyzer()->get_symtable()->data_in_scope_at(search_lexeme, search_level); if (this->check_filter_size(filtered_data)) { SymbolPtr found = *filtered_data->begin(); found->set_col(token->get_column()); found->set_row(token->get_line()); return found; } else { SymbolListPtr global_data = this->get_analyzer()->get_symtable()->data_in_scope_at(search_lexeme, 0); if (this->check_filter_size(global_data)) { SymbolPtr found = *global_data->begin(); found->set_col(token->get_column()); found->set_row(token->get_line()); return found; } else { if (global_data == nullptr) { report_error_lc("Semantic Error", "ID '" + search_lexeme + "' not found", token->get_line(), token->get_column()); } else { report_error("Semantic Error", "ID '" + search_lexeme + "' redefined as..."); for (auto it = global_data->begin(); it != global_data->end(); it++) { SymDataPtr dptr = static_pointer_cast<SymData>(*it); report_error_lc("Definition @", (*it)->get_symbol_name() + " as " + var_type_to_string(dptr->get_var_type()), (*it)->get_row(), (*it)->get_col()); } } this->valid = false; return nullptr; } } } else if (token->get_token() == MP_INT_LITERAL) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), INTEGER_LITERAL)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_STRING_LITERAL) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), STRING_LITERAL)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_FLOAT_LITERAL) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), FLOATING_LITERAL)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_TRUE) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), BOOLEAN_LITERAL_T)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_FALSE) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), BOOLEAN_LITERAL_F)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_LEFT_PAREN) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), LPAREN)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_RIGHT_PAREN) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), RPAREN)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_PLUS) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), ADD)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_MINUS) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), SUB)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_MULT) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), MUL)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_DIV) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), DIV)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_DIV_KW) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), DIV)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_MOD_KW) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), MOD)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_AND) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), AND)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_OR) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), OR)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_NOT) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), NOT)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_LESSTHAN) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), ILT)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_EQUALS) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), IEQ)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_LESSTHAN_EQUALTO) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), ILE)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_GREATERTHAN) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), IGT)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_GREATERTHAN_EQUALTO) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), IGE)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else if (token->get_token() == MP_NOT_EQUAL) { SymbolPtr s = SymbolPtr(new SymConstant(token->get_lexeme(), INE)); s->set_row(token->get_line()); s->set_col(token->get_column()); return s; } else { return nullptr; } }
/*! * \brief Finds a symbol in the current scope, returning it. * \param symbolName The name of the symbol to be retrieved. * \return A wrapper around the matching symbol, if found. Otherwise a wrapper * around NULL. */ SymbolPtr SymbolTable::SymbolTableScope::findSymbol(const char *symbolName) { Symbol *symbol = findSymbolInternal(symbolName); return SymbolPtr(symbol); }
AssignmentBlock(bool expr_only): CodeBlock(ASSIGNMENT_BLOCK, nullptr), expr_type(VOID), expr_only(expr_only){ this->assigner = SymbolPtr(new SymConstant("", VOID)); };