Example #1
0
function parseNamedArgValue($ast)
{
    assert_ast_type($ast, [NodeType::LITERAL, NodeType::IDENTIFIER, NodeType::NAMED_ARGS, NodeType::TYPEOF, NodeType::DT, NodeType::GLA, NodeType::GF, NodeType::GT, NodeType::GIST, NodeType::GI, NodeType::NUL, NodeType::FUNCTOR, NodeType::ATTRIBUTE]);
    $source = ast_node_source($ast);
    switch (ast_node_type($ast)) {
        case NodeType::LITERAL:
            return parseLiteralTemplate($ast);
            break;
        case NodeType::IDENTIFIER:
            return new Identifier(parseIdentifier($ast));
            break;
        case NodeType::DT:
        case NodeType::TYPEOF:
            return parseType($ast);
            break;
        case NodeType::ATTRIBUTE:
            return parseAttribute($ast);
            break;
        case NodeType::NAMED_ARGS:
            return parseNamedArgList($ast);
            break;
        case NodeType::FUNCTOR:
            return parseFunctor($ast);
            break;
        case NodeType::GLA:
            return parseGLA($ast);
            break;
        case NodeType::GF:
            return parseGF($ast);
            break;
        case NodeType::GT:
            return parseGT($ast);
            break;
        case NodeType::GIST:
            return parseGIST($ast);
            break;
        case NodeType::GI:
            return parseGI($ast);
            break;
        case NodeType::NUL:
            return null;
            break;
    }
}
Example #2
0
 function parseGIWP($ast, $name, $header)
 {
     // Push  LibraryManager so we can get the waypoint-specific headers
     ob_start();
     LibraryManager::Push();
     $res = new GenerationInfo();
     /***************   PROCESS AST   ***************/
     $payload = ast_get($ast, NodeKey::PAYLOAD);
     $spec = parseGI(ast_get($payload, NodeKey::TYPE));
     $outputs = parseAttributeList(ast_get($payload, NodeKey::ARGS));
     $constArgs = parseLiteralList(ast_get($payload, NodeKey::CARGS));
     $nTuples = ast_get($payload, NodeKey::TUPLES);
     $queries = ast_get($ast, NodeKey::QUERIES);
     foreach ($queries as $query) {
         $res->addJob($query, $name);
     }
     // The spec is (possibly) an incomplete GI type, to finish it we need to tell it to
     // perform a lookup with its outputs known.
     $type = $spec->apply(extractTypes($outputs));
     correlateAttributes($outputs, $type->output());
     $attMap = parseAttributeMap(ast_get($ast, NodeKey::ATT_MAP), $res);
     $res->absorbAttrList($outputs);
     $res->absorbInfoList($constArgs);
     $res->absorbInfo($type);
     /*************** END PROCESS AST ***************/
     // Get our headers
     $myHeaders = $header . PHP_EOL . ob_get_clean();
     // Only one file right now
     $filename = $name . '.cc';
     $res->addFile($filename, $name);
     _startFile($filename);
     GIGenerate($name, $type, $outputs, $constArgs, $nTuples);
     _endFile($filename, $myHeaders);
     LibraryManager::Pop();
     return $res;
 }