void Layouts_init(void) { if (ARRAY_size(layouts_) < TAG_USERDEFINED) Layouts_setLargestTag(TAG_USERDEFINED-1); Layout* l = initLayout(TAG_EVALUATING); l->type = LAYOUT_SMALL_NOPTRS; l->x.noPtrs.nWords = 1; l = initLayout(TAG_INDIRECT); l->type = LAYOUT_INDIRECT; }
static kbool_t FuelVM_VisitBlockNode(KonohaContext *kctx, KBuilder *builder, kNode *block, void *thunk) { unsigned size = ARRAY_size(BLD(builder)->Stack); Block *NewBlock = CreateBlock(BLD(builder)); IRBuilder_JumpTo(BLD(builder), NewBlock); IRBuilder_setBlock(BLD(builder), NewBlock); size_t i; for(i = 0; i < kNode_GetNodeListSize(kctx, block); i++) { kNode *stmt = block->NodeList->NodeItems[i]; builder->common.uline = kNode_uline(stmt); if(!SUGAR VisitNode(kctx, builder, stmt, thunk)) break; } ARRAY_size(BLD(builder)->Stack) = size; if(builder->Value) { INode *Node = FuelVM_getExpression(builder); builder->Value = Node; } return true; }
int PARSER_free(PARSECONTEXT *ctx) { SHLIB **val; size_t i; if (LEXER_free( &ctx->lexctx )) { return -1; } // unload extension libraries for( i = 0; i < ARRAY_size( &ctx->extension_libs ); i ++ ) { val = (SHLIB ** ) ARRAY_at( &ctx->extension_libs, i ); SHLIB_unload( *val ); free( *val ); } return 0; }