Example #1
0
 function parseGISTWP($ast, $name, $header)
 {
     // Push LibraryManager so we can undo this waypoint's definitions.
     ob_start();
     LibraryManager::Push();
     /***************   PROCESS AST   ***************/
     $attMap = ast_get($ast, NodeKey::ATT_MAP);
     $payload = ast_get($ast, NodeKey::PAYLOAD);
     $queries = [];
     // Info to return
     $res = new GenerationInfo();
     foreach ($payload as $query => $qInfo) {
         $gistSpec = parseGIST(ast_get($qInfo, NodeKey::TYPE));
         $output = parseAttributeList(ast_get($qInfo, NodeKey::VALUE));
         $cargs = parseJsonAst(ast_get($qInfo, NodeKey::CARGS));
         $sargs = parseStateList(ast_get($qInfo, NodeKey::SARGS), $query);
         $retState = ast_get($qInfo, NodeKey::STATE);
         $reqStates = [];
         foreach ($sargs as $val) {
             $reqStates[$val->name()] = $val->type();
         }
         $gist = $gistSpec->apply(extractTypes($output), $reqStates);
         //fwrite(STDERR, "GIST outputs: " . print_r($gist->output()) . PHP_EOL);
         correlateAttributes($output, $gist->output());
         $info = ['gist' => $gist, 'output' => $output, 'cargs' => $cargs, 'states' => $sargs, 'retState' => $retState];
         $queries[$query] = $info;
         $res->addJob($query, $name);
         $res->absorbAttrList($output);
         $res->absorbStateList($sargs);
         $res->absorbInfo($gist);
         StateRegistry::addState($name, $query, $gist);
     }
     /*************** END PROCESS AST ***************/
     // Get this waypoint's headers
     $myHeaders = $header . PHP_EOL . ob_get_clean();
     // Only one file at the moment
     $filename = $name . '.cc';
     $res->addFile($filename, $name);
     _startFile($filename);
     GISTGenerate($name, $queries, $attMap);
     _endFile($filename, $myHeaders);
     // Pop LibraryManager again to get rid of this waypoint's declarations
     LibraryManager::Pop();
     return $res;
 }