diff --git a/apps/code/script_store.cpp b/apps/code/script_store.cpp index 64bec153a..c4062a9b6 100644 --- a/apps/code/script_store.cpp +++ b/apps/code/script_store.cpp @@ -1,23 +1,14 @@ #include "script_store.h" -#include "string.h" -#include - -extern "C" { -#include "py/lexer.h" -#include "py/nlr.h" -} namespace Code { constexpr char ScriptStore::k_scriptExtension[]; - bool ScriptStore::ScriptNameIsFree(const char * baseName) { return ScriptBaseNamed(baseName).isNull(); } -ScriptStore::ScriptStore() -{ +ScriptStore::ScriptStore() { addScriptFromTemplate(ScriptTemplate::Squares()); addScriptFromTemplate(ScriptTemplate::Parabola()); addScriptFromTemplate(ScriptTemplate::Mandelbrot()); @@ -34,94 +25,6 @@ bool ScriptStore::isFull() { return Ion::Storage::sharedStorage()->availableSize() < k_fullFreeSpaceSizeLimit; } -void ScriptStore::scanScriptsForFunctionsAndVariables(void * context, ScanCallback storeFunction, ScanCallback storeVariable) { - for (int scriptIndex = 0; scriptIndex < numberOfScripts(); scriptIndex++) { - - //Don't scan not loaded script - if (!scriptAtIndex(scriptIndex).importationStatus()){ - continue; - } - - // Handle lexer or parser errors with nlr. - nlr_buf_t nlr; - if (nlr_push(&nlr) == 0) { - const char * scriptContent = scriptAtIndex(scriptIndex).scriptContent(); - if (scriptContent == nullptr) { - continue; - } - mp_lexer_t *lex = mp_lexer_new_from_str_len(0, scriptContent, strlen(scriptContent), false); - mp_parse_tree_t parseTree = mp_parse(lex, MP_PARSE_FILE_INPUT); - mp_parse_node_t pn = parseTree.root; - - if (!MP_PARSE_NODE_IS_STRUCT(pn)) { - mp_parse_tree_clear(&parseTree); - nlr_pop(); - continue; - } - - mp_parse_node_struct_t *pns = (mp_parse_node_struct_t*)pn; - - // The script is only a single function definition. - if (((uint)(MP_PARSE_NODE_STRUCT_KIND(pns))) == k_functionDefinitionParseNodeStructKind) { - const char * id = structID(pns); - if (id == nullptr) { - continue; - } - storeFunction(context, id, scriptIndex); - mp_parse_tree_clear(&parseTree); - nlr_pop(); - continue; - } - - // The script is only a single global variable definition. - if (((uint)(MP_PARSE_NODE_STRUCT_KIND(pns))) == k_expressionStatementParseNodeStructKind) { - const char * id = structID(pns); - if (id == nullptr) { - continue; - } - storeVariable(context, id, scriptIndex); - mp_parse_tree_clear(&parseTree); - nlr_pop(); - continue; - } - - if (((uint)(MP_PARSE_NODE_STRUCT_KIND(pns))) != k_fileInput2ParseNodeStructKind) { - // The script node is not of type "file_input_2", thus it will not have main - // structures of the wanted type. - mp_parse_tree_clear(&parseTree); - nlr_pop(); - continue; - } - - // Count the number of structs in child nodes. - - size_t n = MP_PARSE_NODE_STRUCT_NUM_NODES(pns); - for (size_t i = 0; i < n; i++) { - mp_parse_node_t child = pns->nodes[i]; - if (MP_PARSE_NODE_IS_STRUCT(child)) { - mp_parse_node_struct_t *child_pns = (mp_parse_node_struct_t*)(child); - if (((uint)(MP_PARSE_NODE_STRUCT_KIND(child_pns))) == k_functionDefinitionParseNodeStructKind) { - const char * id = structID(child_pns); - if (id == nullptr) { - continue; - } - storeFunction(context, id, scriptIndex); - } else if (((uint)(MP_PARSE_NODE_STRUCT_KIND(child_pns))) == k_expressionStatementParseNodeStructKind) { - const char * id = structID(child_pns); - if (id == nullptr) { - continue; - } - storeVariable(context, id, scriptIndex); - } - } - } - - mp_parse_tree_clear(&parseTree); - nlr_pop(); - } - } -} - const char * ScriptStore::contentOfScript(const char * name) { Script script = ScriptNamed(name); if (script.isNull()) { @@ -138,20 +41,4 @@ Script::ErrorStatus ScriptStore::addScriptFromTemplate(const ScriptTemplate * sc return err; } -const char * ScriptStore::structID(mp_parse_node_struct_t *structNode) { - // Find the id child node, which stores the struct's name - size_t childNodesCount = MP_PARSE_NODE_STRUCT_NUM_NODES(structNode); - if (childNodesCount < 1) { - return nullptr; - } - mp_parse_node_t child = structNode->nodes[0]; - if (MP_PARSE_NODE_IS_LEAF(child) - && MP_PARSE_NODE_LEAF_KIND(child) == MP_PARSE_NODE_ID) - { - uintptr_t arg = MP_PARSE_NODE_LEAF_ARG(child); - return qstr_str(arg); - } - return nullptr; -} - } diff --git a/apps/code/script_store.h b/apps/code/script_store.h index 864fed483..ae5f7dbf6 100644 --- a/apps/code/script_store.h +++ b/apps/code/script_store.h @@ -38,10 +38,6 @@ public: void deleteAllScripts(); bool isFull(); - /* Provide scripts content information */ - typedef void (* ScanCallback)(void * context, const char * p, int n); - void scanScriptsForFunctionsAndVariables(void * context, ScanCallback storeFunction,ScanCallback storeVariable); - /* MicroPython::ScriptProvider */ const char * contentOfScript(const char * name) override; @@ -54,10 +50,6 @@ private: * importation status (1 char), the default content "from math import *\n" * (20 char) and 10 char of free space. */ static constexpr int k_fullFreeSpaceSizeLimit = sizeof(Ion::Storage::record_size_t)+Script::k_defaultScriptNameMaxSize+k_scriptExtensionLength+1+20+10; - static constexpr size_t k_fileInput2ParseNodeStructKind = 1; - static constexpr size_t k_functionDefinitionParseNodeStructKind = 3; - static constexpr size_t k_expressionStatementParseNodeStructKind = 5; - const char * structID(mp_parse_node_struct_t *structNode); }; } diff --git a/apps/code/variable_box_controller.cpp b/apps/code/variable_box_controller.cpp index 757b14419..246852b4d 100644 --- a/apps/code/variable_box_controller.cpp +++ b/apps/code/variable_box_controller.cpp @@ -113,7 +113,6 @@ bool VariableBoxController::addNodesFromImportMaybe(mp_parse_node_struct_t * par bool loadModuleContent = structKindIsImportWithoutFrom; - // TODO from ScriptStore size_t childNodesCount = MP_PARSE_NODE_STRUCT_NUM_NODES(parseNode); for (int i = 0; i < childNodesCount; i++) { mp_parse_node_t child = parseNode->nodes[i];