HempText hemp_text_init_format( HempText text, const HempString format, ... ) { HempString string; HEMP_ALLOCATE(text); va_list args; va_start(args, format); vasprintf(&string, format, args); va_end(args); if (! string) hemp_mem_fail("text"); #if HEMP_DEBUG & HEMP_DEBUG_MEM /* tell the memory trace debugging code that we know about this memory */ hemp_mem_trace_external(string, strlen(string) + 1, __FILE__, __LINE__); #endif text->length = text->capacity = strlen(string); text->string = string; return text; }
HempModule hemp_module_new( HempString name ) { HempModule module; HEMP_ALLOCATE(module); module->name = hemp_string_clone(name, "module name"); module->error = NULL; module->handle = NULL; module->loader = NULL; module->binder = NULL; return module; }
HempViewer hemp_viewer_new( Hemp hemp, HempString name ) { HempViewer viewer; HEMP_ALLOCATE(viewer); viewer->hemp = hemp; viewer->name = hemp_string_clone(name, "viewer name"); viewer->parent = NULL; viewer->view = NULL; viewer->size = 0; return viewer; }
HempFactory hemp_factory_new( Hemp hemp, HempString name ) { HempFactory factory; HEMP_ALLOCATE(factory); factory->hemp = hemp; factory->name = hemp_string_clone(name, "factory name"); factory->instances = hemp_hash_new(); factory->constructors = hemp_hash_new(); factory->cleaner = NULL; // factory->autoload = NULL; factory->autoload = &hemp_factory_autoload; // factory->config = hemp_factory_config_hash(factory, config); return factory; }
HempScheme hemp_scheme_new( Hemp hemp, HempString name ) { HempScheme scheme; HEMP_ALLOCATE(scheme); scheme->hemp = hemp; scheme->name = hemp_string_clone(name, "scheme name"); scheme->namer = &hemp_scheme_namer; scheme->checker = NULL; scheme->reader = NULL; scheme->cleaner = NULL; return scheme; }
HempDocument hemp_document_new( HempDialect dialect, HempSource source ) { HempDocument document; HEMP_ALLOCATE(document); document->hemp = dialect->hemp; document->dialect = dialect; document->source = source; document->scope = hemp_scope_new(dialect->hemp); document->fragments = hemp_fragments_new(document, 0); document->tree = NULL; // document->scanner = NULL; document->scantags = NULL; // document->tagset = hemp_tagset_new(document); return document; }